2016-09-19 84 views
-1

我不太明白這一點嗎?手電筒在關閉觸發器時關閉,但在退出扳機時關閉不了

似乎發生的是當我進入觸發區時手電筒關閉,但當退出觸發區時手電筒不會再次打開。如果我逆轉效果,即場景開始時閃光燈關閉,然後進入觸發區時手電筒不轉?這是相同的(用名字的小改動)腳本我用於主房間燈(工作)

因此,下面的代碼閃光燈關閉,我想打開它進入觸發區時?

public class TurnFlashLightOn : MonoBehaviour 
{ 

void Start() 
{ 

    GameObject[] allLights = GameObject.FindGameObjectsWithTag("flashLight"); 

    foreach (GameObject i in allLights) 
    { 
     i.SetActive(true); 
    } 

} 
void OnTriggerEnter() 
{ 
    GameObject[] allLights = GameObject.FindGameObjectsWithTag("flashLight"); 

    foreach (GameObject i in allLights) 
    { 
     i.SetActive(false); 


    } 

} 
void OnTriggerExit() 
{ 
    GameObject[] allLights = GameObject.FindGameObjectsWithTag("flashLight"); 

    foreach (GameObject i in allLights) 
    { 
     i.SetActive(true); 


     } 

    } 
} 

任何想法爲什麼它會關閉,但不是?

感謝

+0

你嘗試把一個斷點'OnTriggerExit'方法,來檢查是否被調用的方法? –

回答

1

微妙但重要的細節:GameObject.FindGameObjectsWithTag只能通過活動對象的搜索。一旦關掉手電筒,它就不會再出現在搜索結果中。

您需要緩存手電筒對象列表。

如果列表永遠不會改變(您永遠不會創建或銷燬手電筒),那麼您可以在Start期間填寫一次列表,然後在需要時隨時參考列表。

如果列表是動態的,您可以從一個空列表開始,然後將任何手電筒添加到列表中,因爲它被取消激活。當需要重新打開燈光時,請激活列表中的每個燈光,然後清除列表。

有很多方法可以做到這一點;基本問題只是你需要一些其他方式來跟蹤那些不活動的對象。

+0

好吧,我想我明白了嗎?有沒有一個例子可以讓我更好地理解?謝謝 – Newbie

+1

只是使用List <>夥計。這是基本的編程。 – Fattie

0

根據你的代碼和你告訴我的情況,你有一個事件,當一個對象通過一個閾值時燈會熄滅。該閾值包含Event OnTriggerEnter();

Threshold或Zone()不能同時包含兩個觸發器並知道應該觸發哪一個觸發器。我只能建議你有一個If-Else語句來幫助定義觸發器應該觸發的邏輯。例如 (這是僞代碼)

If (EnteringZoneFromStart() = true) 
     {OnTriggerEnter()} 
    Else If (ExitingZone() = true) 
     {OnTriggerExit()} 
    Else 
     {OnTriggerEnter()}