GameObject
我有一个玩家可以用箭头键控制的人。当玩家按下left
或 时right
,我使用 旋转角色Transform.Rotate
。
然而,当我试图推动角色前进时,我发现了一个无法解释的差异。
- 如果我在的组件
velocity
上设置(通过按向上键),那么角色会朝他们面对的方向移动。Gameobject
Rigidbody
- 然而,如果我
Tranform.Translate
沿transform.forward
方向使用(按W
),那么角色不会朝他们面对的方向移动。相反,如果他们应用了两次旋转,他们就会朝他们所面对的方向移动。例如,如果我按住left
直到它们旋转了45
度数然后按W
,则角色将平移,就像我将它们旋转了90
度数然后按 一样Up
。
void Start()
{
m_Rigidbody = GetComponent<Rigidbody>();
m_Speed = 1.0f;
}
void Update()
{
if (Input.GetKey(KeyCode.UpArrow))
{
m_Rigidbody.velocity = transform.forward * m_Speed;
}
if (Input.GetKey(KeyCode.W))
{
transform.Translate(transform.forward * Time.deltaTime * m_Speed);
}
if (Input.GetKey(KeyCode.RightArrow))
{
transform.Rotate(new Vector3(0, 1, 0) * Time.deltaTime * m_Speed * 50, Space.Self);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.Rotate(new Vector3(0, -1, 0) * Time.deltaTime * m_Speed * 50, Space.Self);
}
}
我已经打印了transform.forward
方向,它似乎总是指向角色面对的方向。那么为什么Transform.Translate
in the transform.forward
Direction 不让角色朝他们面对的方向移动呢?
可能影响事物的可能配置选项:
- 该角色有一个
convex
MeshCollider
- 角色的旋转和旋转
Rigidbody
不会kinematic
被冻结,并且被限制。X
Z
混乱在于本地坐标和世界坐标。让我们来分解一下:
如果不指定 a
Space
,则在本地坐标Transform.Translate()
中移动对象。现在,获取本地向量,但以世界坐标返回它。因此,您有两种选择:transform.foward
forward
在当地坐标中:
在世界坐标中:
顺便说一句:重新排序乘法因子可以在计算效率方面发挥作用,因为标量乘法比向量乘法更快