[MyCraft] 0404 - Block Inheritance, BP function, BP custom event

김훈래·2024년 4월 4일

UE5_[MyCraft]

목록 보기
6/9
post-thumbnail

Feat: Add block types

  • Cobblestone, Gold, Oak Log, Oak Leaves, Emerald

  • 해당 블럭 슬롯 이미지와 텍스쳐를 마인크래프트 위키에서 다운로드하여 사용, 머티리얼로 바꾼 뒤 블록에 적용시킴

  • 추후 블록 추가/파괴 로직 구현 시 모든 블록의 BP를 바꾸기는 생각만 해도 끔찍하여 BP_Block 클래스를 만들고 상속을 통해 여러 블록을 구현

  • BP_Block에 Bobbing delay duration, rotating delay duration을 랜덤으로 추가하여 각 블럭마다 위/아래 회전 움직임이 다르도록 설정

  • 단순 반복 작업이라 30분 정도 걸린 듯

구현 결과

Feat: Change block when number input

  • 숫자 입력 시 현재 선택된 퀵슬롯의 칸을 변경하는 것은 연동되어 있고, 아이템 습득 시 퀵슬롯에 저장되는 것도 연동되어 있으니 숫자 입력 시 퀵슬롯에 해당하는 블록을 손에 들도록 연동해야함

  • 현재 습득하는 모든 블록은 캐릭터에게 붙음, 입력된 번호의 퀵슬롯의 블록만 보이게 하고 나머지는 투명하게 만들어서 구현

  • BP에서도 여러 노드를 하나의 함수로 만들 수 있었음! 기존 draw 되어 있던 previous quickslot index의 블록 mesh를 지우고 새로운 current quickslot index의 블록 mesh를 draw하는 RenewHoldingBlock 함수를 정의하여 마우스 휠 입력에도 자연스럽게 블록 전환이 가능하도록 구현

  • 생각보다 복잡해서 3시간 정도 걸린 듯

구현 결과


Feat: Place block when right click

  • 현재 들고 있는 블록이 있다면 우클릭 시 해당 블록을 설치, 사정거리를 두어 너무 먼 거리에는 블록을 설치할 수 없음

  • 설치를 위한 블록 BP를 새로 만듦, BP_Block_Placed

  • 현재 들고 있는 블록을 Get한 뒤, 카메라의 Forward vec과 World Location을 Get하여 그 방향으로 Line을 Trace한 뒤 Impact 한다면 Impact 위치에 BP_Block_Placed를 Spawn Actor From Class를 통해 생성하도록 구현

  • BP_Block_Placed의 pivot이 정육면체의 중앙에 존재, 단차만큼 위치에 더하여 스폰해야 정확한 위치에 설치됨, Impact point의 좌표값을 scalar 값으로 나누고 소수점 부분을 버린 뒤 다시 scalar 값을 곱해서 블록이 쌓이는 것을 표현, scalar 값은 블록의 크기로 설정, 대략 70정도 되는 듯


  • 설치한 블록의 머티리얼을 들고있는 블럭의 머티리얼로 설정해야됨, spawn하며 block id를 설정하여 placed block의 begin play 이후 블록 아이디에 따라 다른 머티리얼을 각 메시에 입히려 했지만 spawn과 동시에 begin play가 먼저 호출되고 블록 아이디가 설정되어 머티리얼이 제대로 입혀지지 않음

  • 커스텀 이벤트를 만들어 해당 Object reference에서 호출할 수 있음! Custom event를 placed block에 작성하고 block id가 설정된 후에 호출하여 해결

  • 로직이 생각보다 복잡해서 4시간 정도 걸린듯

  • 설치되는 위치 조금 이상함, offset scalar 값을 변경하거나 로직 변경 필요

구현 결과

Feat: Destroy block when left click

  • 블록 설치 이후 해당 블록에 좌클릭 시 블록이 사라져야함

  • 설치와 달리 쉽게 구현, 설치와 같이 line trace 후에 hit한 actor가 BP_Block일 경우에 해당 블록을 destroy

Future Work

  • Fix: Place block when right click: wrong location placement issue

  • 맵 구성 변경 -> PCG를 통한 블록/나무 생성

  • NPC 구현 -> ChatGPT API 연결

0개의 댓글