【问题标题】:(Unity) How does vector multiplication and position updates work in unity?(统一)向量乘法和位置更新如何统一工作?
【发布时间】:2021-01-30 20:41:26
【问题描述】:

这段代码涉及将 Vector3 moveVector 与 float moveSpeed 和另一个 float Time.deltaTime 相乘。这些浮点数是否乘以 Vector3(x,y,z)的每个值?此外,如果我写的是transform.position而不是GameObject.transform.position,那么transform.position会转换全局对象的位置,从而更新此移动脚本附加到的任何GameObject/prefab的位置是否正确?

void Move(Vector3 desiredDirection)
  {
   moveVector.Set(desiredDirection.x, 0f, desiredDirection.z);
   moveVector = moveVector * moveSpeed * Time.deltaTime;
   transform.position += moveVector;
  }

【问题讨论】:

  • 顺便说一下,如果你使用刚体和物理,请记住不要手动设置 transform.position。在这种情况下,使用 MovePosition 函数确保物理引擎可以立即对新位置做出正确反应。甚至更好:使用 AddForce 实现平滑移动。此外,最好将这些东西放在 FixedUpdate() 而不是 Update() 中,因为前者与物理引擎同步,后者与屏幕刷新率同步(往往波动更大)。

标签: c# unity3d qvector3d


【解决方案1】:

是的。 moveVector * moveSpeed * Time.deltaTime; 从向量中获取每个数字,然后将其乘以移动速度,然后再乘以 Time.deltaTime。

因此,如果我们有一个向量 3, 2, 1,则每个轴都乘以该值: 3 * 速度 * deltaTme 2 * 速度 * deltaTme 1 * 速度 * deltaTime

transform.position 与写 gameObject.transform.position 相同。因为脚本是附加在游戏对象上的。

注意 GameObject 和 gameObject 之间的区别。

gameObject 是脚本附加到的当前对象 GameObject 是对象的基类

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 2016-08-05
    相关资源
    最近更新 更多