Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 父对象和子对象之间的双向通信_C#_Unity3d - Fatal编程技术网

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

C# 父对象和子对象之间的双向通信,c#,unity3d,C#,Unity3d,我有一个包含很多骰子的游戏板 通过在四个方向中的任意一个方向上拖动鼠标,每个骰子都可以向任意方向倾斜(受游戏板和其他骰子的边界限制)。 因此,骰子自己处理输入,但在执行倾斜之前,我必须检查是否允许在游戏板上移动 因此,我会给每个骰子一个对游戏板的引用,但是有没有更好的方法来获得这种双向行为?我建议,不要在骰子对象内部处理这个逻辑,而是在一个抽象的系统中处理它(创建将这两个组件连接在一起并处理所需逻辑的第三个元素),检查每个移动是否有效 要做到这一点,您需要更改鼠标输入,以便它也在抽象系统中处理,

我有一个包含很多骰子的游戏板

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


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

我建议,不要在骰子对象内部处理这个逻辑,而是在一个抽象的系统中处理它(创建将这两个组件连接在一起并处理所需逻辑的第三个元素),检查每个移动是否有效

要做到这一点,您需要更改鼠标输入,以便它也在抽象系统中处理,而不是在每个骰子上,因此当您触摸骰子对象时,此系统能够检查触摸的对象,然后运行代码检查移动是否在该对象上有效。这很可能涉及存储列表/数组/Dic所有骰子对象的属性,以便您能够检查并查看触摸的对象是否包含在其中,因此是否有效。然后,您可以使用
touchedObject.getcomont();
(或者您可以将所有这些属性与实际的MonoBehavior分开存储,然后查找它们)

使用此方法,您可以对照骰子对象和游戏板检查下一步是否有效,而不必让每个对象相互依赖(这将导致循环依赖)。这还提供了一个额外的优势,让您可以更灵活地更改或删除此代码

这是您可以采取的许多不同方法之一,另一种方法是让您的游戏板存储每个骰子对象的引用,并让骰子对象在与(游戏板正在侦听的)交互时触发事件,因此gameboard代码可以运行检查,尽管根据经验,我会使用前一种方法,并尽可能多地考虑解耦