我在我的代码中遇到了循环依赖,不确定该如何解决。
我正在开发一款游戏。一个NPC有三个组件,分别负责思考、感知和行动。这些组件需要访问NPC控制器以获取其模型,但控制器需要这些组件才能执行任何操作。因此,它们在构造函数中都将彼此作为参数传入。
ISenseNPC sense = new DefaultSenseNPC(controller, worldQueryEngine);
IThinkNPC think = new DefaultThinkNPC(sense);
IActNPC act = new DefaultActNPC(combatEngine, sense, controller);
controller = new ControllerNPC(act, think);
(上述示例简化了参数。)
没有act
和think
,controller
无法执行任何操作,因此我不希望在没有它们的情况下初始化它。反之亦然。我该怎么办?
ControllerNPC
使用think
和act
来更新其在世界中的状态:
public class ControllerNPC {
// ...
public override void Update(long tick)
{
// ...
act.UpdateFromBehavior(CurrentBehavior, tick);
CurrentBehavior = think.TransitionState(CurrentBehavior, tick);
}
// ...
}
DefaultSenseNPC
使用 controller
来确定它是否与任何物体发生碰撞:
public class DefaultSenseNPC {
// ...
public bool IsCollidingWithTarget()
{
return worldQuery.IsColliding(controller, model.Target);
}
// ...
}