Unity/VR

XR Interaction Toolkit - Input

๐ŸŸฆ Input System

- Action-based์™€ Device-based. 2๊ฐ€์ง€ ํƒ€์ž…์˜ ์ธํ’‹ ์‹œ์Šคํ…œ์ด ์žˆ๋‹ค.

 

๐ŸŸง Document

- Device-based

- Action-based

 

๐ŸŸฆ Device-based

๐ŸŸง ํŠน์ง•

- XR ๊ธฐ๊ธฐ๋งŒ์„ ํƒ€๊ฒŸํŒ…ํ•œ๋‹ค.

- ์„ค์ •ํ•ด๋†“์€ ํ•œ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ๋งŒ ์ธํ’‹์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

- ์„ค์ •์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

๐ŸŸง ์„ค์ •๋ฐฉ๋ฒ•

- XR Rig ์ถ”๊ฐ€(Device-based)

 

 

 

- XR Controller(Device-based) ์ปดํฌ๋„ŒํŠธ ์›ํ•˜๋Š” ๊ฐ’์œผ๋กœ ์„ค์ •

 

 

 

๐ŸŸฆ Action-based

๐ŸŸง ํŠน์ง•

- ์—ฌ๋Ÿฌ ๊ธฐ๊ธฐ์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

- ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ธํ’‹์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

- ํ•˜๋‚˜์”ฉ ๋งตํ•‘์„ ํ•ด์ค˜์•ผํ•œ๋‹ค.

 

 

 

๐ŸŸง ์„ค์ •๋ฐฉ๋ฒ•

- XR Rig (Action-based) ์ถ”๊ฐ€

 

 

 

- controller ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์‚ดํŽด๋ณด๋ฉด reference๋“ค์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.

 

 

 

- ์—ฐ๊ฒฐ๋œ reference๋ฅผ ์—ด์–ด๋ณด๋ฉด ํ‚ค๊ฐ€ ๋งตํ•‘๋˜์–ด์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

   (XR Toolkit์˜ sample์„ ๋‹ค์šด๋ฐ›์•„์„œ ๊ทธ๋Ÿด ์ˆ˜๋„ ์žˆ์Œ)

 

 

 

- ๊ฐ€๋ น Select ์•ก์…˜์„ ํ‚ค๋ณด๋“œ Space ํ‚ค๋กœ๋„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด
- Select ํ•˜์œ„์— Space ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

 

 

- '+' ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ํ›„ Add Binding

 

 

 

- Path > Listen > Space๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋ฐ”๋กœ ๋œฌ๋‹ค.

- ํ‚ค๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

- Save Asset ๊ผญ ํ•ด์ฃผ๊ธฐ

 

 

 

๐ŸŸฆ Input ๊ฐ’ ์ฒดํฌํ•˜๊ธฐ

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using CommonUsages = UnityEngine.XR.CommonUsages;
using UnityEngine.XR.Interaction.Toolkit;
using UnityEngine.InputSystem;

public class XRInput : MonoBehaviour
{

    #region Device-based
    [SerializeField] private XRController m_LeftXRC;
    private bool m_IsLeftGripButtonPressed;

    private void Update()
    {
        m_LeftXRC.inputDevice.TryGetFeatureValue(CommonUsages.gripButton, out m_IsLeftGripButtonPressed);
        if (m_IsLeftGripButtonPressed)
        {
            Debug.Log("Left GripButton is Pressed");
        }
    }
    # endregion



    #region Action-based
    [SerializeField] private InputActionReference m_LeftSelectRef;
    [SerializeField] private InputActionAsset m_ActionAsset;


    private void OnEnable()
    {
        m_ActionAsset.Enable();

        // ๋ฐฉ๋ฒ• 1
        // m_ActionAsset.FindActionMap("XRI LeftHand").FindAction("Select").performed += SelectLeft;
        // m_ActionAsset.FindActionMap("XRI LeftHand").FindAction("Select").canceled += CancelSelectLeft;

        // ๋ฐฉ๋ฒ•2
        m_LeftSelectRef.action.performed += SelectLeft;
        m_LeftSelectRef.action.canceled += CancelSelectLeft;
    }
    private void OnDisable()
    {
        m_ActionAsset.Disable();
        m_LeftSelectRef.action.performed -= SelectLeft;
        m_LeftSelectRef.action.canceled -= CancelSelectLeft;
    }

    private void SelectLeft(InputAction.CallbackContext obj)
    {
        Debug.Log("Select Left");
    }

    private void CancelSelectLeft(InputAction.CallbackContext obj)
    {
        Debug.Log("Cancel Select Left");
    }
    #endregion
}

- ์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ ํ›„ ์ฝ”๋“œ ์ž‘์„ฑ

 

 

 

- ์ธ์ŠคํŽ™ํ„ฐ ์—ฐ๊ฒฐ

 

 

 

- Select์— Space ํ‚ค๋ฅผ ๋งตํ•‘ํ•ด๋‘์—ˆ๊ธฐ ๋•Œ๋ฌธ์— Action-base๋ฅผ ํ…Œ์ŠคํŠธํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

๐ŸŸฆ ๋น„๊ต

๐ŸŸง Device-based

- ํŠน์ • ๋ฒ„ํŠผ์„ ์ž…๋ ฅํ–ˆ๋Š”์ง€ ์ง์ ‘ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

๐ŸŸง Action-based

- ์—ฌ๋Ÿฌ ํ‚ค๋ฅผ ๋งตํ•‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

- ์—ฌ๋Ÿฌ ๊ธฐ๊ธฐ์— ๋Œ€ํ•ด ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

- ํŠน์ • ๋ฒ„ํŠผ์ด ์•„๋‹Œ ๋งตํ•‘ํ•ด๋†“์€ action์œผ๋กœ ๊ฐ’์„ ๊ฐ€์ ธ์™€์•ผํ•œ๋‹ค.

'Unity > VR' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

XR Interaction Toolkit - Locomotion  (0) 2021.10.01
XR Interaction Toolkit - Setting  (2) 2021.09.22