前言
本文承接上篇
Excel与Unity工作流(二):基础对话框架
上篇中虽然可以在Excel中实现一部分的变量赋值与判断,但需要在代码中根据文本意义对应属性。本文将扩大Excel的功能,利用Excel直接实现变量导入、调用与赋值
又因为在Excel中实现了一个变量的导入、调用与赋值,所以可以实现一定程度上的无代码编程(让不懂编程的朋友也可以直接进行变量配置与判定赋值了)
变量表导入表示例
变量表在对话中的使用示例
整体框架与使用说明
- 首先需要在变量表导入中填写需要使用的变量,并导入这个文件
- 接着再根据变量表里面的名称写入对话表
变量的导入表
变量有三种类型,分别为"int",“float”,“string”,对应整数、小数和字符串
每一行可以导入多个变量,变量与变量之间用"&"进行分隔
导入对话文本
在"效果"列中使用
大致格式与上篇同
值的增加
格式为"类型@变量名+改变的值"
int与float类型都可以加负值
string类型的"+“标志在原有的字符串后加新的内容
“string@objName+5”:如果原本的objName变量值为"book”,那么更改后,它的值为"book5"
赋值
同时这里还定义了一个新的运算符"=“,可以直接进行赋值
格式为"类型@变量名=要赋的值”
举例:“string@objName=book1” “int@objNum=0”
在"判定"列中使用
大致格式与上篇同
格式为"类型@变量名>值"
int与float类型都可以与负值比较
string类型:“string@变量名>值"只有变量名的内容恰好等于值的内容才会跳转到第一个,否则就是第二个;
举例:判定列"string@objName>book”,跳转列"1&2" 只有objName为book时才会跳转1,不等于就跳转到2;注意 >符号后面是没有双引号的
在"内容"列中使用
要在内容中插入变量表的值,需要在变量外面增加一个"<>“来辅助替换
脚本会自动识别"内容"列中的变量名,并替换成他们的值显示出来
格式为”<类型@变量名>"
实现
变量导入表
导入
//读取Chat变量表
void LoadChatValues()
{
textAsset = Resources.Load<TextAsset>(chatValuesPath);
content = textAsset.text;
//content = Encryption.Decrypt(content);
dialogRows = content.Split('\n');
cells = new string[dialogRows.Length][];
for (int i = 0; i < dialogRows.Length; i++)
{
cells[i] = dialogRows[i].Split(',');
}
ChatValuesShow();
}
public void ChatValuesShow()
{
bool isValuesLoaded = false;
bool isKeyLoaded = false;
if (intValuesKey != null)
{
isKeyLoaded = true;
}
for (int i = 1; i < dialogRows.Length - 1; i++)
{
switch (cells[i][1])
{
case "int":
string[] s = cells[i][0].Split('&');
for (int j = 0; j < s.Length; j++)
{
if (!isValuesLoaded)
{
AddIntChatValues(s[j]);
}
else if (!isKeyLoaded)
{
AddIntChatValuesKey(s[j]);
}
}
break;
case "float":
string[] s1 = cells[i][0].Split('&');
for (int j = 0; j < s1.Length; j++)
{
if (!isValuesLoaded)
{
AddFloatChatValues(s1[j]);
}
else if (!isKeyLoaded)
{
AddFloatChatValuesKey(s1[j]);
}
}
break;
case "string":
string[] s2 = cells[i][0].Split('&');
for (int j = 0; j < s2.Length; j++)
{
if (!isValuesLoaded)
{
AddStringChatValues(s2[j]);
}
else if (!isKeyLoaded)
{
AddStringChatValuesKey(s2[j]);
}
}
break;
}
}
}
存储 设置 获取
[Header("对话用到的变量表")]
[SerializeField] List<int> intValues;
[SerializeField] List<float> floatValues;
[SerializeField] List<string> stringValues;
List<string> intValuesKey;
List<string> floatValuesKey;
List<string> stringValuesKey;
public int GetIntValues(string key)
{
if