Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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,在游戏中实现暂停的好方法是什么 我可以提出以下两个想法: 使用FindObjectsOfType() 在Pauser类上执行暂停操作,并获取每个可以暂停的对象,然后订阅它 我知道这两种方法都可以很好地工作,但我不知道应该选择哪一种 谢谢我认为界面可能是一个很好的解决方案 您可以创建一个iPauseAvailable接口,并让您想要暂停的任何东西实现iPauseAvailable接口,这样您订阅PauseManager等的每个对象都可以被同样对待 public interface IPausabl

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

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

  • 使用
    FindObjectsOfType()
  • Pauser
    类上执行暂停操作,并获取每个可以暂停的对象,然后订阅它
  • 我知道这两种方法都可以很好地工作,但我不知道应该选择哪一种


    谢谢

    我认为界面可能是一个很好的解决方案

    您可以创建一个iPauseAvailable接口,并让您想要暂停的任何东西实现iPauseAvailable接口,这样您订阅PauseManager等的每个对象都可以被同样对待

    public interface IPausable{
      // interface members
      void Pause();
      bool isPaused();
      void UnPause();
     }
    
    然后,您可以遍历订阅对象的列表,并执行以下操作(未测试的伪代码,以显示想法)

    for(int i=0;i
    这样做的好处是,任何实现ipaausable的类都必须提供它们将如何执行这些方法,并且它们都可以以相同的方式处理,因此,无论是字符还是屏幕计时器(如果它实现了接口),您知道您在某个时候提供了暂停特定对象的方法


    要直接回答最初的问题,我会投票支持订阅者/发布者方法(2),因为第一个选项会让你在每个对象上循环,有些对象根本不可暂停,如果您选择第二条路线,您将只对需要暂停的对象进行操作,而不是对场景中的每个对象进行迭代。

    如果您只是在寻找快速而肮脏的对象,则
    Time.timeScale=0
    可能符合您的目的。不过,这并不能解决所有问题。在这里寻找更强劲的产品,谢谢你的建议。嘿,Pheonix2105,谢谢你的回答。我选择我的第一个解决方案主要是因为1。在我的例子中,所有需要暂停的内容都将出现在活动场景中。2.只有游戏管理器类可以调用Pause方法。
       for (int i = 0; i< subScribedComponents.Length; i++)
       {
            if (subScribedComponents[i] is IPausable)
           {
                IPausable pauseInterface = subScribedComponents[i] as IPausable;
    
                pauseInterface .Pause();
            }
        }