Unity 3D游戏-NPC对话系统With XML

用XML做的Unity NPC对话系统


本文提供全流程,中文翻译。

Chinar坚持将简单的生活方式,带给世人!

(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)



  • 1
    • Create XML Document 创建所需的XML文档
  • 2
    • Audio Manager 音频管理器脚本
  • 3
    • UI Manager 界面交互控制
  • 4
    • Finish 测试运行

游戏效果:


1

Create XML Document —— 创建所需的XML文档


注意路径:

我的XML文档”Dialog.xml”放在了 Assets 目录下创建的一个 Data 目录中

如果名字不一样,需要改名

这里写图片描述

或者直接修改解析XML代码中的读取路径,为你自己的路径

document.Load(Application.dataPath + "/Data/Dialog.xml"); //加载 XML 内容

举个栗子88



<root>
  <bg>背景1bg>
  <bgm>雨声bgm>
  <say>
    <name>船长name>
    <image>曲境一号船长1image>
    <sound>花痴诗1sound>
    <content>我的小鱼你醒了,还记认识早晨吗?content>
  say>
  <say>
    <name>秀秀name>
    <image>秀秀1image>
    <sound>花痴诗2sound>
    <content>昨夜你曾经说, 愿夜幕永不开启。content>
  say>
  <say>
    <name>船长name>
    <image>曲境一号船长2image>
    <sound>花痴诗3sound>
    <content>你的香腮边轻轻滑落的content>
  say>
  <say>
    <name>秀秀name>
    <image>秀秀2image>
    <sound>花痴诗4sound>
    <content>是你的泪,还是我的泪?content>
  say>
  <bg>背景2bg>
  <say>
    <name>秀秀name>
    <image>秀秀3image>
    <sound>花痴诗5sound>
    <content>初吻吻别的那个季节content>
  say>
  <say>
    <name>船长name>
    <image>曲境一号船长3image>
    <sound>花痴诗6sound>
    <content>不是已经哭过了吗?content>
  say>
  <bg>背景3bg>
  <say>
    <name>船长name>
    <image>曲境一号船长4image>
    <sound>花痴诗7sound>
    <content>我的指尖还记忆着content>
  say>
  <say>
    <name>秀秀name>
    <image>秀秀4image>
    <sound>花痴诗8sound>
    <content>你慌乱的心跳content>
  say>
  <say>
    <name>船长name>
    <image>曲境一号船长1image>
    <sound>花痴诗9sound>
    <content>温润的体香里content>
  say>
  <bg>背景4bg>
  <say>
    <name>秀秀name>
    <image>秀秀1image>
    <sound>花痴诗10sound>
    <content>那一缕长发飘飘…content>
  say>
root>

2

Audio Manager —— 音频管理器脚本


将此脚本挂在保证激活状态的 GameObject 上,并添加 2 AudioSource 组件

通过拖动的方式

Inspecter 面板中将 2 AudioSource 组件拖到 ↓

背景音: BgmAudioSource 和音效: SeAudioSource 框中

代码直接 Copy

举个栗子88

using UnityEngine;


/// 
/// 声音管理类
/// 
public class AudioManager : MonoBehaviour
{
    public static AudioManager Instance;       //单例
    public        AudioSource  BgmAudioSource; //背景音
    public        AudioSource  SeAudioSource;  //音效
    private       AudioClip    _clip;          //音乐文件


    /// 
    /// 初始化函数
    /// 
    void Start()
    {
        Instance = this;
    }


    /// 
    /// 播放背景音
    /// 
    public void PlayBgm(string inName)
    {
        _clip               = Resources.Load(inName); //加载音乐文件
        BgmAudioSource.clip = _clip;                             //更换音乐文件为Clip默认文件
        BgmAudioSource.Play();                                   //播放音乐
    }


    /// 
    /// 播放音效
    /// 
    public void PlaySe(string inName)
    {
        _clip = Resources.Load(inName); //加载音乐文件
        SeAudioSource.PlayOneShot(_clip);          //播放音效,一声就完了
    }


    /// 
    /// 停止背景音
    /// 
    public void StopBgm()
    {
        BgmAudioSource.Stop(); //停止播放器
    }
}

这里写图片描述


3

UI Manager —— 界面交互控制


将此脚本挂在保证激活状态的 GameObject

通过拖动的方式

Inspecter —— 面板中:分别添加声明的 6 个对象

代码直接 Copy

举个栗子88

using UnityEngine;
using System.Xml;                  //引用XML
using UnityEngine.UI;              //引用UI
using System.Collections.Generic;  //引用集合
using UnityEngine.SceneManagement; //引用命名空间



/// 
/// 枚举指令类型
/// 
public enum CommandType
{
    Say, //说话
    Bgm, //背景音
    Bg   //背景
}



/// 
/// 基类:指令类
/// 
public class Command
{
    public CommandType AllType; //定义成员变量 类型对象
}



/// 
/// 说话指令类:继承 指令基类
/// 
public class Say : Command
{
    public string Name;    //名字
    public string Image;   //图片
    public string Sound;   //音乐
    public string Content; //内容
}



/// 
/// 背景音指令类:继承 指令基类
/// 
public class Bgm : Command
{
    public string Name; //名字
}



/// 
/// 背景指令类:继承 指令基类
/// 
public class Bg : Command
{
    public string Name; //名字
}



/// 
/// 对话系统
/// 
public class DialogUI : MonoBehaviour
{
    public  List Commands = new List(); //声明一个 List 数组 类型为:Command
    private int           _index   = 0;                   //默认索引为0
    public  GameObject    GameImage;                      //游戏界面
    public  GameObject    ReloadBut;                      //重开按钮
    public  Image         BgImage;                        //背景图
    public  Image         HeadPortrait;                   //头像
    public  Text          NameText;                       //名字文本
    public  Text          ConttentText;                   //内容文本
    private bool          _isExecute = false;             //是否执行命令:默认不执行


    /// 
    /// 初始化方法
    /// 
    void Start()
    {
        AnalysisXml();                                                                            //调用解析XML方法
        GameObject.Find("StartGameButton").GetComponent

这里写图片描述


4

Finish —— 测试运行


直接点击运行 Or Alt+P

Chinar所作,Down下即可!

举个栗子88附:Chinar的GitHub工程案例


END

本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究

对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: [email protected]

对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址

你可能感兴趣的:(Unity 3D游戏-NPC对话系统With XML)