首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态创建可保存字符的最佳实践

动态创建可保存字符的最佳实践
EN

Stack Overflow用户
提问于 2019-07-06 18:13:10
回答 1查看 436关注 0票数 0

我有一个基于党的游戏,玩家可以有1至8个字符。我正在尝试创建一个合理的、优雅的系统来存储这些角色的统计信息,更重要的是,存储它们的可脚本化对象的清单。

目前,我使用的是一个序列化的脚本,其中包含游戏中的角色对象列表,这些对象只是附加了CharacterInventory脚本的空游戏对象。

我想动态生成CharacterInventory脚本,这样我就可以根据需要生成额外的字符。我不知道如何将脚本的各个实例添加到可保存列表中。我知道脚本不能实例化。

我可以通过脚本创建一个空的游戏对象,并在创建过程中将脚本添加到其中,但是有没有更好的解决方案呢?

假设可脚本化对象也应该包含更多动态变化的可脚本化对象的列表,那么可脚本化对象是否适用于角色?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-06 23:07:18

您可以遵循的一条一般规则是,您应该将DataViews分开。

我不建议您将ScriptableObject作为唯一的数据源,因为它有一些限制。它只能序列化Unity为你做的数据。但是使用下面的方法,你几乎可以存储任何你想要的东西。

您可以或应该使用ScriptableObject,但当与files等其他数据源一起使用时,它将更加强大。

然后,您可以轻松地保存和加载数据。

使用MonoBehavious作为视图层,使用普通的c#脚本作为数据层。

例如,考虑以下数据类:

代码语言:javascript
复制
public class CharacterModel
    {
        public string Name;
        public int Level;
        public List<string> Inventory;
    }

这是View类:

代码语言:javascript
复制
public class Character : MonoBehaviour
    {
        private CharacterModel model;

        public void Save()
        {
            // I would use Json.net to serialize the model
            // Note: this is just a simple and non-efficient of saving all characters
// data, don't use it in production
            PlayerPrefs.SetString(model.Name, JsonConvert.SerializeObject(model));

        }

        public void Load(string characterName)
        {
            model = JsonConvert.DeserializeObject<CharacterModel>(PlayerPrefs.GetString(characterName));
        }
    }

或者,可以将所有角色保存为单个file,并在场景初始化期间填充主ScriptableObject

基于这种思想,您可以随时保存所有字符,并在需要加载字符数据时填充characters scriptable对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56913124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档