我知道暴露一整段代码并要求解析它是不正确的,但我无法理解它是如何工作的,我浏览了 C# 教科书上的基础,部分理解它是什么样的,但是 C# for团结是非常不同的......
public class FPSInput : MonoBehaviour {
public float speed = 6.0f;
public float gravity = -9.8f;
private CharacterController _charController;
void Start() {
_charController = GetComponent<CharacterController>();
}
void Update() {
float deltaX = Input.GetAxis("Horizontal") * speed;
float deltaZ = Input.GetAxis("Vertical") * speed;
Vector3 movement = new Vector3(deltaX, 0, deltaZ);
movement = Vector3.ClampMagnitude(movement, speed);
movement.y = gravity;
movement *= Time.deltaTime;
movement = transform.TransformDirection(movement);
_charController.Move(movement);
}
*: 夹紧时返回-1, 夹紧时: 夹紧时返回A,夹紧时返回1D**-1S1W回答评论中的问题:
假设按下了 W 和 D 按钮,那么您将得到一个位移矢量 (1, 0, 1)。您希望物体以
speed. 让speed=5.你不能只将向量乘以速度,因为这样你就得到了向量 (5,0,5)。如果你将角色移动到这个向量上,它会移动多远?沿着毕达哥拉斯的塔走了一段距离
sqrt(5^2 + 5^2) = sqrt(50) ≈ 7。但是物体的速度是5,它不能移动7的距离!因此,我们不将向量乘以标量,而是将向量的长度设置为 5。
那么向量将近似等于 (3.5355, 0, 3.5355)。它的长度将等于 5 => 速度应该等于 5,因为我们将对象移动了一个向量。\