繁体   English   中英

检查玩家是否在移动

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM