Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 区分按钮触摸和屏幕触摸_C#_Button_Unity3d_Touch - Fatal编程技术网

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())
它不能正常工作,但它可以与您的代码一起工作。:)谢谢