我正在制作一本视觉小说,我的游戏使用一些自定义类来存储重要数据。
示例:
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
}
这个“语音”类不应该在运行时被更改,只需要在对话过程中被读取。
我的问题是:存储这类数据的一般良好实践方法是什么?我对统一性相当陌生,唯一能做到这一点的方法就是声明一个单行为类的列表,并通过检查器编辑它们,但这似乎并不是在一个有1000+不同“演讲”的游戏中处理这个问题的有效方法。
Ps:不要介意所有的变量都是公开的,它们现在是这样使开发的某些部分变得更容易,我会在时机成熟时改变必要的部分。
发布于 2020-08-12 16:56:34
有几种很好的方法来存储这些信息,特别是如果你也在本地化它们的话。本质上,您将存储引用各种字符串的ID,该ID将是跨语言文件的常量。
基本上,您可以使用一些电子表格软件(比如Google ),并将所有的演讲都放在那里;一个列表示字符串的ID,一个列表示实际值。您可以将工作表导出为CSV文件,并将其加载到Unity中。然后,您可以编写一些简单的解析代码来读取文件中的每一行,然后将ID和值拆分,并将其存储在字典中。
使用JSON,如果您正确地构建了JSON,您可以使用在JSON实用程序中构建的Unity或其他更好的工具直接将数据读入C#对象类中。一段解释这一点的像样视频可以在这里上找到。
YAML与JSON基本相同,但括号较少。它也是统一用于序列化的格式。但是,您只能通过编写自己的解析器或使用第三方解析器来使用这种格式,因为没有内置的解析器。
目前,JSON文件通常是数据存储的行业标准,但最终取决于您认为最容易使用哪种格式。我试着按照从文件中添加和删除字符串的简单程度来列出这些字符串。
发布于 2020-09-17 07:44:55
你为什么不直接使用ScriptableObject
呢?这是统一在游戏中存储数据的默认方式。您也可以从Unity编辑它,而不是使用其他外部编辑器。你也可以拖放任何资源从游戏项目的文件夹到它(例如。头部的纹理,整个局部的刺痛数据,对话音频剪辑等)
发布于 2020-08-12 16:45:50
--您不应该在c#代码中存储大量数据--使用为数据设计的外部文件,方法是创建JSON文件、XML文件或任何其他类型的人和计算机可读的格式。
XML应该是您使用的最佳选择,它广泛用于对话树。
下面是您可以在usecase中使用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>
使用XML相当简单,非常适合对话
https://stackoverflow.com/questions/63384593
复制