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();
}
}