实施游戏暂停的首选方法

时间:2019-01-13 19:52:07

标签: c# unity3d

在游戏中实现暂停的好方法是什么?

我可以提出以下两个想法:

  1. 使用FindObjectsOfType<IPausable>()
  2. Pauser类执行暂停操作,并让每个可以暂停的对象都订阅它

我知道这两种方法都行得通,但是不知道该选择哪种方法。

谢谢

1 个答案:

答案 0 :(得分:2)

我认为接口可能是一个很好的解决方案。

您可以创建一个IPauseable接口,让您要暂停实现IPausable接口的任何事情,这样您已订阅PauseManager或类似对象的每个对象都可以被视为相同。

public interface IPausable{
  // interface members
  void Pause();
  bool isPaused();
  void UnPause();
 }

然后,您可以遍历已订阅对象的列表,并执行类似的操作(未经测试的伪代码来显示此想法)

   for (int i = 0; i< subScribedComponents.Length; i++)
   {
        if (subScribedComponents[i] is IPausable)
       {
            IPausable pauseInterface = subScribedComponents[i] as IPausable;

            pauseInterface .Pause();
        }
    }

这样做的好处是,任何实现IPausable的类都必须提供如何自己执行这些方法的方式,并且都可以以相同的方式对待它们,因此,如果实现,则是Character还是屏幕计时器您知道某个时刻的界面提供了一种暂停该特定对象的方法。

要直接回答最初的问题,我将投票支持订阅者/发布者方法(2),因为第一种选择是让您遍历每个对象,如果您选择了不可行的对象第二种方法是,您将只对想要暂停的事物进行操作,而不会迭代场景中的每个对象。