我在Unity3D中创建了一个RigidBody,并附加了一个控制器脚本,它将通过探戈运动控制来控制身体的移动。但问题是,由于某些原因,我的刚体不会与我旁边的墙发生碰撞。它只是穿过它。
下面是我的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);
}
}
}我是不是漏掉了什么?为什么我的RigidBody会穿透墙壁?我已将此脚本附加到我的胶囊刚体。
任何帮助或指示都是非常感谢的。
谢谢
发布于 2015-07-14 02:43:34
您将希望在FixedUpdate方法中更改刚体位置和旋转,而不是在更新中。FixedUpdate方法用于任何与物理相关的更改,并以固定的速率调用,而更新依赖于帧速率。
此外,您正在更改变换的位置。这本质上是传送物体。如果要移动刚体但仍有碰撞,请检查刚体组件上的MovePosition和MoveRotation方法。
我不知道任何关于“探戈”的东西,但你的代码将类似于以下未经测试的代码:
public Rigidbody rigidbody;
void Start()
{
rigidbody = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
//Other code here
rigidbody.MovePosition(m_tangoPosition + m_startPosition);
rigidbody.MoveRotation(m_tangoRotation);
}我希望我已经帮助了你!
https://stackoverflow.com/questions/31390733
复制相似问题