2014-10-11 45 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

相关问题