2016-04-20 115 views
1

我正在製作一個簡單的遊戲,一個玩家觸摸屏幕上的任何地方做某件事。這是一種反射遊戲。同時我在屏幕上有按鈕可以暫停遊戲。問題是,當我觸摸按鈕時,遊戲會同時檢測到屏幕觸摸,我想避免這種情況。我使用了一個按鈕按下時更改的布爾值,但它仍然無法正常工作 - 在檢測到屏幕觸摸後,遊戲僅暫停一秒。區分按鈕觸摸和屏幕觸摸

我暫停遊戲代碼:

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得到布爾它檢測到觸摸?

+0

是同一類/遊戲對象這兩個函數呢?因爲你可以添加一個文本,如果isPaused == true它只是返回;所以下一個代碼不會被執行......我錯過了什麼? –

+0

這就是兩個代碼都附加到不同的對象的東西。首先是一種遊戲管理器的腳本,它持有一種遊戲邏輯,第二種遊戲附屬於在遊戲過程中實例化的物品(但始終只有這種類型)。如果它是一個gameobject,我會將所有腳本放到一個腳本中,並用簡單的布爾值來管理,但在這種情況下,如果您有一個遊戲管理器對象(假設它有一個名爲GameManager的組件,並且該組件內部存在isPaused布爾值,則不是這種情況下 –

+0

)。使布爾非靜態和公共,然後你可以通過其他對象使用GameObject.Find(「遊戲經理」)訪問它。GetComponent ().isPaused –

回答

2

檢查一下你的觸摸是用戶界面元素,然後如果它不叫你叫什麼方法對正常輸入

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 
} 
+0

奇怪,當我這樣做:'if(((Input.touchCount> 0 && Input.GetTouch(0).phase == TouchPhase.Began)|| (Input.GetKeyDown(KeyCode.Space)))&&!GameControllerScript.isPaused &&!EventSystem.current.IsPointerOverGameObject())'它不能正常工作,但它可以與你的代碼一起工作。 :) 謝謝! –