Unity各种功能实现之⼀:对话系统
最近根据⽹上的教程学习了⼀下Unity中的对话系统,将其中⼀些关键点记录下来作为参考,以后可在此基础上添加更多功能。
1.UI部分的设置。
对话框由⼀个panel下⾯的text和image组成。canvas的render mode推荐设置为World Space,因为这样可以⽅便使对话框随意设定位置
2.TextAsset
TextAsset是Unity⽤来导⼊⽂本⽂件的⼀个格式。当你拖⼊⼀个⽂本⽂件到你的项⽬时,他会被转换为⽂本资源。⽀持的⽂本格式有:
· .txt、.html、.htm、.xml、.bytes、.json、.csv
TextAsset中有⽤的属性是TextAsset.Text。这个属性是string类型,⽤来访问TextAsset中的全部⽂本。
3.DialogueSystem脚本构建
public Text text;
public Image Image;
public TextAsset textAsset;
List<string> textList = new List<string>();
int index = 0;
public float time;
unity 教程bool textFinished;
bool cancelTyping;
public Sprite face1, face2;
简单来说,实现基础对话框需要以上⼏个要素,即需要显⽰的完整⽂本内容textAsset,每⼀次对话框能显⽰的内容textList,需要切换的⼈物头像face1,face2等。
最基础的对话系统需要实现:
1. 将textAsset中的内容按⼈物分段显⽰,同时根据说话⼈切换头像
2. ⽂字内容快速逐字显现
3. 玩家可通过按键跳过前⾯第⼆条,⽴刻显⽰当前⼈物要说出的完整句⼦
TextAsset中的内容⼀般按⼀下格式来编辑:
A
XXX,XXXXXXXXX
B
XXXXXXXXXXXXXXXX!
故在初始化时⽤如下⽅法分割⽂本内容并保存到textList中:
void GetTextFromFile(TextAsset file)
{
textList.Clear();
index = 0;
var linedata = Split('\n');
for (int i = 0; i < linedata.Length; i++)
{
textList.Add(linedata[i]);
}
}
上⾯第⼆点⽂字的逐字出现⽤协程实现,具体代码如下,其中的bool变量textFinished是⽤来控制同⼀时间只有⼀个相关协程在运
⾏,float变量time控制⽂字显⽰的快慢:
IEnumerator SetTextUI(float time)
{
textFinished = false;
< = "";
switch (textList[index])
{
case"A":
Image.sprite = face1;
index++;
break;
case"B":
Image.sprite = face2;
index++;
break;
}
int letter = 0;
while(!cancelTyping && letter <textList[index].Length -1){
< += textList[index][letter];
letter++;
yield return new WaitForSeconds(time);
}
< = textList[index];
cancelTyping = false;
index++;
textFinished = true;
}
第三点跳过逐字显⽰直接显⽰完整内容是通过bool变量cancelTyping来帮助实现
void Update()
{
if (Input.GetKeyDown(KeyCode.Space) && index == textList.Count)
{
index = 0;
gameObject.SetActive(false);
return;
}
if (Input.GetKeyDown(KeyCode.Space))
{
if (textFinished && !cancelTyping)
{
StartCoroutine(SetTextUI(time));
}
else if (!textFinished)
{
cancelTyping = !cancelTyping;
}
}
}
cancelTyping默认为false,当textFinished为false,即协程正在进⾏时改变cancelTyping为true即可中断协程。
以上只是基础功能,后续还可以根据需要加上⽐如按键直接退出对话窗⼝等功能。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论