Unity Oculus Rift Integration 1.42禁用抓取对象与Player之间的距离抓取器物理

时间:2019-11-25 12:18:47

标签: unity3d integration physics oculus

目前,我已经在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之前的版本)无关。

2 个答案:

答案 0 :(得分:1)

使用基于图层的碰撞检测功能。为播放器分组,为抓取的物体分组,为其他所有分组。当您抓取某物时,将其移至抓取的对象层,放开它时,将其放回所有层。

选中“编辑”->“项目设置”->“物理”中的复选框,以使播放器层和抓取的对象层不会发生冲突。

答案 1 :(得分:0)

好的,因此问题并不是明确的。

我们可以实现一个考虑时间差的系统,但真正的问题在于Oculus Rift抓取系统。

我四处询问,发现解决此问题的最简单方法是丢弃Avatar预制件,然后直接将CharacterController添加到CameraRig游戏对象中。这样,我们不需要处理Oculus Rift集成包中包含的库。