我在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刚体上。
非常感谢任何帮助或指示。
由于
答案 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);
}
我希望我能帮到你!