我有一扇門,門的兩側都有按鈕。每個按鈕都應該打開門。如何在需要時打開門
當我按下Button1時,門打開,再次按下,門關閉。但是,如果我按Button1然後按Button2,門將再次打開,而不是關閉。
我打開/關閉使用動畫。搞不明白,什麼是錯的
我有一扇門,門的兩側都有按鈕。每個按鈕都應該打開門。如何在需要時打開門
當我按下Button1時,門打開,再次按下,門關閉。但是,如果我按Button1然後按Button2,門將再次打開,而不是關閉。
我打開/關閉使用動畫。搞不明白,什麼是錯的
它的關鍵是你
。
您很高興知道該解決方案很簡單。有一個腳本調用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));
}
這是一個團結真正的基本概念,一旦你能做到這一點,你可以做任何事情。請享用!
如果您正在學習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
。
運行遊戲並觀察會發生什麼。瞧!令人驚歎的權利?
此腳本是否附加到兩個按鈕gameobjects? –
''sDoorClosed'是一個私人領域,第二個按鈕甚至可以訪問這個領域?或者是這個腳本連接到兩個按鈕? –
是的,附在兩個按鈕上的腳本。這是錯的嗎? – dima