C# Unity3D-齿轮VR输入不';我不能在两个场景之间工作
我正在使用Gear VR创建一个项目,在这个项目中,您可以旋转一个对象,并根据耳机侧面的滑动和轻触控制显示信息 一切都很好,当我使用Gear VR侧面的触摸板时,我可以旋转和选择东西,但当我更改场景并返回主菜单,然后返回到我刚刚打开的场景时,功能停止工作 我正在使用我制作的脚本:C# Unity3D-齿轮VR输入不';我不能在两个场景之间工作,c#,unity3d,virtual-reality,gear-vr,C#,Unity3d,Virtual Reality,Gear Vr,我正在使用Gear VR创建一个项目,在这个项目中,您可以旋转一个对象,并根据耳机侧面的滑动和轻触控制显示信息 一切都很好,当我使用Gear VR侧面的触摸板时,我可以旋转和选择东西,但当我更改场景并返回主菜单,然后返回到我刚刚打开的场景时,功能停止工作 我正在使用我制作的脚本: using UnityEngine; using UnityEngine.SceneManagement; using System.Collections; using System; public class G
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;
using System;
public class GearVRTouchpad : MonoBehaviour
{
public GameObject heart;
public float speed;
Rigidbody heartRb;
void Start ()
{
OVRTouchpad.Create();
OVRTouchpad.TouchHandler += Touchpad;
heartRb = heart.GetComponent<Rigidbody>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.W))
{
SceneManager.LoadScene("Main Menu");
}
}
void Touchpad(object sender, EventArgs e)
{
var touches = (OVRTouchpad.TouchArgs)e;
switch (touches.TouchType)
{
case OVRTouchpad.TouchEvent.SingleTap:
// Do some stuff
break;
case OVRTouchpad.TouchEvent.Up:
// Do some stuff
break;
//etc for other directions
}
}
}
使用UnityEngine;
使用UnityEngine.SceneManagement;
使用系统集合;
使用制度;
公共类GearVRTouchpad:单行为
{
公共游戏对象心脏;
公众浮标速度;
刚体心脏b;
无效开始()
{
OVRTouchpad.Create();
OVRTouchpad.TouchHandler+=触摸板;
heartRb=heart.GetComponent();
}
无效更新()
{
if(Input.GetKeyDown(KeyCode.W))
{
加载场景(“主菜单”);
}
}
无效触摸板(对象发送器,事件参数e)
{
var touchs=(OVRTouchpad.TouchArgs)e;
开关(触摸。触摸类型)
{
case OVRTouchpad.TouchEvent.SingleTap:
//做点什么
打破
case OVRTouchpad.TouchEvent.Up:
//做点什么
打破
//等其他方向
}
}
}
我注意到,当我开始游戏时,会创建一个ovrtouchpadheloper
。我不知道这是否与我的问题有关
我得到的错误是:
MissingReferenceException:类型为“GearVRTouchpad”的对象已
已被销毁,但您仍在尝试访问它。你的剧本
应该检查它是否为null,或者不应该销毁
对象。
但是我没有在其他地方引用此脚本
当我在播放模式下检查场景时,脚本仍然存在,变量赋值仍然存在
任何帮助都会很好
OVRTouchpad.TouchHandler
是一个静态事件处理程序
(因此它将在游戏的整个生命周期中持续存在)。您的脚本在创建时订阅,但在销毁时不会取消订阅。重新加载场景时,旧订阅仍在事件中,但旧的GearVRTouchpad
实例已不存在。这将导致下次触发TouchHandler
事件时出现MissingReferenceException
。将此添加到您的类:
void OnDestroy() {
OVRTouchpad.TouchHandler -= Touchpad;
}
现在,每当具有
GearVRTouchpad
行为的GameObject
被销毁时,OVRTouchpad
中的static
事件将不再引用它。您的错误不在GearVRTouchpad类中,而在使用GearVRTouchpad的类中。如果你能提供引发此异常的脚本,那就太好了。我想可能是这样,但我没有在任何其他脚本或文件中使用此脚本?@Tom很乐意帮忙!