【问题标题】:Differentiate between button touch and screen touch按键触摸和屏幕触摸的区别
【发布时间】: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 布尔值在哪里?在游戏管理器或游戏对象中?

标签: c# button unity3d touch


【解决方案1】:

检查你的触摸是否在 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
}

【讨论】:

  • 奇怪,当我这样做时:if (((Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began) || (Input.GetKeyDown(KeyCode.Space))) && !GameControllerScript.isPaused && !EventSystem.current.IsPointerOverGameObject()) 它不能正常工作,但它可以与您的代码一起工作。 :) 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-14
  • 1970-01-01
  • 1970-01-01
  • 2015-11-10
  • 2011-03-11
  • 1970-01-01
  • 2015-04-13
相关资源
最近更新 更多