点相对于其他两个点的位置和旋转

时间:2016-09-28 16:36:59

标签: c# unity3d triangulation

给你一个设置:我正在制作一个零度g的Vive游戏,玩家通过抓住手柄并推动自己移动。

我想要的是让玩家能够通过用双手抓住手柄来自行旋转。想象一下,如果你用双手握住酒吧,你将如何移动零克。

说明: 在左侧,玩家用双手抓住了车把。左臂伸直,右臂弯曲。

在右侧图片中,玩家现在已经扩展了右臂,这使得玩家在酒吧周围旋转。

我想这更容易看到它就好像玩家会移动整个世界,当他们这样做时。

我的问题是:我如何通过Unity-trickery的数学在三维中实现这一点?它需要相对于手来滚动,偏航和定位玩家。

谢谢!

1 个答案:

答案 0 :(得分:0)

记录三个向量的平均值。然后在下一帧中,获得与之前平均值的差异。这种差异可以用作欧拉角,以对刚体施加恒定的力(或根据您的目标将物体旋转一定量或其他可能性)。 https://docs.unity3d.com/ScriptReference/Transform.Rotate.html https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html

Vector3 previousCenterPoint;

void Update() {
    Vector3 newCenterPoint = (leftHand.transform.position + rightHand.transform.position + player.transform.position) / 3f;
    if (previousCenterPoint != null)
    {
        Vector3 someEulerAngles = newCenterPoint - previousCenterPoint;
        someRigidBody.AddForce(someEulerAngles, ForceMode.VelocityChange);
    }
    previousCenterPoint = newCenterPoint;
}