플레이어의 위젯 관련해서는 Controller에서 관리하는 게 좋다.
Update Physics Handle
여기서 사용할 Player의 카메라, 타깃을 설정해주고 있다.
Grab
Trace를 통해 위치를 찾는다. 거기에
Throw
플레이어 Camera의 포지션
Release C
Scroll
물체를 잡았을 때, 거리를 조절 할 수 있도록, 잡은 물체와의 거리 값(HandleDistance)를 변경
Trace Start와 Hit Component의 World Location만큼의 거리를 거리 값으로 설정.
Return Node를 추가해서, Trace 체크와 Grab을 분리하여 만든다.
Return Node에 반환할 값은 우측의 Output에서 추가하거나 다른 블루프린트에서 끌어다 넣으면 된다.
그대로 물체를 내려놓기 위해서 IsHelding이라는 변수를 추가해준다.
Throw에서 False로 설정해주고, 잡을 때 True로 설정 해주면 된다.
Release Component만 사용해주면 된다.
Simulate Physics 물체가 물리 영향을 받을 것인가
Mass 무게
Linear Damping : 선형 저항 (마찰력)
Angular Damping : 회전 저항
BluePrint Interface
일종의 가상 함수.
만들어서 다른 블루프린트에 추가하여 재정의 하는 방식으로 사용한다.
간단하게 Interaction, DropItem이라는 함수를 하나 만들고 저장한다.
클래스 세팅의 우측의 Implementd Interfaces에 추가해준다.
추가되었다면 좌측에 인터페이스 함수가 생긴다.
Create Child Blueprint Class를 통해 BP_Button_Kiosk라는 자식 블루프린트를 만들어준다.
두 액터를 배치해서 확인하면 동일하게 머티리얼을 바꾸는 것을 볼 수 있다.
여기서 알 수 있는 것은, 따로 정의하지 않아도 부모의 인터페이스를 사용한다는 것.
거기에 추가로 재정의해서 사용할 수 있다는 점.
그리고 DropItem처럼 어떤 함수를 선언하고 사용하지 않아도 문제가 생기지 않는다는 장점이 있다.
동일한 부모로부터 오버라이드를 이용한다.
앞서 만든 문 블루프린트를 그대로 복사하고, 박스 콜라이더를 하나 추가하고
충돌에 의한 호출을 통해서 자동문을 만든다.
아이템 얻기
인터페이스에 GetItemEquip를 추가하고, Inputs에 Scene Object를 하나 추가해준다.
여기서 범위안에 있는 BP_Item이 콜리전 범위 안에 들어와 있을 경우에 Interface인 Get Item Equip가 실행되도록 한다.
타임라인을 0-1로 해서, 끝까지 이동하면 해당 아이템을 없앤다.
Map 사용해서 아이템 장비하기
그리고 1번 누르면 아이템이 장비된다.
Enum을 하나 만들어서 바꿀 장비의 이름을 넣어준다.