C# 区分按钮触摸和屏幕触摸
我正在制作一个简单的游戏,玩家可以触摸屏幕上的任何地方来做一些事情。这是一种本能的游戏。同时,我在屏幕上有一个按钮,可以暂停游戏。问题是,当我触摸一个按钮时,游戏会同时检测到屏幕触摸,我希望避免这种情况。我使用了一个布尔值,我在按下按钮时改变了它,但它仍然不能正常工作——在检测到触摸屏后,游戏仅在几秒钟内暂停 我的暂停游戏代码:C# 区分按钮触摸和屏幕触摸,c#,button,unity3d,touch,C#,Button,Unity3d,Touch,我正在制作一个简单的游戏,玩家可以触摸屏幕上的任何地方来做一些事情。这是一种本能的游戏。同时,我在屏幕上有一个按钮,可以暂停游戏。问题是,当我触摸一个按钮时,游戏会同时检测到屏幕触摸,我希望避免这种情况。我使用了一个布尔值,我在按下按钮时改变了它,但它仍然不能正常工作——在检测到触摸屏后,游戏仅在几秒钟内暂停 我的暂停游戏代码: GameControlerScript: public static bool isPaused; public void PauseGame() {
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
}
}
那么有没有办法在检测到scrren touch之前对isPaused boolean进行更改?检查您的触摸是否在UI元素上,如果它没有调用您为正常输入调用的任何方法
public void Update()
{
foreach (Touch touch in Input.touches)
{
if (EventSystem.current.IsPointerOverGameObject(touch.fingerId))
{
// you touched at least one UI element
return;
}
}
// you didnt touched any UI element
// Do Something
}
这两个函数是否在同一类/游戏对象中?因为您可以只添加一个文本,如果isPaused==true,它将返回;所以下一个代码不会被执行。。。我遗漏了什么吗?这两个代码都附加到不同的对象上。第一个是一种游戏管理器脚本,它保存一个游戏逻辑,第二个附加到在游戏过程中实例化的对象(但始终只有一个这样的对象)。如果它是一个游戏对象,我会将所有内容放在一个脚本中,并使用简单的布尔值进行管理,但在这种情况下,如果你有一个游戏管理器对象(假设它有一个名为GameManager的组件,该组件中有一个isPaused boolean)。将布尔值设置为非静态且公共的,然后您可以使用GameObject.Find(“游戏管理器”).GetComponent().IsPauseId通过另一个对象访问它。这是一个事实,它是静态的,我通过GameControllerScript.isPaused访问它导致了一个问题?这应该不是一个问题,但我不确定它是否有效。如果它有效,您所要做的一切就是插入:If(GameControllerScript.isPaused)return;进入Update()函数。对吗?还是我错过了什么?isPaused布尔值位于何处?在游戏管理器或游戏对象中?奇怪,当我这样做时:
if(((Input.touchCount>0&&Input.GetTouch(0.phase==TouchPhase.begined)|(Input.GetKeyDown(KeyCode.Space))&!GameControllerScript.isPaused&&EventSystem.current.IsPointerOverGameObject())
它不能正常工作,但它可以与您的代码一起工作。:)谢谢