기본 콘텐츠로 건너뛰기

250416 3인칭, 무기변경, 구르기,바라보기

하위 메쉬의 애니메이션 설정

Set Leader Pose Component를 통해 리더가 될 Mesh를 지정하면 해당 메시를 따라 다른 것들도 따라 애니메이션이 동작한다.

플레이어 블루프린트에서 카메라 설정
UseControllerRotationYaw : WASD에 따른 캐릭터의 회전 유무
UsePawnControlRotation : 마우스로 카메라를 회전 할 것인가
OrientRotationToMovement : 카메라가 바라보는 방향으로 캐릭터를 회전 이동할 것인가


애니메이션 블루프린트
Character Movement를 저장해준다.


Blueprint Thread Safe Update Animation

Thread Safe 함수는 스레드 세이프가 아닌 블루프린트와 컴포넌트에 바로 액세스할 수 없습니다. 스레드 세이프가 아닌 블루프린트와 해당 프로퍼티에 안전하게 액세스하려면, 프로퍼티 액세스(Property Access) 기능을 사용하여 블루프린트의 데이터를 읽고 함수를 호출하면 됩니다. 

간략하게 이야기하자면, 여기서 값을 가져오는 게 최적의 방법이고, 여기서는 PropertyAccess를 통해 값을 가져와야 한다.

Function에 Override를 클릭해서 만들 수 있다.


Property Access

Blueprint Thread Safe Update Animation에서는 Property Access할 수 밖에 없다.

Property Access를 통해 PawnOwner의 Velocity를 가져와서 저장하고, 스칼라 값으로 바꾸어 속력으로 저장한다.


Blend Space로 Horizontal 값을 Speed, 최대 값을 600으로 하고 애니메이션을 넣어준다.

한번 더 PropertyAccess를 통해 CharacterMovement의 IsFalling을 가져온다.

플레이어의속도

GetShouldMove Function을 만들어서 확인하고, BlueprintUpdate에 연결해준다.


State Alias

설정한 상태를 주시하고 있다가 조건을 만족하면 실행

ToJump는 이동 또는 착지 시에 확인을 하고

ToLand는 점프 중 또는 점프 시작 중에 확인을 한다.


To Jump => JumpLoop


To Jump => JumpStart


ToLand=>JumpLand

Automatic Rule Based on Sequence Player in State

조건에 해당 설정을 체크하면 만족하면 바로 재생된다.

JumpStart=>JumpLoop와 JumpLand=>Idle/Walk/Run으로는 다음과 같이 설정해준다.



구르기


GetLastInputVector에 Normalize를 한 뒤 값을 곱하여 Launch Character에 넣으면 해당 값만큼 캐릭터에 더해진다. 전과 마찬가지로 Override해서 속도를 맞추는 게 좋다.


몽타주

몽타주 하나에 추가할 애니메이션 시퀀스를 선택하여 끌어 넣어준다.

각각 개별적으로 재생할 것이기 때문에 우측에서 연결을 끊어준다.

상단의 디테일에서 이름을 설정할 수 있다.

여기서는 Forward, Back, Right, Left로 설정해 주었다.


실제로 사용할 때는 Name을 이용해서 StartingSection에 해당 이름에 맞는 애니메이션을 재생시켜주면 된다.


무기 추가하기

BP_Camera를 만들어서 카메라 컴포넌트를 넣은 다음 SceneComponent를 덮어씌워 루트로 만든다. SetViewTargetWithBlend를 쓰기위해서 카메라 컴포넌트를 없애고 Child Actor로 BP_Camera를 넣는다.

Begin Play에 기본 설정을 해주는 것도 잊지말자

등에 부착하기 위한 소켓과, 무기를 손에 잡기위해 소켓을 만들어 위치와 회전값을 조정한다.
블루프린트로 가서 이를 위한 스태틱매시를 추가해주고, Socket에 해당 위치를 할당해준다.



Enum을 하나 만들어서 E_Weapon이라 하고 플레이어 캐릭터의 변수로 저장한다.

Change Weapon 이벤트를 하나 따로 만들고 각 입력에 연결해준다.

Montage 에 Notify를 추가하고 Attach 라는 이름으로 정한다.

이제 다음과 같이, NotifyBegin으로 바꾸고 NotifyName을 검사하여 플레이하면된다.

Attach to Component To Component를 실행한다.
Socket을 바꾸어주어야 하고, Location Rule과 Rotation Rule을 Keep World 로 해주어야 한다.

Move Component To를 이용해서 0,0,0의 위치, 회전값으로 바꾸어 준다. 이렇게 하면 좀 더 부드럽게 보여진다.

변경되는 부분이 소켓 이름에 따라 바뀌므로 매크로를 만들어서 정리해주자.


애니메이션 몽타주로 가서 슬롯을 Upper로 변경해준다.


AnimGraph에 슬롯을 추가한 뒤 이름을 Upper로 바꾸어 준다.

Upper 슬롯을 캐쉬된 Main과 연결해주고, Layered blend per bone을 이용해서 상반신(spine_01)에 적용되도록 한다.

이외에 아래도 비슷한 역할을 한다.

바라보기
플레이어가 바라보는 위치를 위해서 LookAt을 추가한다.
타겟의 Bind를 클릭하여 expose as pin을 해준다.

Alpha값과 Location값을 저장한다.

플레이어의 블루프린트에서 IsLookAt을 Bool형으로 하나 만든다.
GetTarget 함수를 만들어서, 전체 Actor중에 캐릭터인 것 중에 본인이 아닌 것들을 저장한다.
그리고 그 안에 랜덤으로 하나를 지정하여 타겟으로 한다. 없을 경우는 비워준다.

GetTargetInsight함수를 만들어서, Tick에 연결해준다.

애니메이션 블루프린트의 이벤트 그래프에서 추가한다.

Blueprint Thread Safe Update Animation에서 캐릭터로부터 IsLookAt을 Set한다.

Update Target함수를 만들어준다.
Get Actor Eyes View Point는 눈의 위치를 맞추어 준다.
시간에 따라 눈이 움직이는 FInterp를 이용할 것이므로 Tick에 연결해준다.



♦️참고
애니메이션 최적화 BlueprintThreadSafeUpdateAnimation
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/animation-optimization-in-unreal-engine#blueprintthreadsafeupdateanimation

트랜지션 룰
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/transition-rules?application_version=4.27

Lookat
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/animation-blueprint-head-look-at-in-unreal-engine?application_version=5.5



이 블로그의 인기 게시물

250523 PCG 2

PCG Building Volume Sampler를 사용할 경우 Voxel Size를 맞추어주자. 2m길이를 Transform Points로 Offset을 이동시켜 Difference를 통해 메쉬를 생성한다. 사용시에 Pivot의 위치가 중앙이 아니면 제대로 표현되지 않을 것이다. PCG Landscape Landscape 생성후 PCG Volume 생성. Get Landscape Data - Surface Sampler 안보인다면 Generate Surface Sampler 일반 그리드 패턴으로 서피스 데이터에 포인트를 샘플링합니다. 이 노드에는 다음과 같은 옵션이 있습니다. 포인트 규모(Point Extents) : 서피스의 기본 그리드 셀 크기를 정의합니다. 여유(Looseness) : 변형 가능한 셀 크기를 정의합니다. 실제로 셀 크기는 포인트 규모 * (1 + 여유)입니다. 제곱미터당 포인트(Points Per Square Meter) : 유지되는 셀의 비율을 계산합니다. 이 프로퍼티는 그리드가 클 때 과잉을 제한합니다. Looseness : 기본 1. 0일경우 Extent의 길이 만큼, 1일경우 2배가 됨.  Attribute Filter를 생성하고, Material에 해당하는 Layer를 찾아서 이름을 넣어준다. Type을 Float로 하고 Float Value를 설정하면, 해당 머티리얼이 색칠된 정도 0~1에서 Operator에 의해 >(초과) 0.6초과 일 경우만 생성되게 할 수 있다. 값을 1로 하고 Equal을 이용해서 1인 경우만 생성되게 하는 것도 가능하다. plugin Water body lake를 넣으면, 이또한 Spline이라는 것을 알 수 있다. 따라서 Get Spline Data-Spline Sampler를 통해 사용할 수 있다. GetActorData와 Difference를 통해서 Lake내부를 제거해주기 PCG Mesh Mesh Sampler를 쓰기위해 Get Actor Property를 이용하면, 해당 액터가 ...

250604 저장불러오기

SaveGame 블루프린트 생성 Game Instance 생성, Init 오버라이드 AC_Inventory Save Load

250522 Physics2, PCG

Radial Force Actor Force 값을 많이 주어야함. Balloon Mass값과 PhysicsThrust를 이용하거나, Set Physics Linear Velocity를 이용하여 Z축 값을 줄 수 있다. Skeletal Physics Physics Material Friction : 마찰력. 수치가 클수록. 덜 미끄러워짐 Restritution : 복원력. 탄성계수 수치가 높을 수록 bouncy Fracture voronoi : Cluster의 숫자 Show Bone Color 해제해주기 Damage Damage Threshold의 값을 수정하는 것으로 강도 조절 가능. Chaos Cache Actor에서 Chaos Cache Manager를 생성 가능. Record 기능이 존재한다. 일단 생성하면 Chaos Cache Collection을 저장하여 사용할 수 있게된다. Cachos Cache Manager를 Simulate를 누르면 저장되고, 실행을 종료하면 그동안의 변화상황이 저장된다. 저장된 Collection을 가져와서 Sequencer의 StartTime으로 가져와 재생할 수 있다. PCG plugin Spline생성후 포인트 하나 지워 줌 우클릭으로 Spline Generation Panel, Square 생성. 처음 지점 포인트 겹쳐있을 수 있으므로 찾아서 삭제해주기 Get Spline Data => Spline Sampler D키 또는 Debug에 체크를 해주고, Dimension 설정을 해준다. On Interior의 경우, Unbounded에 체크를 하면 내부에도 생기게 된다. Static Mesh Spawner Intersection : 교차점 이 부분은 tag가 Spline과 Overlap되어 닿으면 바꾸어 준다. Difference를 이용해 그외 부분은 채워 넣는다. 길 By Class로 설정해주기 On Spline - Distance Extent Radius 설정해주기 Difference를 통해 제외하기 PCG는 A...