[英]Check if the player is moving
我真的不喜欢用速度和其他物理检查它,无论如何它似乎不起作用,在更新(当前循环)结束时保存 Vector3 对象中的位置,然后将它与当前位置进行比较(在下一个loop) 不起作用,因为它与当前位置具有相同的数字。 我也尝试过使用 FixedUpdate 而不是 Update,但这也不好。 我确实尝试编写curr_pos = new Vector3(transform.position.x...)
并且它也为我提供了相同的最后和当前位置的数字,我还尝试将它与当前位置进行比较,没有任何变量
我也尝试过使用Input.GetKey("w")
或Input.GetKey(KeyCode.up)
public Vector3 prev_pos, curr_pos;
void Update(){
prev_pos = this.transform.position;
...
if(prev_pos != curr_pos){
bool moving = true;
}
else{
bool moving = false;
}
if(sprinting && !crouching && moving){
speed = sprint_speed;
}
curr_pos = prev_pos;
}
我的播放器上有一个角色控制器,并正在用这个控制器移动它
CharacterController controller = GetComponent<CharacterController>();
if(controller.isGrounded) {
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
if(Input.GetButton ("Jump")){
moveDirection.y = jumpSpeed;
}
}
要解决问题,您必须更正您的算法。 底部是一个更简单的示例,它计算每帧结束时上一个位置的位置。
public Vector3 prev_pos;
void Update(){
var moving = prev_pos != transform.position;
if(moving)
{
// when moving..
}
prev_pos = transform.position;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.