即使这已经解决了,下面的解决方案应该可以帮助其他人解决这个问题 .
这是在忽略旋转的同时向 transform.forward 移动的正确方法:
1 . 获取 transform.forward .
2 . 使用 InverseTransformDirection 将其转换为本地空间
3 . 将 y 轴设置为 0 ;
4 . 使用 dir.Normalize() 标准化;
5 . 将新pos贴到 transform.position .
public float mod = 2;
void Update()
{
//Get Forward face
Vector3 dir = transform.forward;
//Convert to local Space
dir = transform.InverseTransformDirection(dir);
//Reset/Ignore y axis
dir.y = 0;
dir.Normalize();
//Append the new pos to the `transform.position`.
transform.position += dir * Input.GetAxis("Vertical") * mod;
transform.position += Input.GetAxis("Horizontal") * transform.right * mod;
}
Another Method(Not Recommended):
由于相机倾斜角度为45度:
1 . 将其旋转至 -45
2 . 正常移动相机
3 . 将其重新转回 45
public float startingOffset = 45;
public float mod = 2;
// Update is called once per frame
void Update()
{
//Rotate it to -45
transform.Rotate(new Vector3(-startingOffset, 0, 0));
// Move the camera normally
transform.position += Input.GetAxis("Vertical") * transform.forward * mod;
transform.position += Input.GetAxis("Horizontal") * transform.right * mod;
//Rotate it back to 45
transform.Rotate(new Vector3(startingOffset, 0, 0));
}
这两个都应该有效,但首选方式应该是第一个 .