在Unity中一些剧情需要让Text中的文字一个一个的显示,每个字体显示有需要有间隔时间。在熟知的方法中使用DoTween插件中的DOText方法是最简单的,我们只需要调用DOText方法在里面传入参数就可以了。但是DOText方法在只有一句话的时候是没有问题的,如果剧情长的话,使用DoText就不会很灵活。所以今天写了一个使用代码来控制的方法,也非常的简单,很好理解。直接上代码:
下面展示一些 内联代码片
。
Text hint_txt;
[SerializeField]
List<string> hintList = new List<string>();
int i = 0;
int index = 0;
bool isok = false;
// Start is called before the first frame update
private void Awake()
{
hint_txt = GetComponentInChildren<Text>();
}
void Start()
{
StartCoroutine(aa());
//XXXX年X月X日,某国,两方政治势力争夺权力,身处高官的张三被对头冤枉即将审判入狱,弟弟李四接到消息以后要赶回国内拯救哥哥......
//你需要找到张三的位置并找到钥匙打开相对应的门把哥哥救出来,请注意躲避守卫。(注意看门的颜色与钥匙的颜色哦!!)
//你需要找到张三的位置并找到钥匙打开相对应的把哥哥就出来。(注意看门的颜色与钥匙的颜色哦!!)
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
isok = true;
}
if (Input.GetKeyDown(KeyCode.KeypadEnter))
{
hint_txt.text = "";
StartCoroutine(aa());
}
}
IEnumerator aa()
{
while (!isok && index < hintList.Count&&i<hintList[index].Length)
{
hint_txt.text += hintList[index][i].ToString();
i++;
yield return new WaitForSeconds(0.1f);
}
hint_txt.text = hintList[index];
isok = false;
index++;
i = 0;
}
首先 我们先要有一个保存对话的List,我们知道string类型也是一个数组类型 我们可以使用[]+索引来访问string中的元素,index表示我们访问的是List中的第几句话,i表示我们访问这句话中的第几个元素。使用while循环来判断不让索引来超出List的长度,如果满足条件使用Text组件+=就好了,每个字与每个字的间隔时间为0.1秒,我们使用协程来控制。当按下空格的时候直接跳过,显示全部的对话,当按下回车开始下一句对话,非常的简单实用。