UnrealEngine5 PickUpItem C++구현 (1)
1. ItemDataStruct
게임에는 상호작용이 가능한 액터와 불가능한 액터가 있다.
그것을 나누어 주기 위해 우선 아이템 데이터 정보를 구조체로 저장하여 만들어준다.
DataTable로 생성하고, cpp을 사용하지 않고 h 헤더파일만 사용한다.
위와 같이 액터에 필요한 정보들을 미리 적어주며 시작한다. 필요없는 부분은 따로 적지 않아도 괜찮다.
갯수에 대한 부분은 인벤토리가 있는 경우 해주는것이 좋다. ( 추후 인벤토리도 만들 예정)
2. ItemBase
방금 만들 ItemDataStruct를 활용해 데이터를 받아오는 작업을 해준다.
헤더파일에 ItemDataStruct.h를 추가해주고
아이템 정보를 이용하여 할 수 있는 기본적인 함수들을 만들어준다.
수량이나, 무게, 스택 이런것들을 가져온다.
cpp 파일에서는 본격적으로 아이템 정보를 복사하여 데이터를 확인하는 함수를 완성시켜준다.
작업이 완료 되었다면 interface를 표출해줄 파일을 만들어준다.
언리얼 인터페이스로 만들어주면 된다.
픽업 작업을 할 시 레이캐스팅을 통해 할것인데 그때 충돌이 일어나면 상호작용을 통해 화면에 띄워줄 작업을 해줄 파일이다.
h 파일
상호 작용을 할 액터에는 여러 종류가 있을 것이기에 생각되는대로 미리 적어주면 편하다
cpp은 따로 적을 것은 없다.
이제 캐릭터에서 상호작용을 위해 레이캐스팅 준비를 해준다.
만들어둔 상호작용 인터페이스 헤더파일을 추가하고 구조체로 상호작용 가능한 액터를 추가해주며 시작한다.
다음 상호작용이 되었을 시 작용될 함수를 만들어준다.
cpp 파일로 이동해 함수 내부코드를 짜주자
우선 선을 그려줄 드로우디버그헬퍼를 추가해준다.
상호작용이 되는 경우에 위의 레이캐스팅 함수를 시작해줄 상호작용 시작 함수이다.
캐릭터에서 일정 거리에 선을 쏘아주는데
눈높이에서 시작하여 카메라의 회전값을 이용해 감지할 수 있도록 해준다.
그 다음 캐릭터의 뒤를 감지할 수 없도록 설정을 해주고, DrawDebug로 보기 쉽도록 화면상에 선을 그려준다.
다음 라인추적을 실행하며 자기자신은 감지못하게 해주고, 선에 Hit 판정이 나면, 인터페이스를 표출해줄 준비를 해준다.
작업이 완료되면 이제 기본 설정을 해준다
캐릭터 초기값에 상호작용 거리와 실행 속도 그리고 눈높이 위치를 설정해준다. 자신의 캐릭터와 맞게 해주면 된다.
다음 틱함수를 이용해 지속적으로 선을 그려주며 체크하여 준다.
이제 상호작용해줄 액터 파일을 만들어 준다.
cpp파일
액터의 초기 메시를 설정해준다.
다음 함수가 실행될때 메세지와 메시를 지속확인해준다. 오류 방지
이제 언리얼 에디터 창으로 넘어와 맵에 PostProcessVolume을 추가하여 주고,
디테일 패널로 이동하여 한국어로는 무한 구모(언바운드)에 체크, 영어라면 infinity를 치면 아마 체크박스 할 수 있는 것이 나올 것이다. - 포스트프로세트볼륨의 범위를 무한으로 해준다는 뜻이다.
다음 디테일 패널에서 렌더링 기능 패널로 이동하여 포스트 프로세스 머테리얼 - 배열 엘리먼트를 하나 추가하여 주고,
이 글 맨 아래쪽에 파일이 하나 있다 그것을 다운받아 언리얼에 임포트 해주고, 해당 머테리얼을 추가 해주면 된다.
그 다음 ItemDataStruct를 기반으로 하는 데이터테이블을 만들어 주고,
상호작용 할 메시와 정보들을 추가해준다.
다음 아까 만든 PickupActor.cpp 파일을 부모로하는 블루프린트자식 액터를 만들어주고, 데이터 테이블에 넣어준 메시를 액터에 넣어준다음 맵에 배치해주고 테스트를 해보면 레이트레이싱을 통해 액터와 충돌이 일어났을 때 액터의 외곽선이 노란색으로 뜨며 캐릭터와 상호작용 하는것을 알 수 있다.
이제 버튼을 이용해 상호작용을 시작하는 작업을 진행한다. 입력 키를 추가해주고, 언리얼 에디터창으로 가서 input을 추가하여준다. bool값으로 하면 되고 따로 설정할 것은 없다. 그런다음 다시 테스트를 시작하고 액터와 상호작용 되었을때 버튼을 통해 눌러주면 액터.cpp에 설정한 BeginInteract에 짜둔 로그가 뜨는 것을 확인할 수 있을 것이다.