unity3d - unity:场景间持久化实用建议
问题描述
所以我做了很多研究,长话短说决定用 dontdestroyonload 做一个游戏管理器来保持持久性。
有很多教程,但我是新手,在实际实现这一点时我有很多问题。当你只有一个玩家角色时这很容易,但我的游戏有一群玩家,他们的预制件只需要在战斗中生成,然后当战斗结束时,我不需要他们的模型......只是他们的统计数据。
因此,如果我将所有党员附加到游戏管理器,它将保留他们的统计数据,但也会保留其他所有内容:模型、战斗脚本等。我只需要保留他们的统计数据。那么其他人在实践中是如何做到的呢?
我正在考虑添加代码来销毁我不需要的脚本和组件,然后在触发战斗时重新附加它们,但我只是觉得它很老套,而且我错过了一个更好的解决方案。我看过专业包,但从未见过有人这样做,就像他们将统计数据存储在其他地方并在战斗中生成预制件一样。
解决方案
为什么这段代码需要附加到游戏对象上?
没有理由扩展MonoBehaviour
“存储数据”并将其附加到游戏对象(然后永远不会被销毁)的东西。这是 Unity 新手的结果,每次您创建脚本时,Unity 都会自动扩展它MonoBehaviour
,您会认为一切都必须附加到游戏对象并像对待一个游戏对象一样对待。你不必这样做。这是一个不扩展任何东西的类(它实现了 ISerializable,但这与这里无关)。
相反,您可能想要研究可编写脚本的对象,或者有一些其他方法来存储玩家数据(例如,您的GameManager
类可能是带有静态instance
引用的单例)。最适合您的项目的方法主要取决于您:您最了解自己的目标,您需要评估您的选择并找出最适合您的方法。
推荐阅读
- javascript - Problem with justifying text bubbles in React chat app
- laravel-5 - assign and return specific data based on user role
- apache-spark - Kubernetes 上的 Spark:spark-local-dir 错误:已经存在/不唯一
- sql-server - ODBC connection fails when running with SQL Server Agent
- javascript - React and JSX plus Hiccup custom implementation
- amazon-s3 - 向反映 Glue 事件(即作业运行)的 Redshift 数据集添加“审计”信息
- flutter - 选择的图像不通过 GetX 显示
- java - 在 Excel 单元格中写入时,所有列都以字符串形式返回
- php - Wordpress 如何将 user_meta 数组显示为表格?
- vue.js - 使用带有 Vue2 的 Composition API 进行存储