一、靠近NPC触发对话框
想要完成靠近人物后,屏幕上出现NPC的名字,点击后可以与其进行对话这一效果,很简单,首先需要在NPC周围创建一个空物体,并将其“Is trigger”打上,当玩家触碰到这一空物体后,就可以激活选项并开始对话,想要实现这一效果只需要为空物体脚本上OnTriggerEnter()方法和OnTriggerExit()方法即可。
二、读取txt文本
void GetTextFormFile(TextAsset file)
{
textList.Clear(); //清空对话框内容
index = 0; //回到目录第0行
var lineData = file.text.Split('\n');
//file.text:将file转化为txt文本转化为string字符形式
//.Spite切割,(‘\n’):按行切割,\n为换行
//var临时变量,匿名类型,自动识别数据类型
foreach(var line in lineData) //foreach用以处理场景中所有对象
{
textList.Add(line); //每一行加到列表当中
}
}
这种情况只需要在txt文件中将需要展示的对话分段依次写下即可,非常方便
三、对话文字一一显现
大多数游戏的对话中,文字都是一个一个地出现,这样可以减轻玩家的阅读压力,更好的带入其中,也可以根据不同玩家的需求,按下快捷键,立刻结束当句对话,让文字不在一一弹出而是立刻显现所有,而这只需要用到C#中的协程
IEnumerator携程,可以依次执行容器中的函数,其实就是将函数进行分块处理,实现逐字显示Unity中的协程方法通过yield这个特殊的属性可以在任何位置、任意时刻暂停。也可以在指定的时间或事件后继续执行,而不影响上一次执行的就结果,yield后的代码会被挂起,先执行前面的内容
IEnumerator SetTextUI()
{
textFinished = false;
textLabel.text = ""; //最开始显示空白
int letter = 0; //letter为第几个字
while (!cancelTyping && letter < textList[index].Length - 1)
{
textLabel.text += textList[index][letter];
letter++;
yield return new WaitForSeconds(0.1f); //等待时长
}
textLabel.text = textList[index];
cancelTyping = false;
textFinished = true;
index++;
}