C# 在Unity中存储只读数据的良好实践
我正在制作一部视觉小说,我的游戏使用了一些存储重要数据的自定义类 例如:C# 在Unity中存储只读数据的良好实践,c#,class,unity3d,localization,storage,C#,Class,Unity3d,Localization,Storage,我正在制作一部视觉小说,我的游戏使用了一些存储重要数据的自定义类 例如: public class Speech { public Sprite CharacterHead; // Holds a reference to a sprite which is the "head" of who's currently speaking public LocalizedString SpeechOrigin; // Holds a reference t
public class Speech
{
public Sprite CharacterHead; // Holds a reference to a sprite which is the "head" of who's currently speaking
public LocalizedString SpeechOrigin; // Holds a reference to a localizedstring that is what that character is saying based on the language. (Uses Unity.Localization)
public string Name; // the name of the character that is speaking
}
此“Speech”类在运行时不应更改,只需在对话期间读取
我的问题是:存储此类数据的一般良好做法是什么?我对unity还相当陌生,我发现唯一能做到这一点的方法是在MonoBehavior类上声明一个列表,并通过Inspector进行编辑,但在一个将有1000多个不同“语言”的游戏中,这似乎不是一种有效的处理方法
Ps:不要介意所有的变量都是公共的,现在这样做是为了简化开发的某些部分,到时候我会更改必要的变量。您不应该在c代码中存储大量数据使用为数据设计的外部文件,通过创建JSON文件、XML文件、,或任何其他类型的人类和计算机可读格式 XML应该是您用例的最佳选择,它广泛用于对话树 下面是一个在用例中使用XML可以做什么的示例
<npcs>
<npc name="Oren">
<dialogue>
<text>Hi #{PlayerName} do you want to eat falafel? </text>
<options>
<option action="yes">yes, I would like</option>
<option action="no">no...</option>
</options>
</dialogue>
</npc>
</npcs>
嗨#{PlayerName}你想吃沙拉三明治吗?
是的,我想要
不
使用XML非常简单,而且非常适合对话有几种很好的方法来存储这些信息,特别是如果您也在本地化这些信息的话。从本质上讲,您将存储一个用于引用各种字符串的ID,该ID在语言文件中保持不变
JSON文件目前通常是数据存储的行业标准,但最终取决于您认为最容易使用的格式。我试着按照从文件中添加和删除字符串的容易程度来列出它们。为什么不直接使用
ScriptableObject
?这是Unity在游戏中存储数据的默认方式。您也可以从Unity编辑器编辑它,而不使用其他外部编辑器。您还可以将游戏项目文件夹中的任何资源拖放到其中(例如头部的纹理、作为数据的整个本地化刺、对话音频剪辑等)
谢谢!您的建议正是我所需要的,我在这一部分停留了一段时间,我正在寻找您提供的起点。谢谢您,我将对此进行研究。