Showing

[Unreal, VR] VR에서 Item grab(Hold) and Release를 위한 블루프린트 설정 본문

Unreal

[Unreal, VR] VR에서 Item grab(Hold) and Release를 위한 블루프린트 설정

RabbitCode 2023. 12. 18. 16:36

언리얼에서 vr 프로젝트를 할 때, 이미 vr template를 제공하기 때문에 참고해서 만들어볼 수 있다.

grabable Item 이라는 class 통해 블루프린트 class를 만들고, static mesh를 달아준다.

 

아이템을 '잡음'과 '놓음'에 대한 인터페이스 규약을 만든다.

이때 '잡음'에서는 아이템이 플레이어에게 붙을 때 parent 변경이 일어나야 하므로,

inputs 값에 currnetController(자료형 Motion Component) 변수 하나가 필요하다.

이렇게 만든 인터페이스를 grabable Item 상속해주면

grabable Item에 인터페이스의 함수들이 나타나게 된다.

 

블루프린트 숙련도 이슈로 찾는데 어려움이 있었는데,

노드 동그라미 우클릭 후 variable로 변환해준다.

이렇게 변환한 변수는 잡음과 놓음을 구현할 때 사용하게 된다.

아이템을 '잡음(Hold)' 구현

플레이어 컨트롤러가 잡으면서 grabable Item의 부모가 되게 한다.

나중엔 소켓에 연결

 

이 Attach actor to component는 사용자의 손에 여러 아이템(무기 등)을 쥐어줄 수 있게 하는 언리얼 핵심 함수이기 때문에 다른 예제도 함께 눈여겨보면 좋다.

손에 총을 붙이는 예제 https://youtu.be/CSSB49DBQvM?feature=shared

USceneComponent::AttachToComponent | Unreal Engine Documentation

 

USceneComponent::AttachToComponent

Attach this component to another scene component, optionally at a named socket.

docs.unrealengine.com

Syntax

bool AttachToComponent
(
    USceneComponent * InParent, // 부모자리
    const FAttachmentTransformRules & AttachmentRules,
    FName InSocketName
)

부모가 변경된다는 것은, 부모입장에서는 자식이 계층으로 들어온다는 뜻이 된다.

 

'놓음' 구현(Release)

역시나 블루프린트 숙련도 이슈로 get is valid 노드를 찾는데 어려움이 있었는데,

current controller 파란색 동그라미 우클릭 후 convert to validated get을 클릭해 노드 구조를 바꿔준다.

즉, 나( grabable Item)를 잡은 손이 있는지 없는지를 검토하는 것이다.

소켓에 붙였으되 뗄 떼는 스테틱 메쉬에서 떼면 된다.

 

참고 :

복제본을 만들어서 뜯어보면 좋다.