【问题标题】:How to stop an input function after one use?如何在一次使用后停止输入功能?
【发布时间】:2022-12-09 07:37:56
【问题描述】:

基本上我正在创建一个游戏,你可以在屏幕上拖动并启动玩家以收集宝石,玩家还可以跳跃(非常短)并从左向右移动。我希望玩家能够左右移动角色并跳跃,而不是拖动和射击一次。问题在于我到目前为止所获得的代码,玩家需要做的就是一遍又一遍地发送拖放功能,让玩家飞起来。我想禁用它。我希望玩家有一次机会拖动并启动播放器。这将在重生后重置。

所以基本上我有以下代码。我想使用 Get Mouse Button Down 启用 lr(Line Renderer)一次,然后禁用它,然后在重生时重新启用它,依此类推。

    LineRenderer lr;
    Rigidbody2D rb;
    public float power = 5f;
    public float speed = 3.0f;
    Vector2 startDragPos;

if (Input.GetMouseButtonDown(0))
            startDragPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);

        if (Input.GetMouseButton(0))
        {
            lr.enabled = true;

            Vector2 endDragPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Vector2 _velocity = (endDragPos - startDragPos) * power;

            Vector2[] trajectory = Plot(rb, (Vector2)transform.position, _velocity, 500);

            lr.positionCount = trajectory.Length;

            Vector3[] positions = new Vector3[trajectory.Length];

            for(int i = 0; i < trajectory.Length; i++)
            {
                positions[i] = trajectory[i];
            }

            lr.SetPositions(positions);
        }
        else
        {
            lr.enabled = false;
        }
        

         if (Input.GetMouseButtonUp(0))
         {
            anim.SetTrigger ("normanLaunch");
            soundEffect.Play();
            Vector2 endDragPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Vector2 _velocity = (endDragPos - startDragPos) * power;
            rb.velocity = _velocity;

            fallDetector.transform.position = new Vector3(transform.position.x, fallDetector.transform.position.y);
         }
    }

`

感谢您的帮助!

【问题讨论】:

    标签: c# unityscript


    【解决方案1】:

    使用布尔值指示播放器是否已启动。

    仅当该布尔值为假时才允许播放器启动。
    播放器启动后,立即将该布尔值设置为 true。

    if (!playerHasLaunched)
    {
        if (CodeToLaunchPlayerSucceeded())
        {
            playerHasLaunched = true;
        }
    }
    

    然后当重启发生时,将该布尔值设置回 false。

    public void OnGameRestart()
    {
        playerHasLaunched = false;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-27
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 2015-07-08
      相关资源
      最近更新 更多