UNITY 对话系统

2023-11-13

1. 准备工作

创建一个画布(Canvas),画布中创建一个面板(Panel),面板中放个文本框(TEXT)和两个按钮(Button)(一个用于直接关闭,另一个用于点击之后继续说下句话)和一个挂载脚本的空物体(更名为DialogManager);
在这里插入图片描述
在这里插入图片描述

2.写脚本

Asset中创建一个C#脚本,脚本名DialogSystem,将其挂载到DialogManager组件中。

(1)字段
记得要引入命名控件using UnityEngine.UI;

	public GameObject DialogUI; //对话Panel
    public Text DialogText; //Panel的子级Text
    [TextArea(1,3)] public string[] DialogTextList; //存放对话内容 前面的特性是为了在Inspector窗口中文字区域显示成三行
    public int currentIndex;//对话数组索引
  • 写好保存后将这个脚本回到unity中给这些变量赋值。
    在这里插入图片描述

(2)写三个方法

	public void CloseDialog() //点击Close执行;关闭对话Panel
    {
        DialogUI.SetActive(false);
    }

    public void ContinueDialog()    //点击Continue按钮执行;继续下句话
    {
        currentIndex++;
        if (currentIndex < DialogTextList.Length)
        {
            DialogText.text = DialogTextList[currentIndex];
        }
        else
        {
            CloseDialog();
        }
    }

    private void OnEnable() //在激活对话面板按钮时触发,目的是为了使索引归0
    {
        currentIndex = 0;
        DialogText.text = DialogTextList[currentIndex];
    }

CloseDialog方法给buttonClose按钮(具体操作方法是选中ButtonClose按钮,在Inspector窗口中Onclick那里点击加号添加一个事件,将DialogManager拖入如图所示的地方,再在右边的下拉窗口中选择CloseDialog方法,下同)
在这里插入图片描述
ContinueDialog方法给ButtonContinue按钮(操作和上述相同)

3.效果

在这里插入图片描述

4.拓展

  • 细心的小伙伴可以注意到,我是用string类型的数组存储的我要交流的内容对话,还有一种方式是可以读取外部的文本文件(TXT格式,XML格式等等)
  • 我们还可以使用协程技术让一句话逐字显示

这两个内容都在这个链接里(感谢麦扣老师,教会我这么多东西):https://space.bilibili.com/370283072/channel/detail?cid=99057


我博客详细写的这个方法对应的视频是在这里面(感谢Joe老师)
https://www.bilibili.com/video/BV1oV411r7Ts

----------------------------------------------------------------------------------------------------------------------------------------------------------

2021/4/27更

今天发现一款非常好用的对话插件Fungus,可以这样说,这是一个非常方便的插件(不需自己设计UI,几乎不用代码就可以实现对话),详细讲解请跳转:
https://www.bilibili.com/video/BV18t411p7pV?from=search&seid=6279946706141458960


2021/4/28更

问题1

细心的小伙伴肯定已经发现一个问题文字显示模糊,这个问题有很多因素会导致,我只讲我的操作不当的解决办法。
操作不当:我当时肯定是在Canvas下建的Text,则Text的锚点不在不是以Panel为父级(尽管你后来拖进Panel中也不对),所以缩放不准确而导致显示字体的像素较少,从而字体看上去特别模糊。
正确做法:选中Panel,右键添加Text,锚点是这样才对。
在这里插入图片描述
文字显示效果非常清晰
在这里插入图片描述

问题2

如果你的Text部分压盖Button时,你一定要保证在Hierarchy窗口中Text在两个Button上面(Unity公司的设计规定:越靠上UI的优先级越高);如果Text在Button下面的话,则就会把Button压盖导致Button点击无效;
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UNITY 对话系统 的相关文章

随机推荐

  • 多项式加法运算(链表实现)

    文章目录 创建结点类型 打印多项式 尾插 插入排序 多项式相加 代码总览 结果展示 创建结点类型 我们用链表存储一个多项式 那么该链表的每一个结点就代表多项式的某一项 所以我们的每一个结点必须包含三个信息 多项式的系数 多项式的指数以及指向
  • tf2报错解决 assertion failed: [predictions must be >= 0] [Condition x >= y did not hold element-wise:]

    环境 tf2 完整报错如下 tensorflow python framework errors impl InvalidArgumentError assertion failed predictions must be gt 0 Con
  • 理解主从设备模式(Master-Slave)

    主从设备模式 主从设备模式也叫做主仆模式英文简称为Master Slave 核心思想是基于分而治之的思想 将一个原始任务分解为若干个语义等同的子任务 并由专门的工作者线程来并行执行这些任务 原始任务的结果是通过整合各个子任务的处理结果形成的
  • 安卓APP_ Fragment(3)—— Fragment的生命周期

    摘自 安卓APP Fragment 3 Fragment的生命周期 作者 丶PURSUING 发布时间 2021 04 16 22 32 12 网址 https blog csdn net weixin 44742824 article d
  • LINUX进程启动时自动挂载调试

    对于某些多进程的应用 子进程是有主进程拉起来的 此时想对子进程的启动流程打断点就比较麻烦 如果在子进程启动时调试器自动挂载就完美了 网上找到了gdbhelpers的开源工具库 其对gdb的现有命令集做了扩展 有一个工具是实现预挂载的 原理也
  • (PPT+官方解读):中国移动5G终端产品2021年要这么干!

    以下内容来自官方解读 1 2020 年终端产品发展回顾 2020 年新冠疫情全球蔓延 生产和生活受到冲击也带来很多改变 应该说这是不平凡的一年 也是在这一年的不断努力之下 中国移动 5G 终端交出了一份还算不错的答卷 中国移动网内 5G 手
  • Html常用正则表达式

    Html常用正则表达式 匹配帐号是否合法 字母开头 允许5 16字节 允许字母数字下划线 a zA Z a zA Z0 9 4 15 验证用户密码 a zA Z w 5 17 正确格式为 以字母开头 长度在6 18之间 只能包含字符 数字和
  • Linux 其他用户(非root用户)设置root权限及免密(Centos7为例)

    在linux系统中我们经常要创建一些非root用户来完成一些特定的操作 有时我们需要执行一些root用户才能执行的命令 这时我们需要给该用户设置root的权限 下面将演示如何操作 1 首先创建一个test用户 root smiletian
  • Postman导出和导入接口

    1 点击Export导出接口 2 点击Export 3 导出成功 4 导入操作 import 5 选择导入文件 7 导入成功
  • vue element的el-select下拉框赋值之后无法选择

    watch监听form applicant applyUnit里值的变化 赋值给form project disposalType 但发现下拉框不能再次选择 watch form applicant applyUnit handler va
  • 2013年9月22日星期日(准备工作:分离ddraw的math和interface)

    在之前 要进行下封装 好吧 先加个类 ddraw math类吧 顺便把ddraw引擎中的几个矩阵弄到ddraw math类中来 让接口和数学相分离开 头文件有这些 pragma once a 2D vertex typedef struct
  • 表单提交时,get,post用哪种方式,如何设定?

    一般来说 使用 HTTP 的 POST 方法来提交表单 因为 POST 方法可以将表单数据作为请求正文发送到服务器 而 GET 方法将表单数据包含在请求 URL 中 在 HTML 中 可以通过在
  • 【裸机开发】UART 串口通信(二)—— 使用 UART 收发数据

    这节其实就是在对上一篇文章涉及到的一些操作进行整理和归纳 不一定完全按照上一篇的顺序来 目录 一 UART IO 初始化 二 UART 初始化 1 打开 关闭串口 2 软件复位 3 总结 UART 初始化 三 接收数据 四 发送数据 一 U
  • 【STM32】LCD液晶显示

    作者 一只大喵咪1201 专栏 STM32学习 格言 你只管努力 剩下的交给时间 LCD显示 LCD简介 TFTLCD驱动原理 ILI9341 液晶控制器简介 液晶屏的信号线及 8080 时序 使用 STM32 的 FSMC 模拟 8080
  • C语言知识小结(七)

    共用体 共用体是一种数据结构 结构体和共用体的区别 结构体 结构体的各个成员会占用不同的内存 互相之间没有影响 结构体占用的内存大于等于所有成员占用的内存的总和 成员之间可能存在缝隙 共用体占用的内存等于最长的成员占用的内存 共用体 共用体
  • AtomicStampedReference、AtomicMarkableReference源码分析,解决cas ABA问题

    cas的ABA问题就是 假设初始值为A 线程3和线程1都获取到了初始值A 然后线程1将A改为了B 线程2将B又改回了A 这时候线程3做修改时 是感知不到这个值从A改为了B又改回了A的过程 AtomicStampedReference 本质是
  • L1-044 稳赢(Python实现) 测试点全过

    前言 color Blue 前言 前言 本系列题使用的是 PTA中的团体程序设计天梯赛 练习集 的题库 难度有L1 L2 L3三个等级 分别对应团体程序设计天梯赛的三个难度 如有需要可以直接查看对应专栏 发布个人的刷题笔记的同时 也是希望可
  • PicGo工具配置Gitee图床仓库

    PicGo工具配置Gitee图床仓库 1 图床的作用 2 用到的工具 3 各工具的下载及安装 3 1 PicGo 3 1 1 PicGo下载 3 1 2 PicGo安装 3 2 Node js 3 2 1 Node js下载 3 2 2 安
  • Zabbix 系统监控(三)VMware 虚拟平台监控、邮件告警、企业微信告警配置

    Vmware 虚拟平台监控 邮件告警 企业微信告警配置 8 Vmware 虚拟平台监控 阅读 zabbix 官方文档 官方提供了 Vmware 虚拟机监控模板 并对模板进行了解释说明 但未对相应名词做解释 如果不了解 Vmware 组件 可
  • UNITY 对话系统

    1 准备工作 创建一个画布 Canvas 画布中创建一个面板 Panel 面板中放个文本框 TEXT 和两个按钮 Button 一个用于直接关闭 另一个用于点击之后继续说下句话 和一个挂载脚本的空物体 更名为DialogManager 2