【问题标题】:Position and rotation of point in relation to two other points点相对于其他两个点的位置和旋转
【发布时间】:2016-10-14 16:13:17
【问题描述】:

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

我希望玩家能够通过双手抓住手柄来旋转自己。想象一下,如果你用双手抓住一根横杆,你会如何在零重力下移动。

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

在右手边的图片中,玩家现在已经伸展了他们的右臂,这使得玩家绕着条形旋转。

我想当玩家这样做时,更容易看到玩家正在移动整个世界。

我的问题是:我如何在 Unity 中通过 Unity 诡计的数学在 3 维中做到这一点?它需要相对于手滚动、偏航和定位玩家。

谢谢!

【问题讨论】:

  • 要学习向量数学,这是一个很好的起点:blog.wolfire.com/2009/07/…
  • 也许你要学习的最重要的事情是如何使用标量积以及它与角度的关系。另外,做一个画是一个好的开始,现在继续画更多。比如某种距离、重要的角度等。然后想想你需要哪些。

标签: c# unity3d triangulation


【解决方案1】:

记录三个向量的平均值。然后在下一帧中,得到与前一个平均值的差值。该差异可用作欧拉角以向刚体施加恒定的力(或将对象旋转该量或其他可能性,具体取决于您的目标)。 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-04
    • 2013-08-20
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多