레퍼런스/Animation

수직벽 걷기

UNREAL 2024. 5. 29. 20:08

https://youtu.be/dPJEw8SbfDA

 

삼인칭 템플릿을 만들고 벽 2개를 만들고 PlayStart도 벽앞에 배치한다. 액터 tag를 wall로 해준다. 

BP_ThirdPersonCharacter EventGraph에 앞으로 45를 탐색할수 있는 라인트레이스를 만들어준다. 디버깅해보면 +45도가아니라 -45도로 트레이스가 그려진다.

3개의 변수를 추가한다. 컴파일후 bcanwallJump는 디폴트값을 true로 한다.

eventTick대신에 IA_Jump 이벤트를 하나더 추가하고 Velocity Length를 검사해 움직이면서 점프할때만 라인트레이스가 되게 해준다.

BreakHitResult를 끌어서 충돌이 있을대 ActorTag를 검사해서 wall일경우만 처리한다. CanWallJump가 true일 경우 false로 하고 LeftJump를 true로 체크한다.

LaunchCharacter를 이용해 캐릭터를 날려주는데 왼쪽 대각선 벡터로 날려준다. Z방향은 850으로 고정해주자

왼쪽벽쪽으로 점프를 하면 일반 점프때 보다 멀리뛰면서 약간 왼쪽으로 점프하게 된다. 강의에서는 LaunchCharacter의 LaunchVelocity Y만 연결해주었는데 그럼 앞으로만 나가서 XY를 둘다 연결해봤다. 대각선이 반영되었다. 비스듬하게 들어갈 경우는 오히려 부작용만 있을것 같다.

LauchVelocityY값을 계산시 GetActorScale3D로 Y값을 취했는데 이건 wall의 스케일 값이다. wall의 길이 만큼 점프하게 된다.

오른쪽도 같은 로직을 해야하므로 함수로 만들고 왼쪽입력을 Bool로 만들어 처리하였다. 로컬변수로 direction을 만들어 input값 left에 따라 설정하였다. 이건 강의에는 없다.

 

애니메이션 블루프린트로  LeftJump RightJump 변수를 만들고 가서 아래 부분을 개조하자.

시퀀스 +를 눌러 Then3를 추가하고 RightJump, LeftJump를 BP_ThirdPersonCharacter의 값으로 지정해준다.

AnimGraph의 MainStates로 이동해서 HiWall_RDash_Loop라는 오른쪽으로 기울어져서 걷는 애니메이션시퀀스가 미리 만들어져 있다.

조건으로 RightJump를 연결해주고

 

떨어지는 애니메이션시퀀스를 넣어주고 조건으로 not is falling을 추가해준다.

다시 랜드로 연결해주고 같은 조건을 넣어주자.

왼쪽도 똑같이 만들어 준다.

플레이 해보면 RightJump LeftJump 조건에서 애니메이션을 이용해서 벽을 타는것 처럼 보여주고 있다. IK_Foot을 이용할줄 알았느느데 생각보다 단순 기발한 아이디어 같다.