精华内容
下载资源
问答
  • 用XML做的Unity NPC对话系统本文提供全流程,中文翻译。Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)游戏效果:1Create XML Document —— 创建所需的...

    用XML做的Unity NPC对话系统

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

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

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

    游戏效果:

    1

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

    注意路径:

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

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

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

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

    背景1

    雨声

    船长

    曲境一号船长1

    花痴诗1

    我的小鱼你醒了,还记认识早晨吗?

    秀秀

    秀秀1

    花痴诗2

    昨夜你曾经说, 愿夜幕永不开启。

    船长

    曲境一号船长2

    花痴诗3

    你的香腮边轻轻滑落的

    秀秀

    秀秀2

    花痴诗4

    是你的泪,还是我的泪?

    背景2

    秀秀

    秀秀3

    花痴诗5

    初吻吻别的那个季节

    船长

    曲境一号船长3

    花痴诗6

    不是已经哭过了吗?

    背景3

    船长

    曲境一号船长4

    花痴诗7

    我的指尖还记忆着

    秀秀

    秀秀4

    花痴诗8

    你慌乱的心跳

    船长

    曲境一号船长1

    花痴诗9

    温润的体香里

    背景4

    秀秀

    秀秀1

    花痴诗10

    那一缕长发飘飘…

    2

    Audio Manager —— 音频管理器脚本

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

    通过拖动的方式

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

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

    代码直接Copy

    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

    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().onClick.AddListener(StartGame); //给开始游戏按钮,添加监听事件

    }

    ///

    /// 更新函数

    ///

    void Update()

    {

    if (Input.GetMouseButtonDown(0) && _isExecute == true ||

    Input.GetKeyDown(KeyCode.KeypadEnter) && _isExecute == true) //如果按下鼠标左键或者按下Enter

    {

    OneByOneExecuteCommand(); //执行对话命令函数

    }

    }

    ///

    /// 开始游戏

    ///

    public void StartGame()

    {

    GameImage.SetActive(true); //激活游戏界面

    _isExecute = true; //游戏开始:可以开始执行代码

    OneByOneExecuteCommand(); //游戏页面被激活的时候,就执行一次

    }

    ///

    /// 执行对话命令函数

    ///

    public void OneByOneExecuteCommand()

    {

    if (_index >= Commands.Count) //下标越界:读完

    {

    ReloadBut.SetActive(true); //激活重载按钮

    ReloadBut.GetComponent().onClick.AddListener(ReloadScene); //给按钮添加 重载场景 监听事件

    _isExecute = false; //关闭执行命令

    return;

    }

    Command command = Commands[_index++]; //自增:取出一条命令

    switch (command.AllType)

    {

    //如果类型是:Say 说话

    case CommandType.Say:

    Say say = (Say) command; //实例化 Say 对象 say

    HeadPortrait.sprite = Resources.Load(say.Image); //更换头像

    NameText.text = say.Name; //人物

    ConttentText.text = say.Content; //说话内容

    if (!string.IsNullOrEmpty(say.Sound)) //如果音效名不为空

    {

    AudioManager.Instance.PlaySe(say.Sound); //播放音效

    }

    break;

    //如果类型是:Bgm 背景音乐

    case CommandType.Bgm:

    Bgm bgm = (Bgm) command; //实例化 Bgm 对象 bgm

    AudioManager.Instance.PlayBgm(bgm.Name); //播放背景音乐

    OneByOneExecuteCommand(); //直接执行下一条

    break;

    //如果类型是:Bg 背景

    case CommandType.Bg:

    Bg bg = (Bg) command; //实例化 Bg 对象 bg

    BgImage.sprite = Resources.Load(bg.Name); //更换背景图片

    OneByOneExecuteCommand(); //直接执行下一条

    break;

    }

    }

    ///

    /// 重载场景

    ///

    public void ReloadScene()

    {

    SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); //重载当前场景

    }

    ///

    /// 解析XML

    ///

    private void AnalysisXml()

    {

    XmlDocument document = new XmlDocument(); //实例化一个xml文档

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

    XmlElement rootEle = document.LastChild as XmlElement; //根节点

    foreach (XmlElement ele in rootEle.ChildNodes) //遍历根节点的所有子节点

    {

    if (ele.Name == "bgm") //如果元素的名字是XML文档中的节点"bgm"

    {

    Bgm bgm = new Bgm();

    bgm.AllType = CommandType.Bgm;

    bgm.Name = ele.InnerText;

    Commands.Add(bgm); //添加到命令数组 Commands 中

    }

    else if (ele.Name == "bg")

    {

    Bg bg = new Bg();

    bg.AllType = CommandType.Bg;

    bg.Name = ele.InnerText;

    Commands.Add(bg);

    }

    else if (ele.Name == "say")

    {

    Say say = new Say();

    say.AllType = CommandType.Say;

    say.Name = ele.ChildNodes[0].InnerText;

    say.Image = ele.ChildNodes[1].InnerText;

    say.Sound = ele.ChildNodes[2].InnerText;

    say.Content = ele.ChildNodes[3].InnerText;

    Commands.Add(say);

    }

    }

    }

    }

    4

    Finish —— 测试运行

    直接点击运行 OrAlt+P

    Chinar所作,Down下即可!

    END

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

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

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

    展开全文
  • unity 增加NPC对话

    2020-07-23 12:35:42
    在新NPC(这里是食人花FLOWER(2)) 粘贴组件 这里的BOX collider 可能不符合大,或者位置,需要调一下size或者center 来包围这个食人花 在随便一个地方右键 如果答案是错误的,target ...

    需要先安装Fungus插件

    首先在已经弄好的模型copy 组件

     

    在新NPC(这里是食人花FLOWER(2)) 粘贴组件

     

    这里的BOX collider 可能不符合大,或者位置,需要调一下size或者center 来包围这个食人花

     

    在随便一个地方右键 新建一个block

     

     点击右边框的 + 按钮

     

    如果答案是错误的,target block指向wrong

    否则指向Answer

    最后将新增的NPC(食人花FLOWER(2)) 的Chart Name 填上 刚刚新增的那个new block 1

    注意chart name和 block的名字一定要对应

    展开全文
  • unityNPC对话

    千次阅读 2015-01-16 20:54:44
    欢迎来到我们的狗刨网,今天我要和大家分享今天我主要做的东西,虽说不多,但是我是很认真的做的。...一、NPC对话  //定义NPC对话数据 private string[] mData ={"你好,我是NPC","你

    欢迎来到我们的狗刨网,今天我要和大家分享今天我主要做的东西,虽说不多,但是我是很认真的做的。虽说代码很简单。


    知识点:这里面的用到了很多关于GUI的知识点,用GUI的知识点显示文本内容,还有自动寻径,还有关于射线的内容。


    一、NPC对话


     //定义NPC对话数据

    private string[] mData ={"你好,我是NPC","你的事我已经知道了",

    "为救你的星碟,我可以给你一些建议","你需要先去提升你的等级才能去拯救星   

     碟","快去旁边的农场种白菜去吧"};

    private int index = 0; //当前对话索引

    public GUIText mText;  //用于显示对话的GUI Text

    public Texture mTalkIcon;//对话标示贴图

    private bool isTalk = false;//是否显示对话标示贴图

    float a = 5f;

    在开始方法里设置标志位是假的:mText.enabled  = false  ;

    在更新方法里面:

    //从角色位置向NPC发射一条经过鼠标位置的射线

    Ray mRay = Camera.main.ScreenPointToRay(Input.mousePosition);

    RaycastHit mHi;

     //判断是否击中了NPC

    if (Physics.Raycast(mRay, out mHi))

    {

    //如果击中了NPC

     if (mHi.collider.gameObject.tag == "NPC1")

    {

     //进入对话状态

     isTalk = true;

     //允许绘制

     if (Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButtonDown(0))

    {

     //绘制指定索引的对话文本

     if (index < mData.Length)

    {

    mText.enabled = true;        

    mText.text = "NPC:" + mData[index];

     index = index + 1;

    }

    else

    {

    index = 0;

    mText.text = null;

     }


    效果如图:

    欢迎来到我们的狗刨网,每天我们都会更新新的内容,欢迎来我们的狗刨网浏览。

     

    展开全文
  • 用XML做的Unity NPC对话系统 本文提供全流程,中文翻译。Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) 1 Create XML Docum...

    用XML做的Unity NPC对话系统


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

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

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




    游戏效果:

    这里写图片描述


    1

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


    注意路径:

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

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

    这里写图片描述

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

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

    举个栗子88

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

    2

    Audio Manager —— 音频管理器脚本


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

    通过拖动的方式

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

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

    代码直接 Copy

    举个栗子88

    using UnityEngine;
    
    
    /// <summary>
    /// 声音管理类
    /// </summary>
    public class AudioManager : MonoBehaviour
    {
        public static AudioManager Instance;       //单例
        public        AudioSource  BgmAudioSource; //背景音
        public        AudioSource  SeAudioSource;  //音效
        private       AudioClip    _clip;          //音乐文件
    
    
        /// <summary>
        /// 初始化函数
        /// </summary>
        void Start()
        {
            Instance = this;
        }
    
    
        /// <summary>
        /// 播放背景音
        /// </summary>
        public void PlayBgm(string inName)
        {
            _clip               = Resources.Load<AudioClip>(inName); //加载音乐文件
            BgmAudioSource.clip = _clip;                             //更换音乐文件为Clip默认文件
            BgmAudioSource.Play();                                   //播放音乐
        }
    
    
        /// <summary>
        /// 播放音效
        /// </summary>
        public void PlaySe(string inName)
        {
            _clip = Resources.Load<AudioClip>(inName); //加载音乐文件
            SeAudioSource.PlayOneShot(_clip);          //播放音效,一声就完了
        }
    
    
        /// <summary>
        /// 停止背景音
        /// </summary>
        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; //引用命名空间
    
    
    
    /// <summary>
    /// 枚举指令类型
    /// </summary>
    public enum CommandType
    {
        Say, //说话
        Bgm, //背景音
        Bg   //背景
    }
    
    
    
    /// <summary>
    /// 基类:指令类
    /// </summary>
    public class Command
    {
        public CommandType AllType; //定义成员变量 类型对象
    }
    
    
    
    /// <summary>
    /// 说话指令类:继承 指令基类
    /// </summary>
    public class Say : Command
    {
        public string Name;    //名字
        public string Image;   //图片
        public string Sound;   //音乐
        public string Content; //内容
    }
    
    
    
    /// <summary>
    /// 背景音指令类:继承 指令基类
    /// </summary>
    public class Bgm : Command
    {
        public string Name; //名字
    }
    
    
    
    /// <summary>
    /// 背景指令类:继承 指令基类
    /// </summary>
    public class Bg : Command
    {
        public string Name; //名字
    }
    
    
    
    /// <summary>
    /// 对话系统
    /// </summary>
    public class DialogUI : MonoBehaviour
    {
        public  List<Command> Commands = new List<Command>(); //声明一个 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;             //是否执行命令:默认不执行
    
    
        /// <summary>
        /// 初始化方法
        /// </summary>
        void Start()
        {
            AnalysisXml();                                                                            //调用解析XML方法
            GameObject.Find("StartGameButton").GetComponent<Button>().onClick.AddListener(StartGame); //给开始游戏按钮,添加监听事件
        }
    
    
        /// <summary>
        /// 更新函数
        /// </summary>
        void Update()
        {
            if (Input.GetMouseButtonDown(0)           && _isExecute == true ||
                Input.GetKeyDown(KeyCode.KeypadEnter) && _isExecute == true) //如果按下鼠标左键或者按下Enter
            {
                OneByOneExecuteCommand(); //执行对话命令函数
            }
        }
    
    
        /// <summary>
        /// 开始游戏
        /// </summary>
        public void StartGame()
        {
            GameImage.SetActive(true); //激活游戏界面
            _isExecute = true;         //游戏开始:可以开始执行代码
            OneByOneExecuteCommand();  //游戏页面被激活的时候,就执行一次
        }
    
    
        /// <summary>
        /// 执行对话命令函数
        /// </summary>
        public void OneByOneExecuteCommand()
        {
            if (_index >= Commands.Count) //下标越界:读完
            {
                ReloadBut.SetActive(true);                                         //激活重载按钮
                ReloadBut.GetComponent<Button>().onClick.AddListener(ReloadScene); //给按钮添加 重载场景 监听事件
                _isExecute = false;                                                //关闭执行命令
                return;
            }
    
            Command command = Commands[_index++]; //自增:取出一条命令
    
            switch (command.AllType)
            {
                //如果类型是:Say 说话
                case CommandType.Say:
                    Say say             = (Say) command;                     //实例化 Say 对象 say
                    HeadPortrait.sprite = Resources.Load<Sprite>(say.Image); //更换头像
                    NameText.text       = say.Name;                          //人物
                    ConttentText.text   = say.Content;                       //说话内容
                    if (!string.IsNullOrEmpty(say.Sound))                    //如果音效名不为空
                    {
                        AudioManager.Instance.PlaySe(say.Sound); //播放音效
                    }
                    break;
    
                //如果类型是:Bgm 背景音乐
                case CommandType.Bgm:
                    Bgm bgm = (Bgm) command;                 //实例化 Bgm 对象 bgm
                    AudioManager.Instance.PlayBgm(bgm.Name); //播放背景音乐
                    OneByOneExecuteCommand();                //直接执行下一条
                    break;
    
                //如果类型是:Bg 背景
                case CommandType.Bg:
                    Bg bg          = (Bg) command;                    //实例化 Bg 对象 bg
                    BgImage.sprite = Resources.Load<Sprite>(bg.Name); //更换背景图片
                    OneByOneExecuteCommand();                         //直接执行下一条
                    break;
            }
        }
    
    
        /// <summary>
        /// 重载场景
        /// </summary>
        public void ReloadScene()
        {
            SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); //重载当前场景
        }
    
    
        /// <summary>
        /// 解析XML
        /// </summary>
        private void AnalysisXml()
        {
            XmlDocument document = new XmlDocument();                 //实例化一个xml文档
            document.Load(Application.dataPath + "/Data/Dialog.xml"); //加载 XML 内容
            XmlElement rootEle = document.LastChild as XmlElement;    //根节点
            foreach (XmlElement ele in rootEle.ChildNodes)            //遍历根节点的所有子节点
            {
                if (ele.Name == "bgm") //如果元素的名字是XML文档中的节点"bgm"
                {
                    Bgm bgm     = new Bgm();
                    bgm.AllType = CommandType.Bgm;
                    bgm.Name    = ele.InnerText;
                    Commands.Add(bgm); //添加到命令数组 Commands 中
                }
                else if (ele.Name == "bg")
                {
                    Bg bg      = new Bg();
                    bg.AllType = CommandType.Bg;
                    bg.Name    = ele.InnerText;
                    Commands.Add(bg);
                }
                else if (ele.Name == "say")
                {
                    Say say     = new Say();
                    say.AllType = CommandType.Say;
                    say.Name    = ele.ChildNodes[0].InnerText;
                    say.Image   = ele.ChildNodes[1].InnerText;
                    say.Sound   = ele.ChildNodes[2].InnerText;
                    say.Content = ele.ChildNodes[3].InnerText;
                    Commands.Add(say);
                }
            }
        }
    }

    这里写图片描述


    4

    Finish —— 测试运行


    直接点击运行 Or Alt+P

    Chinar所作,Down下即可!

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

    这里写图片描述


    END

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

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

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

    展开全文
  • Unity 自定义对话编辑器——龙之谷2的NPC对话系统 龙之谷2手游正式上线后不久,试玩了十几分钟(包括捏脸的5分钟),整个手游初次上手能让我感觉做的还可以的地方也就只有一个对话系统了,本文章将对龙之谷2的NPC...
  • unity__NPC对话

    2015-01-15 22:52:46
    欢迎大家关注我的日志,今天介绍下NPC对话 public class NPC : MonoBehaviour { bool flag=false,flag1,flag2; public static bool flag3;//接受任务的标志位 void Update () { } void OnMouseDown(){ ...
  • NPC的架构 未触发前 任务完成前 任务完成后 脚本 需要在脚本属性指定按键提示、对话框、还有对话框的文本 using System.Collections; using System.Collections.Generic; using UnityEngine; using...
  • unity之NGUI的NPC对话

    千次阅读 2015-01-30 20:25:02
    知识总结:首先今天我主要做了一下,用NGUI做的NPC对话,效果有点不好看,就凑合看吧。我首先用NGUI打了一个界面,然后为sprite添加了button事件,然后接下来就是代码的问题,当然还用到了射线的问题,至于射线是...
  • 首先今天我主要做了一下,用NGUI做的NPC对话,效果有点不好看,就凑合看吧。我首先用NGUI打了一个界面,然后为sprite添加了button事件,然后接下来就是代码的问题,当然还用到了射线的问题,至于射线是怎么用的,...
  • [Unity3D]Unity3D游戏开发之NPC对话系统的简单实现

    万次阅读 多人点赞 2014-04-23 00:33:08
    那么作为一部RPG,其剧情主要是靠人物间的对话串联起来的,玩家通过整合所有人物的对话信息来理解和把握整个故事的起因经过。所以从故事的角度来看,RPG游戏更能让玩家产生共鸣、增强游戏对于玩家的代入感。个人感觉...
  • [Unity3D]Unity3D游戏开发之Xml解析实现NPC对话系统

    万次阅读 热门讨论 2014-09-01 17:10:04
    今天我们来说说Unity3D中Xml的解析,为什么要说Xml的解析呢?因为在项目中我们常常需要从外部读取内容或者将内容以一定地形式储存起来,而Xml就是我们最为常用的一种文件形式。如图所示是博主目前正在做的一款仙剑...
  • Unity剧情对话XML实现

    千次阅读 2019-04-08 17:33:46
    Unity剧情对话XML实现 小生正在做一款剧情冒险游戏,剧情游戏最少不了的便是对话系统。 那么今天我们就来说一下具体实现。 1.创建对话Canvas 我的排版是三个图片,依次为npc头像,对话的背景,主角头像。 2.创建...
  • Unity音频,与NPC对话

    2015-01-17 23:23:04
    欢迎来到unity学习、unity培训、unity企业培训教育专区,这里有很多U3D资源、U3D培训视频,我们致力于打造业内unity3d培训、学习第一品牌。 今天研究了一下关于其他同学做的项目,发现受益良多。。。 音效...
  • using System.Collections; using UnityEngine; using UnityEngine.UI; ...public class SelfWritingText : MonoBehaviour ... [SerializeField] private Text textToUse;... [SerializeField] private bo...
  • npc对话

    2015-01-12 22:53:41
    今天的内容与npc对话  首先,根据用户鼠标的位置向NPC发射射线,如果射线击中了NPC,则进入对话状态。当用户按下空格键或者单击鼠标左键时,开始显示事先定义好的NPC对话数据。今天采取的方式是在场景中...
  • Unity对话系统源码

    2017-12-03 20:48:04
    unity对话系统源码VIDE Dialogues (Pro) 2.1 Requires Unity 5.0.0 or higher. VIDE is a lightweight dialogue system and interface designed to be bindable to any UI system. You are in control of the ...
  • unity3D 点击对话

    2021-05-10 21:28:18
    对于场景中的npc很多时候需要设置点击对话,那么怎么能够很好的流畅的实现出这样一个效果呢,怀着这样的问题驱使下记录下今天的学习unity知识; 首先我们需要一个创建一个文本文件来存储对话数据如图: public ...
  • using UnityEngine; using System.Collections;...public class NPC : MonoBehaviour { public GameObject ying_1; private float shi_1 = 0; //private float fireRate = 10F; void Update() {
  • 文章目录对话实现触碰npc产生对话条件对话带人物的对话分支对话 对话实现 unity商店下载并导入 可以在这里点加号生成各种各样的命令 比如说 说话的实现就是在这里: 随后运行游戏就有对话了 在这里可以选择...

空空如也

空空如也

1 2 3
收藏数 48
精华内容 19
关键字:

unitynpc对话