刚体不碰撞 - Unity Project Tango

时间:2015-07-13 18:26:32

标签: c# unity3d collision-detection google-project-tango rigid-bodies

我在Unity3D中创建了一个RigidBody并附加了一个控制器脚本,它将通过Tango Motion Control控制身体的运动。但问题是,出于某种原因,我的装备不会碰到我侧面的墙壁。它只是通过它。

以下是Update()

的代码段
line 120, in output
window.create_oval(170, 30, 190, 10, fill="#FAFAAA")
NameError: global name 'window' is not defined

我通过OnPoseAvailable回调获取我的TangoPose数据

//从Project Tango中提出回调

void Update()
    {
        Debug.Log("Tango update: " + m_tangoPosition + " " + m_tangoRotation);    

        PoseProvider.GetMouseEmulation(ref m_tangoPosition, ref m_tangoRotation);
        transform.position = m_tangoPosition + m_startPosition;
        transform.rotation = m_tangoRotation;
}

我在这里遗漏了什么吗?为什么我的RigidBody穿过墙壁?我已将此脚本附加到我的Capsule刚体上。

非常感谢任何帮助或指示。

由于

1 个答案:

答案 0 :(得分:2)

您需要在FixedUpdate方法中更改刚体位置和旋转,而不是更新。 FixedUpdate方法用于任何与物理相关的更改,并以固定速率调用,而Update则取决于帧速率。

此外,您正在更改变换的位置。这实际上是传送物体。如果要移动刚体并仍然存在碰撞,请检查刚体组件上的MovePosition和MoveRotation方法。

我对“Tango”一无所知,但您的代码与以下未经测试的代码类似:

public Rigidbody rigidbody;
void Start()
{
    rigidbody = GetComponent<Rigidbody>();
}

void FixedUpdate()
{
    //Other code here
    rigidbody.MovePosition(m_tangoPosition + m_startPosition);
    rigidbody.MoveRotation(m_tangoRotation);
}

我希望我能帮到你!