一、首先在场景创建一个Cube,把下面代码给它挂上,
using unityEngine;
using System.Collections;
public class Npc : MonoBehaviour {
public TextAsset _mTextAsset;//文本资源
void OnMouseDown()
{
Dialogue.share.CreateDialogue(_mTextAsset);//创建一个对话
}
}
二、然后创建一个本地txt文件,里面的内容为:
云天河%梦璃……是你吗?%0
云天河%是你回来了吗?%0
柳梦璃%云公子……是我……%1
柳梦璃%云公子……你还好吗……%1
云天河%梦璃……我很好,你终于回来了……%0
柳梦璃%云公子,你的眼睛怎么了……%1
云天河%不碍事……倒是你,香味老远就闻到了……%0
柳梦璃%(哭泣)云公子……%1
云天河%回来就好…%0
我来解释下我这个文本的大意是:名字%对话的内容%头像的id
因为我利用了text里面的split功能,根据%号来切割每个字符串……觉得不懂得没关系,你按照这个格式,直接替换。或者可以联系我
值得注意的是:这里的txt文件要保存为UTF-8,不然是读取不到中文的。
再接着在Asset目录下创建Resources文件夹,在Resources下再创建一个Icon文件夹。然后放入两张头像图片,第一张是01是天河,第二张02是梦璃的。
三、最后,再创建一个空物体,命名为GameManager,把下面代码给它挂上
对了……我用到了doTween插件,所以,有插件的可以装进去,没有的可以联系我要哦,好了,写得不知怎样,太晚了,洗洗睡了……
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Collections.Generic;
using DG.Tweening;
/// <summary>
/// 这个类是控制对话系统
/// </summary>
public class Dialogue : MonoBehaviour {
public static Dialogue share;
public List<string[]> List_diaContents = new List<string[]>();//用来储存所有的对话内容
public Image dialogueBg;//对话款背景
public Text _textName;//对话人物的名字
public Text _textContent;//对话人物说的话
public Image _imageHead;//头像
public Sprite[] IconSprites;//所有头像集合
private bool isChat = false;//是否在对话
private int index;//对话内容的索引
private Tween tweenr;//对话款进入和离开屏幕的动画
void Awake()
{
share = this;
}
void Start () {
tweenr = dialogueBg.rectTransform.DOLocalMoveY(-150, 0.5f);//创建一个对话框动画(进入屏幕的动画)
tweenr.Pause();//设置动画一开始为暂停( DoTween插件,这方面不懂的可以联系我,互相学习:QQ:767726342)
tweenr.SetAutoKill(false);//设置动画为不自动销毁
IconSprites = Resources.LoadAll<Sprite>("Icon");//首先获取所有的头像集合
}
void Update () {
if (isChat)//当打开了对话时
{
if (Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space))//如果按下鼠标左键或空格键
{
if (index >= List_diaContents.Count)//当对话到了最后一句话
{
tweenr.PlayBackwards();//倒放对话框动画
index = 0;
isChat = false;//关闭对话
}
else {
_textName.text = List_diaContents[index][0];//显示对话的人物名称
_textContent.text = List_diaContents[index][1];//显示对话的内容
int i = int.Parse(List_diaContents[index][2]);
_imageHead.sprite = IconSprites;//显示头像
index++;//当前对话内容的索引
}
}
}
}
/// <summary>
/// 创建一个对话
/// </summary>
/// <param name="_mTextAsset">文本资源</param>
public void CreateDialogue(TextAsset _mTextAsset)
{
if (isChat) return;
List_diaContents.Clear();//每次都清空对话List
isChat = true;
//初始化文本资源里面的对话内容
string[] textAll = _mTextAsset.text.Split('\n');//先根据换行符切割出每一行文字
for (int i = 0; i < textAll.Length; i++)//遍历每一行
{
string[] contents = textAll.Split('%');//根据 % 切割出三个 0.名字 1.说的话 2.头像
List_diaContents.Add(contents);//把名字 对话 头像 存进List
}
tweenr.PlayForward();//播放对话框进入屏幕的动画
}
}
转帖:http://www.manew.com/thread-90816-1-1.html