首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >刚体不碰撞-一体化项目探戈

刚体不碰撞-一体化项目探戈
EN

Stack Overflow用户
提问于 2015-07-14 02:26:32
回答 1查看 726关注 0票数 1

我在Unity3D中创建了一个RigidBody,并附加了一个控制器脚本,它将通过探戈运动控制来控制身体的移动。但问题是,由于某些原因,我的刚体不会与我旁边的墙发生碰撞。它只是穿过它。

下面是我的Update()的代码片段

代码语言:javascript
复制
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数据

//设置项目探戈的回调

代码语言:javascript
复制
    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会穿透墙壁?我已将此脚本附加到我的胶囊刚体。

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

谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-07-14 02:43:34

您将希望在FixedUpdate方法中更改刚体位置和旋转,而不是在更新中。FixedUpdate方法用于任何与物理相关的更改,并以固定的速率调用,而更新依赖于帧速率。

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

我不知道任何关于“探戈”的东西,但你的代码将类似于以下未经测试的代码:

代码语言:javascript
复制
public Rigidbody rigidbody;
void Start()
{
    rigidbody = GetComponent<Rigidbody>();
}

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

我希望我已经帮助了你!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31390733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档