2016-08-24 90 views
1

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

我的播放器脚本设置:

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; 
    } 

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

+0

菜单是否统一ugui? – tim

+0

最简单的方法是有一个透明的按钮,填满屏幕。但是你应该检查下面的实际答案,因为它们提供了更好的解决方案。 – Cabrra

回答

0

使用状态机,并根据您当前的

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 
    } 
} 
+0

据我所知,这不是什么OP想要的。我认为他希望球员在按下按钮时不会移动。 –

+0

** AND **他希望当某个菜单对象发生点击时,该播放器不会移动。所以让OP请发表意见吧。美好的一天:) –

+0

@IanH。你能解释一下你为什么低估了我的答案吗? –

0

您可以使用一个状态机处理的点击次数除以Umair M.所建议这是手柄的最佳解决方案动辄暂停菜单或类似的东西(例如)。但另一个简单的解决方案是创建一个初始化为false的bool,并且在botton压缩中将此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编辑从玩家游戏物体添加到该按钮的OnButtonClick()方法在的OnClick()组成。在这里你可以看到一个关于这个的视频:https://www.youtube.com/watch?v=TYzdhiRiKd0

+0

谢谢你试了一下,但仍然没有按照我希望的方式工作。我试图达到这样的触摸玩游戏Zig扎格菜单:) – Richarrd82

+0

你可以创建一个时间变量(timePassed = Time.deltatime)来处理压力和运动开始之间的时间,另一个工具可以帮助你是触发器:https://www.youtube.com/watch?v = 3NBYqPAA5E。希望这可以帮助你:) – Odle098