【问题标题】:VR CameraRig rotation, problem throwing objsVR CameraRig 旋转,抛出物体的问题
【发布时间】:2019-08-09 17:01:37
【问题描述】:

我正在使用 SteamVR 在 Unity 中创建一个 VR 应用程序。我已经实现了一个 Snap Rotation Script,因此,用户可以在游戏中转身,而无需实际操作。

我的层次结构是:[CameraRig] ->(左控制器,右控制器,相机)

现在的问题是:当我拿着一个物体并想扔它时,如果我之前旋转了 CameraRig,那么扔的物体会表现得很奇怪。它的方向是异相的,基于 CameraRig 的累积旋转。 如果我从不旋转 CameraRig,则抛出的对象行为正常

我正在使用 FixedJoint 组件将对象附加到手上。

我该如何解决这个问题?

public void Drop() {

    // Null Check
    if (!m_CurrentInteractable){
        return;
    }

    // Apply velocity
    Rigidbody targetBody = m_CurrentInteractable.GetComponent<Rigidbody>();
    targetBody.velocity = m_pose.GetVelocity();
    targetBody.angularVelocity = m_pose.GetAngularVelocity();

    // Detach
    m_Joint.connectedBody = null;

    // Clear
    m_CurrentInteractable.m_ActiveHand = null;
    m_CurrentInteractable = null;
}

【问题讨论】:

    标签: c# unity3d virtual-reality steamvr


    【解决方案1】:

    在计算您的速度和 angularVelocity 时,请尝试在之后再添加一个步骤,以包含该装备:

    velocity = Rig.transform.rotation * velocity;
    angularVelocity = Rig.transform.rotation * angularVelocity;
    

    希望这会有所帮助!

    【讨论】:

    • 您好,感谢您的回答。恐怕我不明白。我该做什么?因为速度和角速度都是 Vector3,而 .rotation 是四元数。即使我采用欧拉角,我也不能将两个向量3相乘
    • 对不起,我的意思是 angularVelocity = Rig.transform.rotation * angularVelocity;,这在 Unity 中是一个有效的操作(四元数乘以 vector3,而我缩短的“*=”显然是不允许的) ——试一试,我成功地在我的 VR 对象中使用相同的代码从旋转的钻机中抛出对象。将编辑我的答案。
    • 好的,还有一件事:Rig 是什么意思?层次的根源还是游戏对象的手?
    • 在我使用 SteamVR 或 Oculus 库处理过的 VR 应用程序中,总是有一个 rig 游戏空间代表房间规模的真实世界包装器,这就是我对 Rig 的意思。即使玩家不想旋转,它也是您想要旋转的层次结构的一部分(例如,以 45 度为步长)。这是例如附加了 OVR Camera Rig 组件,或 SteamVR 游戏区/SteamVR 控制器管理器(SteamVR2 中的术语可能不同)。
    • 我试过了,但现在可交互的 obj 不会从我的手上脱离。也许如果我给你看手控制器脚本,它会有所帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多