Unity3D仿仙剑对话系统开发

来源:互联网 发布:柴鸡蛋逆袭网络剧下载 编辑:程序博客网 时间:2024/05/10 03:41

一、首先在场景创建一个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

1 0
原创粉丝点击