2016-02-05 44 views
4

我有一扇門,門的兩側都有按鈕。每個按鈕都應該打開門。如何在需要時打開門

當我按下Button1時,門打開,再次按下,門關閉。但是,如果我按Button1然後按Button2,門將再次打開,而不是關閉。

enter image description here

我打開/關閉使用動畫。搞不明白,什麼是錯的

+1

此腳本是否附加到兩個按鈕gameobjects? –

+1

''sDoorClosed'是一個私人領域,第二個按鈕甚至可以訪問這個領域?或者是這個腳本連接到兩個按鈕? –

+0

是的,附在兩個按鈕上的腳本。這是錯的嗎? – dima

回答

4

它的關鍵是你

不使用靜態變量

在這種情況下

您很高興知道該解決方案很簡單。有一個腳本調用AttachToDoor

public void AttachToDoor() 
{ 
private bool isOpen; 
public float doorSpeed; 
etc etc 
public void OpenCloseDoor() 
    { 
    your code to open/close a door 
    } 
} 

AttachToDoor上你的門。通知OpenCloseDoor()標記爲public

接下來有另一個獨立的腳本,AttachToButton

public void AttachToButton() 
{ 
public AttachToDoor amazaingDoorScript; 
etc etc 
void Update() 
{ 
    if (Input.GetButton("Fire1")) 
    if (DoPlayerLookAtButton() && isAnimationReadyToPlay) 
    amazaingDoorScript.OpenCloseDoor(); 
} 
} 

拖動到任何你的 「按鈕」 的AttachToButton

看看檢查器,並注意插槽「amazaingDoorScript」。

從字面上將門拉到該插槽,並將AttachToDoor連接到「amazaingDoorScript」變量。

但是請注意...您可以按照您的需要,按照許多按鈕來操作

你犯了一個按鈕,任何時候,只要把AttachToButton按鈕

你甚至可以有另一種腳本,只是作爲一個例子,打開隨機關上門:

public AttachToDoor amazaingDoorScript; ... 
    Invoke("test",Random.Range(5f,10f)); ... 
    private void test() 
    { 
    // have a ghost mess with the door occasionally 
    amazaingDoorScript.OpenCloseDoor(); 
    Invoke("test",Random.Range(5f,10f)); 
    } 

這是一個團結真正的基本概念,一旦你能做到這一點,你可以做任何事情。請享用!


抓住機會,學習如何使用UnityEvent。

如果您正在學習Unity,這是瞭解UnityEvent的好機會。使用UnityEvent實際上是Unity日常工程的核心。

這裏是一個優秀的教程:https://stackoverflow.com/a/36249404/294884

上的按鈕,這樣做

public void AttachToButton() 
{ 
public UnityEvent buttonClicked; 
void Update() 
{ 
    if (Input.GetButton("Fire1")) 
    if (DoPlayerLookAtButton() && isAimationReadyToPlay) 
    { 
    Debug.Log("Button pressed!"); 
    if (buttonClicked!=null) buttonClicked.Invoke(); 
    } 
} 
} 

點擊保存。運行遊戲,並注意當在遊戲中按下按鈕時,您將看到日誌「按下按鈕!」。

現在,看在編輯器中,在您的按鈕

注意實際上是在編輯,你增加了一個驚人的隨意拖動和你AttachToButton的底部掉區域

現在停止遊戲,並試試這個。看看你的其中一個按鈕。查看事件buttonClicked的拖放區域。實際上,把你的門開到那個 ...並且選擇例程OpenCloseDoor

運行遊戲並觀察會發生什麼。瞧!令人驚歎的權利?

+0

我不確定我的理解,但它的工作原理,謝謝=)我會嘗試 找出它 – dima

+0

您的方法,感謝您的建議) – dima