这个是根据网上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 = ; //设置第几句话,以及判断是否出现新的语句
//-----------------------------------------------------
// 剧本(每句后面加上,)
//-----------------------------------------------------
private string[] Text =
{
"这是一个古老的传说.......",
"世界上每隔几百年就会出现想毁灭世界的恶魔",
"而此时,也总会出现一个勇者消灭邪恶",
"世界已经和平很久了....",
"随着工业革命、世界大战的到来,人类科技得到了飞速发展",
"随着科学的进步,无神论相继而来",
"毁灭世界的恶魔,这只会是一个神话",
"没有人相信这种奇幻故事中的东西会出现在真实的世界",
"但是,突然有一天.......",
"天空中出现了一个巨大的漩涡,世界各地都开始了灾难",
"科学家无法用现有的科技证明灾难的原因",
"世界陷入混乱,人们惊慌失措",
"整个世界就如末日到来",
"此时,有人想起了恶魔的传说",
"但是,这个时代已经没有了勇者",
"然后.......",
"世界就毁灭了,啊我编不出来了w",
}; // Use this for initialization
void Start()
{
textChange();
} void OnGUI()
{
GUI.Label(new Rect(Screen.width / - ,Screen.height / - , , ), printText);
} // Update is called once per frame
void Update ()
{
if (Input.GetMouseButtonDown())
{
//检测对话显示完没有 i = j 就是还没有显示完
if (i == j)
{
letterPause = 0.0f; //加快显的速度,让对话速度显示完
}
else
{
//检测对话语句是否超出了最大限制,超出了就DO STH.
if (i < Text.Length - )
{
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
}
}