【问题标题】:Character jumping randomly while holding jump button?按住跳跃按钮时角色随机跳跃?
【发布时间】:2020-09-09 07:30:54
【问题描述】:

我已经以这样一种方式实现了我的玩家移动,在您松开跳跃按钮并再次按下它之前,您无法再次跳跃。出于某种原因,我的角色有时会在严格按住按钮时随​​机跳跃。它是完全随机的,只是偶尔发生,当它发生时,它最终只是随机停止,所有这些都没有释放跳跃按钮或按下其他任何东西。

我已经把它缩小到我的 PlayerMovement 脚本,它处理输入并将其发送到角色控制器,整个脚本如下:

public class PlayerMovement : MonoBehaviour
{
    public CharacterController controller;
    public Animator animator;

    private float horizontalMove = 0f;
    private bool jump = false;
    private bool dash = false;

    private void Update() {
        horizontalMove = Input.GetAxisRaw("Horizontal");
        if (Input.GetButton("Jump")) {
            jump = true;
        }
        if (Input.GetButtonDown("Dash")) {
            dash = true;
        }
    } 

    private void FixedUpdate() {
        controller.Move(horizontalMove, jump, dash);
        jump = false;
        dash = false;
    } 
}

使用各种调试跟踪,似乎问题出在 FixedUpdate() 函数中。 Update() 中的input.getbutton 为跳转按钮返回正确的“真”值,即使角色跳跃不规律也是如此。同时在 fixedUpdate 中打印 jump first thing 的值偶尔会给出随机错误。

我的下一个猜测是,在调用 update() 之前,有时可能会多次调用 fixedUpdate,导致这些值为 false,但我创建了更多跟踪来检测何时两次调用 fixedUpdate,它只发生了一次启动时几次(在正常播放期间以 2k+fps 运行),而在发生跳跃问题时根本没有。

有什么想法吗?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    按住跳跃键时角色随机跳跃?

    问题在于您如何获得输入。因为您使用的是 Input.GetButton,只要按下按钮,它就会返回 true。

    您应该只在实现触发动作(例如蹲下)的事件时使用它。

    示例:

    if (Input.GetButton("Jump")) {
        jump = true;
    }
    
    // Instead use GetButtonDown:
    if (Input.GetButtonDown("Jump")) {
        jump = true;
    }
    

    Input.GetButtonDown 仅激活一次,因此在您按住按钮时不会产生跳跃。

    Input.GetButton Docs

    【讨论】:

    • 这不起作用。我需要跟踪玩家为了短跳和高跳而按住按钮的时间。即使如此,这种变化也不能解释为什么即使没有双固定更新(),当按钮被按住时,“跳转”私有变量有时也是错误的
    猜你喜欢
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多