【问题标题】:Creating a manager for controllers in Unity3D在 Unity3D 中为控制器创建管理器
【发布时间】:2012-12-10 05:40:21
【问题描述】:

我想在 Unity3D 中制作一个主游戏对象,作为与控件相关的任何操作的指挥中心,以便游戏中任何需要知道玩家是否正在尝试向右移动的组件都会收到通知或状态改变并采取相应的行动。我对 Unity 中的编程和脚本编写有点陌生,所以我知道这是可能的,但我不知道如何专门使用引擎来做到这一点。

我遇到的几个概念是:

  • 状态改变技术
  • 单身神班
  • 具有向上发送消息并向下接收消息的子对象的父游戏对象
  • 抽象类的继承,这些抽象类充当接口并实现到某个集合中并迭代以获取调用的消息

如果你们对这个主题有任何见解,那就太好了。我基本上想找出解决这个问题的好方法,如何决定一个好的方法(优点与缺点),或者我是否完全错了。 :)

我正在寻找的只是您为此目的选择的方法的实现示例。无需进入每个单独的方法。也许简要说明您决定使用模式的原因会很棒!

提前致谢!

【问题讨论】:

  • 这对于 SO 来说有点宽泛。您已经确定了几个概念,它们都可以满足您的需求,但方式不同。试着举一个更具体的例子。
  • 嘿@Jerdak,感谢您的提示。我添加了最后一段,希望能缩小问题范围。

标签: unity3d game-engine


【解决方案1】:

好吧,你可以使用 C# events: 1)创建您的CommandCenter类(MonoBehaviour),在那里实现一些您需要共享的事件,并创建一些公共方法来调用tham。 2)每当您处理按钮播放器按下时,调用CommandCenter中的方法,该方法调用事件(或者,您可以将事件公开并直接调用tham) 3)在每个组件中,女巫应该知道一些事件,在Awake方法中,执行以下操作:

var commandCenter =  FindObjectOfType(CommandCenter);
commandCenter.MyEvent += localMyEventHandler;

4) 不要忘记取消订阅销毁事件:

OnDestroy ()
{
var commandCenter =  FindObjectOfType(CommandCenter);
commandCenter.MyEvent -= localMyEventHandler;
}

5) 所以,在localMyEventHandler 方法中你可以处理这个事件。

【讨论】:

  • 非常感谢@SentineL 的示例。这正是我想要的。干杯!
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 2017-09-30
  • 2011-09-25
  • 1970-01-01
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多