在htc Vive中获取交互对象

Muh*_*han -2 c# unity-game-engine virtual-reality

我刚刚开始学习HTC vive应用程序开发与团结,并希望与Object进行交互,并希望在控制器与之交互时获取它.尝试学习StreamVR Unity Toolkit文档.我在示例演示中找到了一个场景,其中Gameobject通过控制器进行交互,但涉及的脚本很多.我很惊讶在一个立方体VRTK_InteractalbeObject被附加并且它正在响应控制器.我怎样才能在htc vive中获得交互对象.

Jer*_*ski 8

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

A.[CamerRig]SteamVR文件夹中找到预制件并将其放在层次结构中: 在此输入图像描述

B.Controller (right)->Model在其中找到GameObject:

在此输入图像描述

C.GameObject使用Rigidbody和创建SphereCollider并将其作为Controller (right)->ModelGameObject的子项

C.1.确保此对象与...处于同一位置Model GameObject

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

E.要使用vive控制器按钮,请使用此脚本,并将其放在Controller (right)GameObject上.

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

F.从检查员分配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);
        }
Run Code Online (Sandbox Code Playgroud)

这是必要的,否则您的自定义对象GameObject是控制器模型的子对象,将变为非活动状态.

恢复 - 这很容易,但你需要做很多步骤.尝试使用控制器按钮,例如,只有在按下触发器时才按下对象.

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