目前,我已经在Unity中实现了距离采集器。我的问题是,我想禁用播放器和对象之间的物理关系以应对各种错误。
我想知道在VR设置中禁用对象之间的碰撞的正确方法是什么。
我当前的代码;无法在实现中使用,并且用作距离可抓取对象的扩展模块。目前,我不在乎运行时代码的最优性,因为第一步实际上是让事情进行投标。
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.tag == "Player")
{
//this.gameObject.GetComponent<Collider>().enabled = false;
//this.gameObject.transform.parent = collision.gameObject.transform;
Physics.IgnoreCollision(this.gameObject.GetComponent<Collider>(), collision.gameObject.GetComponent<Collider>(), true);
}
}
private void OnCollisionStay(Collision collision)
{
if (collision.gameObject.tag == "Player")
{
Physics.IgnoreCollision(this.gameObject.GetComponent<Collider>(), collision.gameObject.GetComponent<Collider>(), true);
}
}
private void OnCollisionExit(Collision collision)
{
this.gameObject.GetComponent<Collider>().enabled = false;
if (collision.gameObject.tag == "Player")
{
//this.gameObject.transform.parent = null;
Physics.IgnoreCollision(this.gameObject.GetComponent<Collider>(), collision.gameObject.GetComponent<Collider>(), true);
}
}
我尝试对其进行测试的注释部分,但是OVR距离采集器的设计使其在运行时更改对象的父对象时会中断。
我检查了其中大多数问题与旧版本的Oculus Integration(尤其是1.39之前的版本)无关。
答案 0 :(得分:1)
使用基于图层的碰撞检测功能。为播放器分组,为抓取的物体分组,为其他所有分组。当您抓取某物时,将其移至抓取的对象层,放开它时,将其放回所有层。
选中“编辑”->“项目设置”->“物理”中的复选框,以使播放器层和抓取的对象层不会发生冲突。
答案 1 :(得分:0)
好的,因此问题并不是明确的。
我们可以实现一个考虑时间差的系统,但真正的问题在于Oculus Rift抓取系统。
我四处询问,发现解决此问题的最简单方法是丢弃Avatar预制件,然后直接将CharacterController添加到CameraRig游戏对象中。这样,我们不需要处理Oculus Rift集成包中包含的库。