c# - 动态创建可保存字符的最佳实践
问题描述
我有一个基于派对的游戏,玩家可以有 1 到 8 个角色。我正在尝试建立一个合理、优雅的系统来存储这些角色的统计数据,更重要的是,它们的可编写脚本对象的清单。
目前,我正在使用一个包含游戏中角色对象列表的序列化脚本,这些角色对象只是带有 CharacterInventory 脚本的空游戏对象。
我想动态地制作 CharacterInventory 脚本,所以我可以根据需要制作额外的字符。我不知道如何将脚本的单个实例添加到可保存列表中。我知道脚本无法实例化。
我可以通过脚本创建一个空的游戏对象,并在创建过程中将脚本添加到其中,但是有没有更优雅的解决方案?
脚本对象是否适用于角色,因为它们应该包含更多动态更改的脚本对象列表?
解决方案
您可以遵循的一般规则是您应该将您的Data
和您的Views
.
我不推荐ScriptableObject
作为您唯一的数据源,因为它有一些限制。它只能序列化 Unity 为您执行的数据。但是通过以下方法,您几乎可以存储您想要的所有内容。
您可以或应该使用ScriptableObject
,但与其他数据源(如files
.
然后您可以轻松地保存和加载数据。
用作MonoBehavious
视图层和纯 c# 脚本用作数据层。
例如,考虑这个 Data 类:
public class CharacterModel
{
public string Name;
public int Level;
public List<string> Inventory;
}
这作为视图类:
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
,并在场景初始化期间填充您的 main ScriptableObject
.
基于这个想法,您可以随时保存所有字符,并在要加载字符数据时填充字符脚本对象。
推荐阅读
- python - Managing and plotting data over dateline
- eigen - 特征矩阵智能指针移动构造
- jquery - $.when() 相当于获取数据
- c# - 使用未分配的局部变量 - 但我知道当程序到达它时,它将被分配
- sql - oracle sql 正则表达式提取以后缀结尾的单词(.sh .py 等)
- mongodb - 使用 javascript 正则表达式的 Mongodb '$where' 查询
- c# - Visual Studio 2015。无法发布我的项目 - 似乎构建良好
- javascript - 检查 js 文件中的当前页面以呈现不同的部分
- linux - shell脚本中的意外令牌“完成”
- python - 十进制值的字符串,不四舍五入