在 htc Vive 中获取交互对象

Get interacted object in htc Vive

刚开始学习HTC vive app development with unity,想和Object交互,想把它作为controller与之交互。 尝试学习表格 StreamVR Unity Toolkit documentation。我在示例演示中发现了一个场景,其中 Gameobject 通过控制器进行交互,但涉及的脚本太多了。我很惊讶在立方体上附加了 VRTK_InteractalbeObject 并且它正在响应控制器。如何在 htc vive 中获取交互对象?

因此,这是 众多解决方案之一 与控制器交互的对象 - 我将在这里展示最简单的一个。

A.SteamVR 文件夹 中找到 [CamerRig] 预制件并将其放置在层次结构中:

B. 在里面找到Controller (right)->Model GameObject:

C. 使用 RigidbodySphereCollider 创建 GameObject 并将其作为 Controller (right)->Model GameObject[=31 的子项=]

C.1. 确保此对象与 Model GameObject

处于同一位置

D. 现在玩游戏,移动你右边的 vive 控制器推动其他 GameObjectsRigidbody 和任何 Collider .

E. 要使用 vive 控制器按钮,请使用此脚本,并将其放置在 Controller (right) 游戏对象上。

public class VIVEController : MonoBehaviour 
{
    public SteamVR_TrackedObject trackedObj;
    private SteamVR_Controller.Device controller;

    void Start () 
    {
        controller = SteamVR_Controller.Input ((int)trackedObj.index);
    }

    void Update ()
    {
        if (controller.GetPressDown (Valve.VR.EVRButtonId.k_EButton_SteamVR_Trigger)) 
        {
            OnTriggerPressed ();
        }

        if (controller.GetPressDown (Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad)) 
        {
            OnTouchpadPressed ();
        }
    }

    private void OnTriggerPressed()
    {
        Debug.Log("OnTriggerPresse");
    }

    private void OnTouchpadPressed()
    {
        Debug.Log("OnTouchpadPressed");
    }
}

F. 从 inspector trackedObj 分配(它与这个脚本在同一个 GameObject 上)

G. 找到脚本SteamVR_RenderModel 注释掉方法LoadComponents

        for (int i = 0; i < t.childCount; i++)
        {
            var child = t.GetChild(i);
            child.gameObject.SetActive(false);
            StripMesh(child.gameObject);
        }

这是必要的,否则您自定义的 GameObject 碰撞器是控制器模型的子项,将变为非活动状态。

恢复 - 这很容易,但您需要做的步骤很少。 尝试使用控制器按钮,例如仅在按下触发器时才推动对象。

作为奖励,这是我用相同方法制作的小游戏: https://www.youtube.com/watch?v=kzX7Iw6cHZ8