unity3d Unity 3d VR -在控制器按钮上隐藏和显示模型单击

egdjgwm8  于 2023-04-21  发布在  其他
关注(0)|答案(2)|浏览(143)

我正在开始VR开发,并正在创建一个基本的VR应用程序,我在一个场景中放置2个自定义3D模型。让第一个模型是“a”,第二个是“b”我想显示“a”,然后当有人按下Oculus控制器上的某个键时,我想隐藏'a'并显示'b'。我该怎么做?我知道将使用keydown/keyup功能。我想知道如何隐藏/在模型内部。

hgc7kmma

hgc7kmma1#

要隐藏游戏对象,使用SetActive函数并传递true/false来显示/隐藏它。is激活和取消激活游戏对象:

public GameObject modelA;
public GameObject modelB;

void Update()
{
    OVRInput.Update(); 

    if (OVRInput.Get(OVRInput.Button.One))
    {
        //Hide model A
        modelA.SetActive(false);

        //Show model B
        modelB.SetActive(true);
    }
}

如果你不想激活/取消激活游戏对象,只需启用/禁用MeshRenderer组件:

public GameObject modelA;
public GameObject modelB;

void Update()
{
    OVRInput.Update(); 

    if (OVRInput.Get(OVRInput.Button.One))
    {
        //Hide model A
        modelA.GetComponent<MeshRenderer>().enabled = false;

        //Show model B
        modelB.GetComponent<MeshRenderer>().enabled = true;
    }
}
jchrr9hc

jchrr9hc2#

如果你不想使用Oculus特定的依赖项(如OVR),你可以使用UnityEngine.XR.InputDevice,它应该是通用的

List<InputDevice> devices = new List<InputDevice>();
InputDevices.GetDevicesWithCharacteristics(InputDeviceCharacteristics.Controller |
        InputDeviceCharacteristics.TrackedDevice |  InputDeviceCharacteristics.Right,
        devices);
foreach (var item in devices)
{
    List<InputFeatureUsage> l = new List<InputFeatureUsage>();
    item.TryGetFeatureUsages(l);
    bool resBool;

    foreach (var i in l)
    {
        // I guess there could be a more elegant solution here.
        if (i.name == "TriggerButton")
        {
            item.TryGetFeatureValue(i.As<bool>(), out resBool);
            if (resBool) {
                modelA.GetComponent<Renderer>().enabled = true;
                modelB.GetComponent<Renderer>().enabled = false;
            } else {
                modelA.GetComponent<Renderer>().enabled = false;
                modelB.GetComponent<Renderer>().enabled = true;
            }
        }
    }
}

相关问题