刚体不碰撞-统一项目探戈
本文关键字:项目 探戈 碰撞 | 更新日期: 2023-09-27 18:02:32
我在Unity3D中创建了一个RigidBody,并附加了一个控制器脚本,它将通过Tango Motion control控制身体的运动。但问题是,由于某些原因,我的刚体没有和侧面的壁碰撞。它只是穿过它。
这是我的代码片段Update()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;
}
我通过OnPoseAvailable回调获得TangoPose数据
public void OnTangoPoseAvailable(Tango.TangoPoseData pose)
{
// Do nothing if we don't get a pose
if (pose == null)
{
Debug.Log("TangoPoseData is null.");
return;
}
// The callback pose is for device with respect to start of service pose.
if (pose.framePair.baseFrame == TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_START_OF_SERVICE &&
pose.framePair.targetFrame == TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_DEVICE)
{
if (pose.status_code == TangoEnums.TangoPoseStatusType.TANGO_POSE_VALID)
{
// Cache the position and rotation to be set in the update function.
m_tangoPosition = new Vector3((float)pose.translation [0],
(float)pose.translation [1],
(float)pose.translation [2]);
m_tangoRotation = new Quaternion((float)pose.orientation [0],
(float)pose.orientation [1],
(float)pose.orientation [2],
(float)pose.orientation [3]);
// Debug.Log("Tango VALID pose: " + m_tangoPosition + " " + m_tangoRotation);
}
}
}
我错过了什么吗?为什么我的刚体穿过墙壁?我把这个脚本附加到我的胶囊刚体上。
任何帮助或指针都非常感谢。
谢谢
您将希望在fixeduupdate方法中更改刚体的位置和旋转,而不是更新。fixeduupdate方法用于任何物理相关的更改,并以固定的速率调用,而Update则依赖于帧率。
此外,您正在更改转换的位置。这实际上是在传送物体。如果你想移动刚体并且仍然有碰撞,检查刚体组件上的MovePosition和moveotation方法。
我对"Tango"一无所知,但你的代码将类似于以下未经测试的代码:
public Rigidbody rigidbody;
void Start()
{
rigidbody = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
//Other code here
rigidbody.MovePosition(m_tangoPosition + m_startPosition);
rigidbody.MoveRotation(m_tangoRotation);
}
我希望我对你有帮助!