Unity中是否有针对“单人游戏”(永久GameObjects)的最佳实践? - c#

实际上,我对Unity和C#还是陌生的!

我现在正在做的是:

我有一个名为“ GameObject”的“ Singleton”(不是单身汉,但这不是重点),我的GameManager脚本附加了包含大部分游戏信息(该教程文本已经显示,用于加载本地化文本的功能,最后一个场景已加载...)
作为此GameManager.cs对象的子代,我有多种我不想在加载时销毁的GameObject,例如后处理配置文件,Global Lights,音频管理器,UI Canvasses(canvi?)等。

关于Unity有很多很棒的教程,这是一个很棒的社区,但是我真的找不到关于GameObjects管理的Unity“最佳实践”的任何信息。

这是正确的方法吗?将来使用这种方法会有问题吗?我是否应该制作一个实现Unity GameManager的通用类,并让我想要保留的对象从该类继承?有没有更好的办法?

目前它可以正常工作,但是我想确保自己不会以错误的方式进行操作,并且有可能破坏我游戏的性能或稳定性。

提前谢谢了。

参考方案

这里有两种最佳实践。

建立许多单例,并替换Unity的内置初始化系统
建立很少的单例,并在Unity的初始化系统中工作,并大量使用新的Multi-Scene Editing系统。

选项1在游戏工作室和专业游戏开发人员中很受欢迎,他们擅长于此并且已经做过很多次了。主要问题是,一旦您开始使用此方法,便会开始维护自己的并行init系统。主要优点是您的系统可能比Unity内部系统更好,更强大,并且通常更快(!)。

选项2在游戏编程新手中更受欢迎,他们希望尽可能多地使用Unity的内置功能。

也就是说,您的问题中有一些奇怪的事情。

例如...帆布?为什么在地球上您会尝试将Canvas变成单例?这表明您在很大程度上滥用了Canvas(可能还有其他一些类)。

标准方法(也是Unity支持的唯一方法)是使每个Scene都有自己独特的Canvas。做一些不同的事情……很奇怪。

我怀疑您误解了“ DontDestoryOnLoad”的作用。它不能防止物品在负载下被破坏!

相反,它可以防止在加载新场景时将其销毁,并且它们仅生活在旧场景中。更好的名称是:“ DontDestroyWhenLoadingANewScene”

使用DontDestroyOnLoad的Unity中有很多错误(要追溯很多年),因此通常最好尽可能避免。在简单的情况下,它可以很好地工作,但是如果使用过多,则会遇到复杂的极端情况,并且会与Unity自己的内部类进行交互。

LeetCode题解计算机为什么是基于二进制的?

可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制

LeetCode题解统计城市的所有灯泡

这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…

LeetCode题解黑白圆盘

一个圆盘被涂上了黑白二色,两种颜色各占一个半圆。圆盘以一个未知的速度、按一个未知的方向旋转。你有一种特殊的相机可以让你即时观察到圆上的一个点的颜色。你需要多少个相机才能确定圆盘旋转的方向?题解:可以用一个相机即可

LeetCode题解圆上任取三点构成锐角三角形的概率

来自字节跳动的一道几何题题解:1/4

LeetCode题解深度优先遍历和回溯的关系?

深度优先遍历的范围更大还是回溯的范围更大?为什么?题解:我的理解是:dfs是回溯思想的一种体现- 回溯:是在整个搜索空间中搜索出可行解,在搜索过程中不断剪枝回退,这是回溯的思想,这个搜索空间并没有限制于特定的数据结构。- dfs:dfs是指特定的数据结构中如图,树(特殊的图)中搜索答案,范围限制在了特定的数据结构。个人拙见。