这个是根据网上unity GUI打字机教程修改的
原教程是JS,我给改成了C#,然后增加了许多功能
这个教程能实现一段文字对话,有打字机显示效果,能写许多对话,能快进对话,总之现在RPG游戏里有的功能都实现了
直接代码,转载请声明转载自http://www.cnblogs.com/suxsho/
---------------------------------------------
using UnityEngine; using System.Collections; //----------------------------------------------------- // 对话效果 //----------------------------------------------------- public class printTest : MonoBehaviour { float letterPause = 0.3f; //时间间隔 private string word; //存储输出文本 private string printText; //打印的字 private int i, j = 0; //设置第几句话,以及判断是否出现新的语句 //----------------------------------------------------- // 剧本(每句后面加上,) //----------------------------------------------------- private string[] Text = { "这是一个古老的传说.......", "世界上每隔几百年就会出现想毁灭世界的恶魔", "而此时,也总会出现一个勇者消灭邪恶", "世界已经和平很久了....", "随着工业革命、世界大战的到来,人类科技得到了飞速发展", "随着科学的进步,无神论相继而来", "毁灭世界的恶魔,这只会是一个神话", "没有人相信这种奇幻故事中的东西会出现在真实的世界", "但是,突然有一天.......", "天空中出现了一个巨大的漩涡,世界各地都开始了灾难", "科学家无法用现有的科技证明灾难的原因", "世界陷入混乱,人们惊慌失措", "整个世界就如末日到来", "此时,有人想起了恶魔的传说", "但是,这个时代已经没有了勇者", "然后.......", "世界就毁灭了,啊我编不出来了w", }; // Use this for initialization void Start() { textChange(); } void OnGUI() { GUI.Label(new Rect(Screen.width / 2 - 250,Screen.height / 2 - 25 , 500 , 50), printText); } // Update is called once per frame void Update () { if (Input.GetMouseButtonDown(0)) { //检测对话显示完没有 i = j 就是还没有显示完 if (i == j) { letterPause = 0.0f; //加快显的速度,让对话速度显示完 } else { //检测对话语句是否超出了最大限制,超出了就DO STH. if (i < Text.Length - 1) { letterPause = 0.3f; i++; textChange(); } else { //DO STH. } } } } /**切换语句功能*/ void textChange() { word = ""; word = Text[i];//把你输出的字先赋值给word printText = "";//把你要显示的字先抹除,以便你可以在最初显示的时候显示为空,当然你也可以加上其他字,让他先显示,打字机效果打的字会显示在这个后面 StartCoroutine(TypeText()); } /**输出文本功能*/ IEnumerator TypeText() { foreach (char letter in word.ToCharArray()) { printText += letter;//把这些字赋值给Text yield return new WaitForSeconds(letterPause); } printText += " ▼"; //标记可按键的提示 j++; //避免出现下一句不显示的情况将对话记录+1 } }