动态创建可保存字符的最佳做法



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

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

我想动态制作 CharacterInventory 脚本,以便我可以根据需要制作额外的字符。我无法弄清楚如何将脚本的各个实例添加到可保存列表中。我知道脚本不能实例化。

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

可编写脚本的对象是否适用于字符,因为它们应该包含更多动态更改的可脚本对象的列表?

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

我不建议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并在场景初始化期间填充您的主ScriptableObject

基于这个想法,您可以随时保存所有字符,并在要加载字符数据时填充字符脚本对象。

相关内容

  • 没有找到相关文章

最新更新