C# 父对象和子对象之间的双向通信
我有一个包含很多骰子的游戏板 通过在四个方向中的任意一个方向上拖动鼠标,每个骰子都可以向任意方向倾斜(受游戏板和其他骰子的边界限制)。 因此,骰子自己处理输入,但在执行倾斜之前,我必须检查是否允许在游戏板上移动C# 父对象和子对象之间的双向通信,c#,unity3d,C#,Unity3d,我有一个包含很多骰子的游戏板 通过在四个方向中的任意一个方向上拖动鼠标,每个骰子都可以向任意方向倾斜(受游戏板和其他骰子的边界限制)。 因此,骰子自己处理输入,但在执行倾斜之前,我必须检查是否允许在游戏板上移动 因此,我会给每个骰子一个对游戏板的引用,但是有没有更好的方法来获得这种双向行为?我建议,不要在骰子对象内部处理这个逻辑,而是在一个抽象的系统中处理它(创建将这两个组件连接在一起并处理所需逻辑的第三个元素),检查每个移动是否有效 要做到这一点,您需要更改鼠标输入,以便它也在抽象系统中处理,
因此,我会给每个骰子一个对游戏板的引用,但是有没有更好的方法来获得这种双向行为?我建议,不要在骰子对象内部处理这个逻辑,而是在一个抽象的系统中处理它(创建将这两个组件连接在一起并处理所需逻辑的第三个元素),检查每个移动是否有效 要做到这一点,您需要更改鼠标输入,以便它也在抽象系统中处理,而不是在每个骰子上,因此当您触摸骰子对象时,此系统能够检查触摸的对象,然后运行代码检查移动是否在该对象上有效。这很可能涉及存储列表/数组/Dic所有骰子对象的属性,以便您能够检查并查看触摸的对象是否包含在其中,因此是否有效。然后,您可以使用
touchedObject.getcomont();
(或者您可以将所有这些属性与实际的MonoBehavior分开存储,然后查找它们)
使用此方法,您可以对照骰子对象和游戏板检查下一步是否有效,而不必让每个对象相互依赖(这将导致循环依赖)。这还提供了一个额外的优势,让您可以更灵活地更改或删除此代码
这是您可以采取的许多不同方法之一,另一种方法是让您的游戏板存储每个骰子对象的引用,并让骰子对象在与(游戏板正在侦听的)交互时触发事件,因此gameboard代码可以运行检查,尽管根据经验,我会使用前一种方法,并尽可能多地考虑解耦