Unity Text实现对话动画效果
- 效果如下
- 步骤如下
- UI界面的设计
- 对话文件的准备
- 脚本
- 总结
效果如下
如果这是你想要实现的效果的话请好好观看这篇文章吧,一定有所收获
步骤如下
UI界面的设计
一个Image和一个Text即可
你可以更改对话板的背景图片,可以调整text文字的字体和大小
我这里将text勾选了Best Fit
对话文件的准备
首先在你的桌面上创建一个Text文件,让后将该文件拖到Assets里
然后你打开该文件,你就可以编写你所需要的对话内容了
以上就是准备工作了,下面开始脚本的书写
脚本
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class talk : MonoBehaviour
{
/// <summary>
/// texttAsset是Unity里的text文件的意思,其中有个.text的api可以将文件中转换成string字符串
/// </summary>
public TextAsset talkFile;
/// <summary>
/// 显示文本的text
/// </summary>
private Text talkText;
/// <summary>
/// 显示文字的速度
/// </summary>
public float talkSpeed;
/// <summary>
/// 文件中的内容
/// </summary>
private string word;
/// <summary>
/// 将每行内容存储到集合里面,然后依次读取赋值给text
/// </summary>
private List<string> readLine=new List<string>();
/// <summary>
/// 集合的下标,用于判断是否读取完,读取完后再关闭对话
/// </summary>
private int index;
/// <summary>
/// 判断一句话是否显示完,显示完才可以进行下一句显示。
/// 主要来防止快速点击对话键来影响动画的混乱
/// 当然你可以在加一个按下空格直接将这句话直接显示出来的功能
/// </summary>
private bool isFinishi = true;
private void Awake()
{
talkText = GetComponent<Text>();
talkText.text = "";
word = talkFile.text;
var line = word.Split('\n');//因为文件是以回车形式分割对话的
foreach (var VARIABLE in line)
{
readLine.Add(VARIABLE);
}
}
// Update is called once per frame
void Update()
{
if (index == readLine.Count && Input.GetKeyDown(KeyCode.R))
{
talkText.text = "";
index = 0;
}
if (Input.GetKeyDown(KeyCode.R) && isFinishi)
{
StartCoroutine(WaiteLine());
}
}
IEnumerator WaiteLine()
{
talkText.text = "";//将上一句话清空
isFinishi = false;
for (int i = 0; i < readLine[index].Length; i++)//这里是将string一句话分成一个个的字来添加到talkText里面
{
talkText.text += readLine[index][i];
yield return new WaitForSeconds(talkSpeed);
}
index++;//进行到下一句话
isFinishi = true;
}
}
该脚本在Text下挂载
效果就是上面的案例效果了。
总结
该功能我也顺带一些对话效果的功能,比如当你控制玩家到一个NPC下,可以按下R键产生对话框显示然后就是下面的对话内容。同时你也可以添加显示人物头像的功能,在Image下面添加一个HeadImage,通过在对话文件设置AB,当读到的是A时显示玩家的头像照片,B的话显示NPC的头像。其他功能待大家自主开发。
希望大家在学习的路上乘风破浪~~~~~