简易虚拟培训系统-UI控件的应用3
目录
Button组件的组成
Button组件方法1-在Button组件中设置OnClick()回调
Button组件方法2-在脚本中添加Button类的监听
上一篇使用了文件流读取硬盘数据并显示在Text组件中,本篇增加使用按钮来控制显示哪一篇文字信息。
Button组件的组成
1. 新建Button:如果使用的按键较多,可以在Canvas下建立一个空节点(Buttons)放置所有的Button,在Buttons上点右键->UI->Button

2. Button的结构:包括一个Button和一个子节点Text。

3. Button控件:这里介绍比较常用的参数

(1)SourceImage:可以通过它选择按钮的背景图片,比如

(2)Button组件中的Transition,当选择为ColorTint选项时,可以设置鼠标(或其他射线)悬停或按下按钮时Button的颜色变化;当选择为SpriteSwap时,可以相应地选择悬停或按下等操作时显示的图片

(3)Button组件中的OnClick():按钮按下时的回调函数设置。这是最重要的部分,在后文中详细解释使用方法

(4)Button的子节点Text组件:可以编辑在按钮上显示的文字

下面介绍如何设置按下Button时执行相应的操作,一般使用以下2种方式:
Button组件方法1-在Button组件中设置OnClick()回调
1. 写一个测试脚本,就使用之前使用文件流显示文本的脚本,再加上下面的函数。按下“系统说明”的按钮后,将介绍的文本显示出来。
public void OnSysIntro(){//系统介绍按钮introText.text = ReadTxt("introTxt", "01_systemIntro");}
完整代码如下:
public class textShow : MonoBehaviour
{public TMP_Text introText; //载入显示文本的Text控件// 读取txt文本内容的方法public static string ReadTxt(string fileName,string txtFile){string path= "Assets/Resources/" + fileName + "/" + txtFile + ".txt";string content="未读到文件内容";FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);StreamReader sr = new StreamReader(fs, Encoding.UTF8);if (null == sr)Debug.Log("读取失败");elsecontent = sr.ReadToEnd();sr.Close();return content;}public void OnSysIntro(){//系统介绍按钮introText.text = ReadTxt("introTxt", "01_systemIntro");}
}
2. 前文中这个脚本挂在了空节点Empty上,并拖入Text的节点(详见前文);
3. 在“系统介绍”按钮的OnClick()中点击“+”号

添加一项响应事件:

4. 将挂载上面这个textShow.cs脚本的Empty节点拖到Object变量中

5. 选择textShow.cs脚本中的OnSysIntro()函数,这样就让“系统说明”按钮和OnSysIntro()函数发生了关联:

6. 运行结果

Button组件方法2-在脚本中添加Button类的监听
这也是常用的按钮回调方法,在机械臂场景中使用过。方法如下:
1. 上面的脚本添加一个类型为Button的公共变量,以便于将按钮载入:
public Button introSysBtn; //载入系统介绍按钮
2. 在Start()方法中添加一个按钮按下的监听事件,回调函数就是脚本中定义的OnSysIntro()函数:
introSysBtn.onClick.AddListener(OnSysIntro); //添加系统介绍按钮的监听
3. 脚本依旧挂在Empty节点不变,不过需要将响应的按钮拖到变量中:

4. 运行效果与上面的方法一样。全部脚本如下:
using UnityEngine;
using TMPro;
using UnityEngine.UI;
using System.IO;
using System.Text;public class TestUI : MonoBehaviour
{public TMP_Text introText; //载入显示文本的Text控件public Button introSysBtn; //载入系统介绍按钮void Start(){introSysBtn.onClick.AddListener(OnSysIntro); //添加系统介绍按钮的监听}// 读取txt文本内容的函数public static string ReadTxt(string fileName,string txtFile){string path= "Assets/Resources/" + fileName + "/" + txtFile + ".txt";string content="未读到文件内容";FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);StreamReader sr = new StreamReader(fs, Encoding.UTF8);if (null == sr)Debug.Log("读取失败");elsecontent = sr.ReadToEnd();sr.Close();return content;}public void OnSysIntro(){//系统介绍按钮introText.text = ReadTxt("introTxt", "01_systemIntro");}
}
小示例-使用Button实现基本界面
1. 使用上面的脚本和步骤,可以实现除“测试答题”、“开始操作”之外的按钮。

2. “开始操作”按钮的实现:这个按钮的作用是隐藏上面的主面板,显示操作面板
增加如下脚本,在Start()之前载入需要控制的两个面板,并增加按钮的回调函数,控制面板的激活和失活:
public GameObject mainCanvas, operateCanvas; //载入主面板、操作面板
public void OnOpeBtn(){//显示操作面板mainCanvas.SetActive(false); //隐藏主面板operateCanvas.SetActive(true); //显示操作面板}
最后,别忘记给这两个面板的GameObject变量赋值:

相关文章:
简易虚拟培训系统-UI控件的应用3
目录 Button组件的组成 Button组件方法1-在Button组件中设置OnClick()回调 Button组件方法2-在脚本中添加Button类的监听 上一篇使用了文件流读取硬盘数据并显示在Text组件中,本篇增加使用按钮来控制显示哪一篇文字信息。 Button组件的组成 1. 新建Button&#…...
语言模型(language model)
文章目录 引言1. 什么是语言模型2. 语言模型的主要用途2.1 言模型-语音识别2.2 语言模型-手写识别2.3 语言模型-输入法 3. 语言模型的分类4. N-gram语言模型4.1 N-gram语言模型-平滑方法4.2 ngram代码4.3 语言模型的评价指标4.4 两类语言模型的对比 5. 神经网络语言模型6. 语言…...
【3.Vue子组件调用父组件方法】
1.概述 使用组件建抛出事件的方式来调用父组件的方法,不直接用this.$parent.function的方法,当然这种方式是可以的。 2.代码实现 2.1 父组件代码 父组件写一个方法给子组件调用 // 设备点击事件// equipId:设备id// leftValue:left值// topValue:top…...
算法系列-876-求链表的中间节点
求链表中间节点,如果有两个中间节点取后面那个 链表定义 // lc codestart /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(…...
h5 ws 客户端 监听ws服务器广播的信息
<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>AI智能写作</title><!-- Bootstrap CSS --><meta charset"utf-8"><meta name"viewport" content"widt…...
网络基础之重中之重
目录 IP协议 编辑 基本概念: 协议头格式: 编辑 网段划分 DHCP : CIDR: 特殊的IP地址: IP地址的数量限制: 私有IP和公网IP 路由 路由的过程: 数据链路层 认识以太网&#x…...
HarmonyOS应用开发者-----基础认证试题及答案
HarmonyOS应用开发者基础认证试题及答案 试题会不定时刷新,本试题仅供大家学习参考 【判断题】 2.5/2.5 所有使用@Component修饰的自定义组件都支持onPageShow,onBackPress和onPageHide生命周期函数。 正确(True)错误(False) 回答正确【判断题】 2.5/2.5 在Column和Row容器组…...
C++:string并非以0作为结束符,c_str和data的返回却包含结束符0
C语言中使用char数组保存字符串时,是以字符为0或者\0作为字符串的结束符标志的。 所以一个char str[10]的数组只能合法的保存9个字符(因为最后还要加一个结束符)。 #include <cstring> #include <iostream>using namespace std;int main() {char str[10] ="…...
ChatGPT插件的优缺点
虽然西弗吉尼亚大学的研究人员看到了最新的官方ChatGPT插件——名为“代码解释器”( Code Interpreter)的教育应用潜力,但他们也发现,对于使用计算方法处理针对癌症和遗传疾病的定向治疗的生物数据的科学家来说,这款插…...
北京985学校,交叉学科考英一数三408
北京师范大学(B) 考研难度(☆☆☆) 内容:23考情概况(拟录取和复试分析)、院校概况、23专业目录、23复试详情、各专业考情分析、各科目考情分析。 正文1096字,预计阅读:3分钟 2023考情概况 北…...
ChatGPT 总结前端HTML, JS, Echarts都包含哪些内容
AIGC ChatGPT ,BI商业智能, 可视化Tableau, PowerBI, FineReport, 数据库Mysql Oracle, Office, Python ,ETL Excel 2021 实操,函数,图表,大屏可视化 案例实战 http://t.csdn.cn/zBytu...
企业架构LNMP学习笔记1
项目开发流程: 公司老板或者产品经理,根据市场调查,决定开发一整套互联网产品。 互动社交电商用户论坛(BBS) 产品决策 (老板产品UI设计) 业务实施、代码开发 程序开发人员 前端开发&#x…...
【位运算】leetcode371:两整数之和
一.题目描述 两整数之和 二.思路分析 题目要求我们实现两整数相加,但是不能使用加号,应该立马想到是用位运算来解决问题。之前说过,异或就是“无进位相加”,故本题可以先将两数异或,然后想办法让得到的结果进位即可。…...
【爬虫小知识】如何利用爬虫爬网页——python爬虫
前言 网络时代的到来,给我们提供了海量的信息资源,但是,想要获取这些信息,手动一个一个网页进行查找,无疑是一项繁琐且效率低下的工作。这时,爬虫技术的出现,为我们提供了一种高效的方式去获取…...
什么是跨域问题 ?Spring MVC 如何解决跨域问题 ?Spring Boot 如何解决跨域问题 ?
目录 1. 什么是跨域问题 ? 2. Spring MVC 如何解决跨域问题 ? 3. Spring Boot 如何解决跨域问题 ? 1. 什么是跨域问题 ? 跨域问题指的是不同站点之间,使用 ajax 无法相互调用的问题。 跨域问题的 3 种情况&#x…...
线性代数的学习和整理17:向量空间的基,自然基,基变换等(未完成)
目录 3 向量空间的基:矩阵的基础/轴 3.1 从颜色RGB说起 3.2 附属知识 3.3 什么样的向量可以做基? 3.4 基的分类 3.1.1 不同空间的基---向量组的数量可能不同 3.1.2 自然基 3.1.3 正交基 3.1.4 标准正交基 3.1.5 基和向量/矩阵 3.1.6 基变换 …...
Java中支持分库分表的框架/组件/中间件简介
文章目录 1 sharding-jdbc2 TSharding3 Atlas4 Cobar5 MyCAT6 TDDL7 Vitess 列举一些比较常见的,简单介绍一下: sharding-jdbc(当当) TSharding(蘑菇街) Atlas(奇虎360) Cobar&#…...
7.2 项目2 学生通讯录管理:文本文件增删改查(C 版本)(自顶向下设计+断点调试) (A)
C自学精简教程 目录(必读) 该作业是 作业 学生通讯录管理:文本文件增删改查(C版本) 的C 语言版本。 具体的作业题目描述,要求,可以参考 学生通讯录管理:文本文件增删改查(C版本)。…...
excel怎么设置任意选一个单元格纵横竖横都有颜色
有时excel表格内容过多的时候,我们通过excel设置任意选一个单元格纵横,竖横背景颜色,这样会更加具有辨识度。设置方式截图如下 设置成功后,预览的效果图...
期货-股票交易规则
交易时间 港股:9:00~9:20 集合竞价,9:3012:00,13:0016:00 持续交易,16:00~16:10 随机收市竞价沪股:9:00~9:25 集合竞价,9:3011:30,13:0015:00 持续交易,11:30~12:00 交易申报深股&a…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
