当前位置:   article > 正文

Unity 实现简单的人物对话系统_unity剧情对话脚本

unity剧情对话脚本

原文博客地址:Unity3D仿仙剑对话系统开发_紫丶光的博客-CSDN博客

博客中有两处语法错误  切割文本内容的时候和创建头像的时候

创建一个cube作为点击NPC的人物对象(挂载NPC脚本) 

创建一个空物体  GameManager(挂载Dialog脚本) 

场景中创建一个对话背景Image 对话文本1(人物名字) 对话文本2(对话内容)  Image 人物头像   运行时点击Cube即可看见效果

对话文本内容如下,text文本保存格式一定是UTF-8 ,不然不会显示中文,创建好之后直接拖入Unity中即可使用

云天河%梦璃……是你吗?%0
云天河%是你回来了吗?%0
柳梦璃%云公子……是我……%1
柳梦璃%云公子……你还好吗……%1
云天河%梦璃……我很好,你终于回来了……%0
柳梦璃%云公子,你的眼睛怎么了……%1
云天河%不碍事……倒是你,香味老远就闻到了……%0
柳梦璃%(哭泣)云公子……%1
云天河%回来就好…%0

脚本代码:

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class NPC : MonoBehaviour {
  5. public TextAsset _mTextAsset; //文本资源
  6. private void OnMouseDown()
  7. {
  8. Dialog.share.CreateDialogue(_mTextAsset);
  9. }
  10. void Start () {
  11. }
  12. void Update () {
  13. }
  14. }

空物体上的脚本:

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. using DG.Tweening;
  6. public class Dialog : MonoBehaviour {
  7. public static Dialog share;
  8. public List<string[]> List_diaContents = new List<string[]>(); //用来存储所有的对话内容
  9. public Image dialogueBg; //对话款背景
  10. public Text _textName; //对话人物的名字
  11. public Text _textContent; //对话人物说的话
  12. public Image _imageHead; //头像
  13. public Sprite[] IconSprites;//所有头像集合
  14. private bool isChat = false; //是否在对话
  15. private int index; //对话内容的索引
  16. private Tweener tweener; //对话框进入和离开屏幕的动画
  17. private void Awake()
  18. {
  19. share = this;
  20. }
  21. void Start () {
  22. tweener = dialogueBg.rectTransform.DOLocalMoveY(-150, 0.5f).SetEase(Ease.InBack) .SetAutoKill(false);
  23. tweener.Pause(); //动画一开始设置为暂停
  24. IconSprites = Resources.LoadAll<Sprite>("Icon"); //获取所有头像集合
  25. }
  26. /// <summary>
  27. /// 创建一个对话框
  28. /// </summary>
  29. /// <param name="_mTextAsset">文本资源</param>
  30. public void CreateDialogue(TextAsset _mTextAsset)
  31. {
  32. if (isChat)
  33. {
  34. Debug.Log("111");
  35. return;
  36. }
  37. List_diaContents.Clear();//每次都清空对话 List
  38. isChat = true;
  39. //初始化文本资源里的对话内容
  40. string[] textAll = _mTextAsset.text.Split('\n');//先根据换行符切割出每一行文字
  41. for (int i = 0; i < textAll.Length; i++)
  42. {
  43. string[] contents = textAll[i].Split('%'); //根据%切割出三个 0 名字 1说的话 2头像
  44. List_diaContents.Add(contents); //把名字 对话 头像 存进List
  45. }
  46. Debug.Log("222");
  47. tweener.PlayForward(); //播放对话框进入屏幕的动画
  48. }
  49. void Update () {
  50. if (isChat) //当打开对话框时
  51. {
  52. if (Input.GetMouseButtonDown(0)||Input.GetKeyDown(KeyCode.Space))
  53. {
  54. Debug.Log("333");//
  55. if (index>=List_diaContents.Count) //当对话到了最后一步
  56. {
  57. tweener.PlayBackwards(); //倒放对话框动画
  58. index = 0;
  59. isChat = false;//关闭
  60. }
  61. else
  62. {
  63. _textName.text = List_diaContents[index][0]; //显示对话人物的名称
  64. _textContent.text = List_diaContents[index][1];//显示对话的内容
  65. int i = int.Parse(List_diaContents[index][2]);
  66. _imageHead.sprite = IconSprites[i];//显示头像
  67. index++; //当前对话内容的索引
  68. }
  69. }
  70. }
  71. }
  72. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/127548
推荐阅读
相关标签
  

闽ICP备14008679号