[OpenXR] XR Slot Interactor (2024-01-03방송분)

VR/XR Interaction Toolkit 2024. 1. 3. 17:34
반응형

https://youtu.be/QyN2pFMdymY?list=PLTFRwWXfOIYBIPKhWi-ZO_ITXqtNuqj6j

 

 

 

 
https://youtube.com/playlist?list=PLTFRwWXfOIYBIPKhWi-ZO_ITXqtNuqj6j&si=9t2YSxJcsw7fRNMR

 

XR Interaction Toolkit 2.4.3

XR Interaction Toolkit 2.4.3 OpenXR Oculus

www.youtube.com



 
다음 리소스를 다운 받아 설치 합니다.
 
https://assetstore.unity.com/packages/3d/props/food/japanese-food-sushi-free-158209

 

Japanese food - Sushi Free | 3D 음식 | Unity Asset Store

Elevate your workflow with the Japanese food - Sushi Free asset from Brushzim. Find this & other 음식 options on the Unity Asset Store.

assetstore.unity.com

 
새 씬을 생성하고 메인카메라를 지운후 XR Origin을 생성합니다

 
Left / Right Controller를 선택후 XR Controller를 제외한 나머지 컴포넌트를 제거 합니다.

다음구조로 만든후 핸드 프리팹을 Offset으로 넣습니다.

Offset을 다음과 같이 설정 합니다.
왼손 : 90, 0, -90
오른손 : -90, 0, -90

Left / Right Controller를 선택후 Model Prefab을 None으로 설정 합니다.

실행후 손이 잘 나오는지 확인 합니다.
 

 
 


 
스시를 가져옵니다

 

 
 
다음과 같은 구조로 접시위에 올려 놓습니다

 
 
Food를 선택후 빈 오브젝트 (Attach)를 만들어 주고 리지드바디, XRGrabInteractable컴포넌트를 부착 합니다.

 

 
 
Attach Transform에 Attach 오브젝트를 넣어 줍니다.

 
Throw on Detach를 비활성화 합니다.

 
 
Food의 메쉬를 선택해 Mesh Collider를 부착 하고 Convex를 체크 합니다.

 
 
플레이트의 메쉬를 선택하고 메쉬 콜라이더를 부착 합니다.

 
 
Direct Interactor를 검색해서 Left, Right Controller자식으로 넣어 줍니다.

 
 
Food와 접시 위치를 변경하고 Visuals를 선택해 크기고 조절 합니다.

 
이제 실행후 스시가 잘 손에 잡히는지 확인 합니다.
 

 
 
플레이트에 빈오브젝트 (Socket)을 만들어 주고 

 
 
 
 
XR Socket Interactor와 Box Collider컴포넌트를 부착 합니다.

 
박스 콜라이더의 사이즈를 조절 합니다.

 
 
 
빈오브젝트 Attach를 생성합니다.

 
Socket Interactor의 Attach Transform에 넣어 줍니다.

 
Starting Selected Interactable에 Food를 넣어 줍니다.

 
 
박스 콜라이더의 Is Trigger를 반드시 체크 하십시오 

 
Attach 위치를 스시 위쪽으로 잡아주고

 
Food의 Attach와 Socket의 Attach를 동일한 위치로 마춥니다.

 
 

 


 
 
이미 그 위치에 인터렉터블 오브젝트가 있을 경우도 테스트 합니다.
 

 
 
다음 스크립트를 작성해 Socket의 Attach에 부착 합니다.

using UnityEngine.XR.Interaction.Toolkit;

namespace UnityEngine.XR.Content.Interaction
{
    /// <summary>
    /// Initializes an <see cref="XRSocketInteractor"/> attach point to match the initial scene position of the object it is containing.
    /// </summary>
    public class AutoSocketAttach : MonoBehaviour
    {
        [SerializeField]
        [Tooltip("The Socket Interactor that controls this socket attach point.")]
        XRSocketInteractor m_ControllingInteractor;

        void Start()
        {
            // If there is an existing interactable, we match its position so the object does not move
            if (m_ControllingInteractor == null)
                m_ControllingInteractor = GetComponentInParent<XRSocketInteractor>();

            if (m_ControllingInteractor == null)
            {
                Debug.LogWarning("Script is not associated with an XRSocketInteractor and will have no effect.", this);
                return;
            }

            if (m_ControllingInteractor.startingSelectedInteractable == null)
            {
                Debug.Log("AutoSocketAttach does not have a starting selected interactable to match its position.", this);
                return;
            }

            var targetTransform = m_ControllingInteractor.startingSelectedInteractable.GetAttachTransform(m_ControllingInteractor);
            transform.SetPositionAndRotation(targetTransform.position, targetTransform.rotation);
        }
    }
}

 


Food를 선택해 빈오브젝트 Hand Pose를 만들고 

반응형
: