【问题标题】:Player moving when clicking buttons in menu单击菜单中的按钮时播放器移动
【发布时间】:2016-12-31 10:33:06
【问题描述】:

我的游戏是一个场景,所以我得到了这个小小的点击来播放菜单设置。但问题是当我单击菜单中的一个按钮时,按钮被按下但播放器也开始移动。我想要实现的是,如果我单击菜单按钮,播放器不会移动,但只要我单击屏幕上的其他位置,他就会开始移动。

我的播放器控制器脚本设置:

if (Input.GetMouseButtonDown(0))
    {
        inGameMenu.SetActive(true);
        startMenu.SetActive(false);

        if(grounded)
        {
            myRigidBody.velocity = new Vector2(angleOfJump, jumpForce);
        } 
    }

    if(Input.GetMouseButton(0))
    {
        if(jumpTimeCounter > 0)
        {
            myRigidBody.velocity = new Vector2(angleOfJump, jumpForce);
            jumpTimeCounter -= Time.deltaTime;
        }
    }

    if(Input.GetMouseButtonUp(0))
    {
        jumpTimeCounter = 0;
    }

我知道必须有一个简单的解决方案,但我就是找不到。

【问题讨论】:

  • 菜单统一ugui吗?
  • 最简单的方法是让一个透明按钮填满屏幕。但是,您应该查看下面的实际答案,因为它们提供了更好的解决方案。

标签: android user-interface button unity3d onclick


【解决方案1】:

使用状态机,并根据您的当前处理点击

enum GameStates
{
    Started,
    Playing,
    Ended
};

GameStates currentState = GameStates.Started;


void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        if(currentState == GameStates.Started)
        {
            inGameMenu.SetActive(true);
            startMenu.SetActive(false);
            currentState = GameStates.Playing;
        }
        else if(currentState == GameStates.Playing)
        {
            // handle gameplay click here.
        }
        // ... etc
    }
}

【讨论】:

  • 据我了解,这并不是 OP 想要的。我认为他希望玩家只有在没有按下按钮时才移动。
  • 并且他希望玩家在点击菜单对象之一时不要移动。所以请让OP对此发表意见。美好的一天:)
  • @IanH。你能解释一下你为什么不赞成我的回答吗?
  • 我做了,据我了解情况,您的回答不完全符合要求。
  • 嗯,这与你喜不喜欢无关,因为这首先不是你的问题。并且答案确实符合要求,如果您无法正确解释问题,那就是您的问题。无论如何,即使答案不能解决 OP 的问题,HE 也有权不接受答案,但如果您根据您的think or understand 否决它(作为第三人),它并不完全良好的行为。
【解决方案2】:

您可以使用 Umair M 建议的状态机。这是轻松处理暂停菜单或类似内容(例如)的最佳解决方案。但另一个简单的解决方案是创建一个 bool 初始化为 false,并在按下按钮时将此 bool 设置为 true 以允许角色移动。

一个例子:

在播放器脚本中:

bool CharacterActive = false;

void Update()
{
    if(CharacterActive) // if the bool variable is active..
    {
        if(Input.MouseStuff :D) // if movement key pressed..
        {
            // ..Move the character
        }
    }
}

public void OnButtonClick()
{
    CharacterActive = true;
}

在 Unity 编辑器中,在 OnClick() 组件中添加来自玩家游戏对象的 OnButtonClick() 方法。在这里你可以看到一个视频:https://www.youtube.com/watch?v=TYzdhiRiKd0

【讨论】:

  • 感谢尝试过,但仍然无法按照我想要的方式工作。我试图在游戏 Zig Zag 中实现那种玩菜单的感觉:)
  • 您可以创建一个时间变量(timePassed = Time.deltatime)来处理按下和开始移动之间的时间,另一个可以帮助您的工具是触发器:youtube.com/watch?v=3NBYqPAA5Es。希望这可以帮助你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
  • 2015-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
相关资源
最近更新 更多