【发布时间】:2016-08-13 18:34:15
【问题描述】:
我正在制作简单的游戏,玩家可以触摸屏幕上的任何位置来做某事。这是一种反射游戏。同时我在屏幕上有一个按钮可以暂停游戏。问题是当我触摸一个按钮时,游戏会同时检测到屏幕触摸,我想避免这种情况。我使用了一个在按钮按下时更改的布尔值,但它仍然无法正常工作 - 检测到屏幕触摸后游戏暂停了几分之一秒。
我的暂停游戏代码:
GameControlerScript:
public static bool isPaused;
public void PauseGame()
{
isPaused = true; // this is static
Time.timeScale = 0.0f;
//more code here
}
以及我在附加到不同对象的脚本中的触摸检测:
void Update()
{
if (((Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began) || (Input.GetKeyDown(KeyCode.Space))) && !GameControllerScript.isPaused)
{
// code here starts to be executed and then pasues because of timescale
}
}
那么有没有办法在 isPaused 布尔值检测到屏幕触摸之前对其进行更改?
【问题讨论】:
-
这两个函数是否在同一个类/游戏对象中?因为您可以添加一个文本,如果 isPaused==true 它只是返回;s 所以下一个代码不会被执行......我错过了什么吗?
-
这就是两个代码都附加到不同对象的东西。第一个是包含游戏逻辑的游戏管理器的脚本,第二个附加到在游戏过程中实例化的对象(但始终只有一个)。如果它是一个游戏对象,我会将所有内容放入一个脚本并使用简单的布尔值进行管理,但在这种情况下不是
-
如果你有一个游戏管理器对象(假设它有一个名为 GameManager 的组件,并且在该组件内有 isPaused 布尔值)。将布尔值设为非静态和公共的,然后您可以使用 GameObject.Find("game manager").GetComponent
().isPaused 通过其他对象访问它 -
它是静态的并且我通过 GameControllerScript.isPaused 访问它会导致问题吗?
-
这应该不是问题,但我不确定它是否会起作用。如果它有效,你所要做的就是插入: if (GameControllerScript.isPaused) return;进入 Update() 函数。正确的?还是我错过了什么? isPaused 布尔值在哪里?在游戏管理器或游戏对象中?