2014-10-11 65 views
1

我試圖做一個非常簡單的記憶遊戲(即,牌桌,玩家翻轉兩次,一次試圖找到一場比賽)統一。我對它進行格式化的方式是將CardScript附加到卡片上,並在卡片上附加一個腳本,用於存放所有卡片,發送消息以進行旋轉,當匹配成功時等等。但是,我遇到了一個障礙。我在CardScript中使用void OnMouseDown()來知道它何時應該翻轉,但我不知道如何讓板子知道發生了這種情況。有什麼想法嗎?我可以在其他地方發送OnMouseDown()事件嗎?

回答

0

所有你需要的通信物體之間是一個參考。爲了得到一個參考,通常你只是保持一個變量是這樣的:

MyScript reference = new MyScript(); 

然而,這不會在Unity總是工作,因爲你不能在MonoBehaviours使用new。所以你需要另一種方式。

您可以參考!你可以使用這個:

MyScript reference = GameObject.Find("GameObjectName").GetComponent<MyScript>(); 

一旦你有參考只是進行函數調用。

reference.foo(); 
+0

謝謝!我設法通過在實例化卡片時傳遞對象的引用來做到這一點。打的好。 – Maxw3ll 2014-10-11 22:57:08

-1

基本上你需要通過腳本發送消息。這是你必須做的:

Script1.cs

public void checky() 
{ 
    print("you touched my card"); 
} 

Script2.cs

private Script1 otherScript; // we need Script1 
void OnMouseDown() 
{ 
    otherScript = new Script1(); // new instance of Script1 
    otherScript.checky(); // accessing public method of Script1 
} 

希望這有助於:)

+0

是否可以發送它並保持它們正在與對方的同一個實例交談的事實? – Maxw3ll 2014-10-11 08:01:57

+0

是的,這是可能的。在script1中重複相同的過程,然後他們會有很好的聊天:) – hfarazm 2014-10-11 08:37:42

+0

要明白,只有當'Script1'不從'MonoBehaviour'繼承時,你的解決方案纔會工作。如果是這樣,則不能使用新關鍵字來獲取實例。 'GetComponent'是解決方案 – Programmer 2016-08-10 21:21:02

相關問題