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