Unity3d Unity,我应该将游戏引擎脚本附加到哪个对象

Unity3d Unity,我应该将游戏引擎脚本附加到哪个对象,unity3d,unity5,Unity3d,Unity5,我和我的朋友正在构建一个简单的空闲游戏,作为我们在unity中的第一个项目。 我们构建了一个脚本来处理所有计算,并与玩家看到的每个游戏对象进行通信 现在,我们应该把这个脚本附加到什么上 我们不希望使用游戏对象,因为: 1) GameObject将是一种过度杀伤力 2) GameObject位于我所有“物理”对象存在的空间中(这将是无用的,因为脚本不必“存在某个地方”) 第一次在stackoverflow中发布,如果我犯了任何错误,请告诉我^ ^惯例要求将其放在主摄像头或空的游戏对象上 如果你真的

我和我的朋友正在构建一个简单的空闲游戏,作为我们在unity中的第一个项目。 我们构建了一个脚本来处理所有计算,并与玩家看到的每个
游戏对象进行通信

现在,我们应该把这个脚本附加到什么上

我们不希望使用
游戏对象
,因为:

1)
GameObject
将是一种过度杀伤力

2)
GameObject
位于我所有“物理”对象存在的空间中(这将是无用的,因为脚本不必“存在某个地方”)


第一次在stackoverflow中发布,如果我犯了任何错误,请告诉我^ ^

惯例要求将其放在主摄像头或空的
游戏对象上

如果你真的不想做这两件事,你可以让你的类是静态的

如果您的类继承自
monobhavior
,则必须将其附加到
GameObject
。如果要将其附加到
游戏对象
,它必须继承自
monobhavior

如果您想更好地理解Unity方式,我建议您阅读实体组件系统:

GameObject
是实体

monobhavior
是组件


服务和管理器通常作为Unity中的组件实现,然后连接到主摄像头或以其命名的空
游戏对象。

您可以创建一个普通的单例类和“游戏初始值设定项”单例行为,它将初始化所有单例管理器、结构等

只需使用如下代码将此单一行为添加到空gameobject中的每个场景:

if(GameManager.instance == null)
   new GameManager();
或者对于scriptableObjects

if(GameManager.instance == null)
   gameManager.init()

另外,一个好的决策是使用实体系统模式,这里是unity框架(unity Ash、Entitas等)

也许这个问题应该在?这里没问题,因为它与编程有关。两个网站上都有很多Unity3D问题非常感谢^^所有这些信息都非常有用!我相信我们会简单地将脚本附加到相机上^^如果你要将脚本附加到一个空的游戏对象上,那么拥有一个单人游戏有什么意义?这没有意义当你切换场景时,游戏对象将以其所有的单一行为重新创建。即使使用DontDestroyOnLoad(),当所有管理器都是单行为时,要让它们只有一个实例并保存它们的状态也有点困难。此外,新的MonoBehavior可能需要时间来加载/GC,从而浪费cpu时间。使用
DontDestroyOnLoad()
并不困难,而且通过使用它,我可以确保我只有一个经理实例。不过,您还没有回答我之前的问题,您的回答似乎建议将singleton也作为一种
单一行为
附加到游戏对象。如果您想从编辑器中的任何场景启动游戏,DontDestroyOnLoad()是不够的。您还应该禁用所有“单实例单行为”的awake()调用—禁用一次要容易得多。此外,单行为为自动完成添加了许多字段,使self不便于用作管理器。我所知道的创建管理器的最佳方法是:1)一个单行为初始值设定项2)管理器,从ScriptableObject类扩展而来,带有指向self的静态链接、公共字段(填充了预置等)和您需要的方法。