전체 글 403

[UE4] 활 줄(Bow String) 당기기, UPoseableMeshComponent

활을 쏠 때 손으로 활 줄을 당겼다가, 활을 쏘는 순간 활 줄을 놓으면 줄이 원위치로 돌아온다. 이러한 기능을 구현하기 위해선 활의 Mesh Component를 수정해야 하는데, Mesh를 수정하기 위해선 Mesh Component의 상속구조에 대해 알아야 한다. 📚 UPoseableMeshComponent 활의 Mesh를 변경하기 위해 활 블루프린트에 PoseableMeshComponent를 추가하였다. UPoseableMeshComponent - 매 프레임마다 애니메이션의 변화된 모습을 캡쳐(복사)해서, 키 정보(bone에 대한 정보)를 임의로 수정할 수 있다. - 정보를 수정하기 때문에 속도는 느리다. PoseableMeshComponent를 이용하면 활 줄의 Mesh를 순간 캡처하여 활시위에 대한..

[UE4] UI(UMG), Crosshair, 조준점 추적하기(LineTraceForObjects), Set Visibility

🖼️ UI (UMG) 언리얼에서 UI를 설정하기 위해선 언리얼 모션 그래픽 UI 디자이너(이하 UMG)를 사용해야 한다. UMG 의 핵심에는 Widget (위젯)이라는 것이 있는데, 이는 미리 만들어진 (버튼, 체크박스, 슬라이더, 진행상황 바 등의) 함수 시리즈로, 이들을 조립해서 UI 를 만들 수 있다. 위젯은 일반 위젯이 있고, 패널이라는 위젯이 있는데 패널은 자기 스스로를 표현하지 않고 여러개를 묶어서 올려주는 역할을 수행한다. 위젯 블루프린트를 생성하게 되면 일반적으로 Canvas라는 패널이하나 들어가게 되는데, 이는 실제 게임 모드의 뷰포트와 1:1 호환되어 적용된다. Canvas 패널(화면 영역)에 실제 게임모드에 사용되는 UI들(HP바, MP 등)을 그려주고, 게임 상에 배치되는 에너지, ..

[UE4] 액터의 생명 주기(Actor Life Cycle), 액터가 소멸될 수 있는 경우, End Play 사용

🚧 액터의 생명 주기(Actor Life Cycle) 액터가 스폰되고 나서부터 소멸될때까지의 수명 주기는 매우 중요한 내용이므로 정리해두는 것이 좋다. 🚩 Play in Editor (PIE) 1. 에디터에 있는 액터를 새 월드로 복제합니다. 2. PostDuplicate (복제 이후)를 호출합니다. 3. InitializeActorsForPlay (플레이용 액터 초기화) Play in Editor는 사용자가 에디터에서 플레이 버튼을 누른 상황을 의미한다. 그러면 모든 액터들을 듀플리케이트해서 게임이 실행될 때 보이는 월드(Level)가 복제된다. 게임을 실행시키고나서 Enemy의 위치를 옮겨놓으면 Level 상에서만 복제되어 이동된 결과이기 때문에 게임 실행을 끄면 다시 원위치로 돌아온다. 🚩 Load..

🎮Unreal4/Basic 2023.02.09

[UE4] 활 조준 상태 만들기

🏹 활 조준 상태 만들기 활을 조준하는 상태에서는 스켈레탈 메시의 상체만 활을 조준하고 하체는 이동하는대로 걸을 수 있도록 구현할 것이다. 활을 조준하는 동작이 AR_Aim이기 때문에 기본동작 BS_Bow와 AR_Aim을 블렌딩하고 현재 활을 조준하고 있는 상태인지를 알려주는 Bow Aiming 변수에 따라 포즈 블렌딩을 수행한다. 결과적으로 마우스 오른쪽 버튼을 Pressed 하는 동안 조준 상태가 되도록 구현되었다.

[UE4] Aim Mode(Pressed/Released), Spring Arm Offset, Set Field Of View(FOV, AspectRatio), 커브, 타임라인 추가

🎯 Aim Mode (Zoom In/Out) 게임속에서 플레이어가 활을 쏠 때 타겟을 조준하는 기능을 자주 본 적이 있다. 따라서 이번에는 마우스 오른쪽 클릭을 통해 타겟을 조준하는 에임모드를 구현해보았다. 먼저 에임모드는 활 무기를 사용할 때 실행시키기 위해, 활 무기를 장착했을 때 Aim 이라는 이름의 SKill_Aim 클래스를 스폰해주었다. Skill_Aim 클래스에서는 캐릭터의 Spring Arm 컴포넌트와, Camera 컴포넌트를 각각 변수안에 저장해두었다. 에임모드를 구현하기 위해 AimData라는 구조체를 만들어 각각 필요한 속성을 선언하고, Aim을 구현하는 Skill_Aim 클래스에서 각 속성대로 Origin변수와 Aim Data 변수(AimData 형식 변수)를 초기화시켜 주었다. 🚩 ..

[UE4] 에임 오프셋 (1D/상하), 시야각 제한

🎯 에임 오프셋 (1D, 상하) 에임 오프셋은 기준 애니메이션을 가지고, 기준 애니메이션을 가지고 위를 보는 동작, 밑을 보는 동작을 만든다. 에임 오프셋을 이용하면 캐릭터가 마우스 또는 컨트롤러 방향으로 무기를 조준할 수 있도록 포즈의 블렌딩 기능을 사용할 수 있다. 에임 오프셋은 블렌드 스페이스와 매우 유사하지만, 차이점은 분명 존재한다. 블렌드 스페이스는 자기 자신이 시작하는 애니메이션의 값이 되는 반면, 에임 오프셋은 들어오는 애니메이션을 배치한 기준 애니메이션들과 섞어준다. 애니메이션 블루프린트에 에임 오프셋을 배치해보면 블렌드 스페이스와 다르게 입력 포즈가 있다. 베이스 포즈로 들어온 동작과 에임 오프셋에 설정된 동작이 섞이면서 최종적인 애니메이션을 출력하게 된다. 에임 오프셋의 Pitch 값..

[UE4] 가비지 컬렉션, Pending Kill, 활 쏘기, Get Attach Parent Actor, DetachFromActor

🪣 가비지 컬렉션 (GC, Garbage Collection), Pending Kill 블루프린트에서 Destroy Actor 함수를 호출하여 어느 객체를 지우면 해당 객체가 바로 사라지는 것 같지만, 사실은 바로 지워지지 않는다. 언리얼에는 메모리 관리기법으로 "가비지 컬렉션"을 사용한다. 가비지 컬렉터라는 쓰레기 수집기가 링크가 끊어진 부분을 찾아서 링크가 끊어진 상태(=Pending Kill, 킬 대기)라면 해당 객체를 지우는 과정이 내포되어 있다. 즉, 오브젝트나 컴포넌트가 Destory되면 씬 상에서 제거된 것으로 보이지만, 메모리 상에서는 Pending Kill 상태가 되어 다음 GC(Garbage Collection) 실행 시 메모리에서 해제되는 것이다. C++ 코드 상에서 유효성을 검사할 ..

[BattleProject] 타겟 죽은 후 가장 가까운 타겟 재설정

https://youtu.be/f2qOB9l6_ts 작업일지 진행중인 작업 (문제점) - Enemy 그룹 전투 구현 - 구조 정리 및 재설정 - 잔버그 정리 진행 예정 작업 - 문제점 해결 - 플레이어 방어 구현 - 플레이어 반격 구현 진행 완료 작업 1. 일정 반경 내 플레이어 들어오면 타겟 설정 및 추격 - 추격의 시작과 끝에 따라 Enemy 무기 장착/해제 2. 일정 반경 내 플레이어 들어오면 콤보 공격 - 콤보 공격 중 범위 밖으로 나갈 시 공격 중단 - Enemy 공격 중 플레이어 공격 시 애니메이션 초기화 상태 수정 + 콤보 이어서 공격 - 플레이어와 Enemy의 체력 감소 (데미지) 및 죽음 구현 3. Enemy 그룹 전투 - Enemy 간 공격/죽음 기능 구현 - Enemy 그룹화 - 같은..

[UE4] 헷갈리는 Rotator 함수 정리

Get Forward Vector 언리얼에는 별도의 Get Forward Vector 함수가 두 개 존재한다. Math -> Vector -> Get Forward Vector - 월드 앞쪽 벡터를 주어진 회전값만큼 회전시킨다. Untilitied -> Transformation -> Get Forward Vector - 타깃으로 들어오는 컴포넌트의 월드 정면(X축) 벡터를 구한다. Make Rotator Make Rotator - 회전값(단위는 각도)에서 로테이터(Roll, Pitch, Yaw)를 생성한다. Make Rot from X 종류 - X축만 기준으로 하여 로테이터를 생성한다. Y 및 Z 는 지정되지 않지만, 로테이터와 직교한다. X축은 정규화하지 않아도 된다. RotationFromXVect..

🎮Unreal4/Basic 2023.02.07

[UE4] 애니메이션 Layer, 링크된 애님 레이어

💃 애니메이션 Layer 애니메이션 디자이너는 Layer를 이용해서 애니메이션을 합치는 등 다양한 기능을 구현하지만, 나는 간단히 레이어를 이용한 구역 나누기를 수행해보았다. 애니메이션 블루프린트에서 기본적인 행동(Locomotion)을 담는 레이어와, 화살 공격 기능(Bow Layer)을 담는 레이어를 추가해주었다. 위와 같이 두 레이어를 모두 생성하고 배치하였으면 AnimGraph에서 해당 레이어들을 불러올 수 있다. 링크된 애님 레이어 함수를 이용하여 디테일 패널에서 연결할 Layer를 선택할 수 있고 위와 같이 애님 그래프에서 배치하여 기능이 다른 포즈의 애니메이션들의 구역을 분리해줄 수 있다.

[UE4] ProjectileMovement (FireBall 던지기 공격)

🚀 ProjectileMovement (발사체 무브먼트 컴포넌트) Projectile Movement 컴포넌트는 루트 액터에 존재하는 충돌체를 움직이고 싶은 경우 사용할 수 있다. (충돌체만 움직일 수 있다.) 언리얼 문서에서는 Tick 이벤트가 호출되는 동안 다른 컴포넌트의 위치를 업데이트해주어 충돌 후 튕김이나 미사일같은 작동 방식을 구현할 수 있다고 적혀있다. 주로 해당 컴포넌트가 움직이는 충돌체는 소유 액터의 루트 구성요소이지만 다른 구성요소를 선택할수도 있다. 컴포넌트의 많은 기능 중 사용할법한 몇 기능만 설명하겠다. Projectile - Initial Speed : 최초 속도 - Max Speed : 가속 시킬 경우 최대 속도 (가속이 없다면 0) - Projectile Gravity Sca..

[DX] Mesh 부모 클래스, SRT 순서, ID3DX11EffectMatrixVariable, D3DXMatrixRotationYawPitchRoll

Grid는 격자모양이고 Mesh는 그물망 모양이다. ❗SRT 순서가 중요한 이유 world = S * R * T; R 회전 후T 이동을 먼저 수행하는 것과 T 이동 후 R 회전을 먼저 수행하는 것은 서로 다른 결과가 도출된다. 1. 45도 회전한 후 10만큼 이동 -> 회전한 방향으로 10만큼 이동 2. 10만큼 이동 후 45도 회전 -> 정면으로 10만큼 이동 후 회전 S 스케일 조정 후 T 이동을 먼저 수행하는 것과 T 이동 후 S 스케일 조정을 먼저 수행하는 것은 서로 다른 결과를 도출한다. 1. 2배만큼 커진 후 10만큼 이동 -> 총 20만큼 이동 2. 10만큼 이동 후 2배 커지기 -> 총 10만큼 이동 openGL이나 엔진들의 경우 TRS 순서를 사용하는 경우도 있다. 💡 ID3DX11Eff..

🎨DirectX 2023.02.07
728x90