团结:不能按空间来取消暂停。 这是一个统一的UI错误? 或者也许写得不好的代码?

所以我认为我的暂停菜单有一个错误。 为了简单起见,我简化了我想要达到的效果:当玩家首次启动游戏时,会出现一个带有一个button的UI菜单:“开始游戏”,他们必须按下才能开始游戏。 然后,他们可以暂停,然后通过按空格再次调出这个菜单。 玩家可以通过按下“开始游戏”或再次按空格来恢复游戏。

现在的问题是,当玩家再次按下空间来取消暂停时,什么都不会发生 – 除非他们点击屏幕上的任何地方。 解释有点复杂,但我会尽我所能。

通过点击“开始游戏”button,说出玩家以前开始游戏或取消游戏暂停。 如果他们再次暂停游戏,他们只能点击屏幕上的某个地方按下空格才能暂停游戏。 如果播放器在按下暂停之前或之后在屏幕上的某个地方点击,这将起作用。

但是,如果玩家先前通过按空格解锁了游戏,则可以通过无限地按空格来暂停和取消暂停(直到按下“开始游戏”来解除暂停)。 这是一个Unity UI系统(我使用Unity 5.0)的错误? 或者也许用我的代码?

这是我的代码:

public class GameController : MonoBehaviour {bool paused; public GameObject canvas; //in the editor I set this to reference the canvas that //the 'Start Game' button is on void Awake() {PauseGame ();} void Update() {if (Input.GetKeyDown (KeyCode.Space)) {PauseGame (); Debug.Log ("Pressed 'Space'");} } public void PauseGame() {paused = !paused; if (paused == true) {Time.timeScale = 0; canvas.SetActive (true); Debug.Log ("'Pause' Called");} else {Time.timeScale = 1; canvas.SetActive (false); Debug.Log ("'Unpause' Called");} } } 

*“开始游戏”button从GameController脚本调用PauseGame()方法

更新

我写了一些debugging线来弄清楚发生了什么。 显然,如果玩家以前按下“开始游戏”取消注册,然后再次暂停,当他们试图通过按空格解除游戏暂停时,游戏确实暂停,然后立即再次暂停。 但是,只有当玩家以前按下“开始游戏”(以及可以通过在暂停之前或之后点击屏幕上的某个位置来解决)时才会执行此操作。 如果玩家先前没有按空格键,则不会发生这种情况。

更新

显然,“非暂停”正在被事件系统调用,而“暂停”正在被按压空间调用。 我猜Unity是内置的,如果玩家以前点击了一个UIbutton,按下空格键后会再次点击该button。 有谁知道如何改变这个?

我自己解决了! 对不起,我不得不在GameDev堆栈交换站点占用空间,但我猜如果有其他人有这个问题,他们会知道如何解决它。 问题在于事件系统 。 如果“事件系统”游戏对象的“事件系统”脚本组件中的“发送导航事件”布尔值为true,则最后单击的button的游戏对象将被视为“已select”,按空格键将再次单击该button。

基本上发生了什么事情是因为“开始游戏”button被“选中”,压缩空间暂停和取消暂停游戏。 按下该button上的空间以及GameController脚本中的Update()消息中的函数。 这可以通过取消选中 事件系统上的“发送导航事件”框来解决。

试试这个:在编辑器中开始你的游戏,点击播放窗口,然后(不要单击窗口)使用空间来暂停游戏。 然后立即再次打空间取消暂停。

如果这个工作,那么你很好。 你所看到的是Unity播放窗口没有得到击键(或者点击鼠标),除非他们有焦点。