[MyCraft] 0402 - Skeletal Mesh, Hold Block, Floating Block

김훈래·2024년 4월 2일

UE5_[MyCraft]

목록 보기
4/9
post-thumbnail

Fix: Change block holding method

  • SK_Mesh 말고 Attach Actor To Component 함수를 이용해 블럭 actor 자체를 캐릭터에 붙이려 시도해 봤지만 Scale도 이상하게 되어 손에 든 블럭이 엄청 커질 뿐만 아니라 캐릭터와 계속해서 충돌함, SK_Mesh로 블럭을 구현해 캐릭터 자체에 붙이는 것과 Block Actor를 Character socket에 붙이고 메시와 충돌을 끄는 방향 중 선택해야됨

  • 후자 선택, 메시 자체의 collision을 None으로 설정, Box collision component는 그대로 유지해서 땅에 떨어진 블록 습득 시 overlap 이벤트는 그대로 발생하도록 함

  • BP_MycraftCharacter 액터의 skeletal mesh에 block hold를 위한 socket 새로 추가, 기존 소켓이나 팔에 부착하는 새로운 소켓의 경우 달릴때와 idle일 때 블럭의 위치 차이가 너무 심해서 skeleton의 root에 socket을 새로 만들어서 블럭 진동 최소화 및 유저 화면에 보이도록 위치 설정, socket의 scale을 xyz 모두 0.1로 두어 부착된 블럭이 너무 커지는 현상 픽스

Feat: Add block animation

  • 땅에 떨어진 블럭이 게임에선 위-아래로 이동하며 회전함, 똑같이 구현하기 위해 BP_Block을 수정

  • 우선 배치한 블록을 ground로 snap하여 위치 설정, Delay 없으면 바닥 Voxel 로드 되기 전 line trace를 쏴서 위치 설정 불가능, 현 위치에서 아래 방향으로 Line trace를 쏘고 Impact 지점보다 살짝 높게 떠 있도록 설정

  • BP_Block에 RotationMovement를 추가하여 회전 움직임 컴포넌트를 설정, 해당 컴포넌트는 rotation rate를 xyz 별로 다르게 주어 회전하는 움직임이 구현 가능, rotation rate를 변수화하여 블럭마다 다르게 설정 가능하도록 설정

  • 위 아래로 움직이는 것 구현, timeline을 추가하고 더블클릭하여 편집에 들어가 track을 추가한 뒤 키 프레임을 추가하여 0~1~0 부드럽게 움직이도록 설정, Snap Location을 가져와서 변수화 해 둔 Floating Height만큼 위 아래로 위치를 Linear interpolation 하도록 설정

구현 결과

  • gif 변환 후 rotation이 느려 보임, 인게임에선 마인크래프트의 속도와 비슷

Fix: Hold block in the hand

  • 블럭 액터를 직접 캐릭터에 붙였더니 손에 들고도 블럭이 돌아가고 땅에 snap 되려 하는 현상 발생

  • 캐릭터가 땅에 떨어진 블럭을 먹으면 snap과 회전과 bobbing을 멈춰야함

  • snap은 begin play 시 한 번 일어나서 변경하지 않아도 됨

  • 회전은 rotating movement의 rotation rate를 0,0,0으로 만들어 해결

  • bobbing은 timeline component를 가져와서 stop하여 해결

Future work

  • 이제 UI 추가 -> 블럭 설치, 파괴 구현 -> PCG를 통한 블럭/나무 생성으로 마무리할 예정

0개의 댓글