父对象和子对象之间的双向通信

时间:2015-04-19 11:50:44

标签: c# unity3d

我有一个包含很多骰子的游戏手柄。

通过在四个方向上拖动鼠标,可以将每个方向倾斜到任一方向(受游戏板边界和其他骰子限制)。 所以骰子自己处理输入但在执行倾斜之前我必须检查游戏板上是否允许移动。

因此,我会给每个骰子一个游戏板的参考,但是有更好的方法来获得这种双向行为吗?

1 个答案:

答案 0 :(得分:2)

不是通过引用Gameboard来处理骰子对象内部的逻辑,而是建议在相反的情况下执行相反的操作,而是在抽象的系统中处理它(创建将这两个组件连接在一起的第3个元素)处理所需的逻辑),检查每次移动是否有效。

要做到这一点,您需要更改鼠标输入,以便它也可以在抽象系统中处理,而不是在每个Dice上处理,因此当您触摸Dice对象时,此系统可以检查触摸了哪个对象,然后运行代码以检查该对象上的移动是否有效。这很可能涉及存储所有Dice对象的List / Array / Dictionary,以便您能够检查并查看触摸的对象是否包含在其中并因此有效。然后,您可以使用touchedObject.GetComonent<Dice>();从Dice对象获取所需的任何属性(或者您可以将所有这些属性与实际的MonoBehaviour分开存储,而不是查找它们。)

使用此方法,您可以检查Dice对象和游戏板,以查看下一步移动是否有效,而不是每个对象都依赖于另一个(这会导致循环依赖)。这也提供了额外的优势,使您可以更灵活地更改或删除此代码。

这是您可以采取的许多不同方法之一,另一种方法是让您的游戏板存储每个Dice对象的引用,并让Dice对象在与游戏板正在侦听时触发事件,因此游戏板代码然后可以运行检查 - 虽然从经验我会采用前一种方法,并尽可能多地看待解耦。