当前位置: 首页 > news >正文

从零开始的PICO教程(4)--- UI界面绘制与响应事件

从零开始的PICO教程(4)— UI界面绘制与响应事件

文章目录

  • 从零开始的PICO教程(4)--- UI界面绘制与响应事件
    • 一、前言
      • 1、大纲
      • 2、教程示例
    • 二、具体步骤
      • 1、PICO VR环境配置
      • 2、XR的UI Canvas画布创建与调整
        • (1)Canvas简介
        • (2)创建Canvas 画布
      • 3、UI界面的绘制
        • (1)Panel简介
        • (2)Panel创建
        • (3)Button对象
        • (4)Text对象
      • 4、Button 的响应事件绑定
        • (1)UIController控制脚本
        • (2)新建UI控制器空对象
        • (3)Button绑定事件
      • 5、Slider的创建并绑定响应事件
        • (1)Slider和Text的创建
        • (2)创建Slider的响应事件
        • (3)Slider 事件绑定
    • 三、结束

一、前言

1、大纲

经过该教程你将学会

  1. 创建并绘制UI界面
  2. 为UI界面中的元素添加响应事件

2、教程示例

在这里插入图片描述
功能:

  • 点击增加 数字加1、点击减少 数字减1
  • 下面的数字跟随滑动条自动变化。

二、具体步骤

1、PICO VR环境配置

创建并完成PICO 的VR环境配置
还没配置好/配置有问题的同学可以参考这一篇
PICO系列(一):pico环境配置与游戏打包实机运行

2、XR的UI Canvas画布创建与调整

(1)Canvas简介

Canvas组件是用于创建和管理UI元素的容器。它是构建用户界面的基本组件之一,可以用于放置各种UI元素,如文本、图像、按钮等。

Canvas组件有以下几个重要属性:

  • Render Mode(渲染模式):Canvas的渲染模式确定了它在屏幕上的呈现方式。有三种常见的渲染模式可供选择:

    • Screen Space - Overlay(屏幕空间-覆盖):Canvas将覆盖在所有其他元素之上,不会随着场景中的相机移动而移动。
    • Screen Space - Camera(屏幕空间-相机):Canvas会随着指定的相机移动,并在相机的视野内进行渲染。
    • World Space(世界空间):Canvas在场景中以自己的坐标和尺寸存在,可以像其他3D对象一样进行移动和旋转。
  • Sorting Layer(排序层)和 Order in Layer(层内顺序):Canvas可以通过Sorting Layer和Order in Layer属性来确定其渲染顺序。这决定了UI元素在Canvas上的叠放顺序。

  • Canvas Scaler(画布缩放器):Canvas Scaler属性用于确定Canvas元素如何在不同屏幕分辨率下进行缩放。它可以根据屏幕尺寸和分辨率进行自适应缩放,以保持UI元素的一致性。

    • Dynamic Pixeis Per Unit(文本参考像素每单位):这个属性确定了Canvas中一个Text单位所代表的像素数量,越大text显示的越清晰。它用于计算UI元素的实际大小。
    • Reference Pixels Per Unit(UI参考像素每单位):这个属性确定了Canvas中一个UI单位所代表的像素数量,越大越圆润
      在这里插入图片描述

除了Canvas组件本身,可以在Canvas上添加其他UI组件,比如:

Image(图片):用于显示图片或纹理。
Text(文本):用于显示文本内容。
Button(按钮):用于创建交互式按钮。
Slider(滑动条):用于设置数值范围。
Input Field(输入框):用于接收用户输入的文本。
Scroll View(滚动视图):用于显示大量内容并进行滚动查看。

(2)创建Canvas 画布

层级窗口 XR – 》 UI Canva
注:不要选UI下的 Canva
在这里插入图片描述画布大小、位置调整

3、UI界面的绘制

在界面开始前要创建画板做为容器

(1)Panel简介

Panel组件是用于创建UI界面中的容器元素的基本组件之一。它是一个矩形区域,可以用来包含和布局其他UI元素,例如文本、图像、按钮等。Panel组件提供了一些常见的布局选项和功能,以便在UI中创建各种复杂的布局。

以下是Panel组件的一些主要属性和功能:

Transform:可以设置Panel的位置、旋转和缩放等变换属性。

Rect Transform:定义Panel的矩形区域,可以通过拉伸和调整来调整大小和形状。

Anchors(锚点):Panel可以通过锚点设置在父级容器中的位置和大小。锚点可以固定在父级容器的边界或中心,并根据需要进行调整。

Pivot(中心点):Panel的中心点用于进行缩放和旋转操作。

Layout Group(布局组件):Panel可以与布局组件一起使用,例如Horizontal Layout Group或Vertical Layout Group,用于自动布局Panel内的子元素。布局组件可以根据一些规则(例如间距、大小、对齐等)自动调整子元素的位置和大小。

Image(图片):Panel可以包含一个Image组件,用于显示背景图片或其他装饰性元素。

Raycast Target(射线检测目标):确定Panel是否接收鼠标点击或触摸事件。

(2)Panel创建

目前的画布还是不可见的,为此需要创建一个画板
新建Panel
在这里插入图片描述
在这里插入图片描述
将画布缩小。我习惯调整Scale为0.03,0.03方便绘制。
在这里插入图片描述

(3)Button对象

UI --》Legacy --》 Button
创建一个 Button
在这里插入图片描述
在这里插入图片描述
刚创建,有些人可能是这样的
要修改的地方:
1、 Dynamic Pixeis Per Unit(文本参考像素每单位),值从1改为40,提高清晰度。在这里插入图片描述
2、旋转180度
在这里插入图片描述
3、选定Button对象 按T 用矩阵编辑工具,编辑大小和移动位置。
4、在子对象的Text(Legacy)中修改 Text的文本为增加和减少
在这里插入图片描述

(4)Text对象

UI --》Legacy --》 Text
在这里插入图片描述
同上修改text 内容为10,Alignment,居中对齐。

4、Button 的响应事件绑定

(1)UIController控制脚本

该脚本将负责实现按键的点击之后的发生事件。
新建一个C# 脚本 UIController

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class UIController : MonoBehaviour// Start is called before the first frame updatepublic Text uiText; //待修改的文本public void OnAddButtonClick(){string text = uiText.text;  //获取文本的值int num=Int32.Parse(text);  //将文本转化为整数uiText.text = num + 1 + ""; //让整数+1 ,然后在+""}public void ONDecreateButtonClick(){string text=uiText.text;int num=Int32.Parse(text);uiText.text = num - 1 + "";}
}

增加两个public 函数OnAddButtonClick和ONDecreateButtonClick,点击Button之后将会调用该函数。

(2)新建UI控制器空对象

新建一个空对象UIController,然后将UIController脚本赋值给它。
将显示数字的文本Text对象引用放到Ui Text里面
在这里插入图片描述

(3)Button绑定事件

在这里插入图片描述
以上三个操作完成之后,Buuton绑定事件完成。

减少Button的按键操作同上。
在这里插入图片描述
实时预览应用测试的时候没有问题,增加和减少事件正常执行。
如果还不能实时预览可以参考这篇博客:从零开始的PICO教程(2)–实时预览应用场景

5、Slider的创建并绑定响应事件

与创建Button的时候大同小异,相似的操作为了节省篇幅就不截屏了。

(1)Slider和Text的创建

UI --》 Slider
UI --》Legacy --》Text
分别创建并拖动UI如下:
在这里插入图片描述
如果Slider创建的时候方向不对可以调整Direction
数值的画调整Max Value为100
在这里插入图片描述

(2)创建Slider的响应事件

在这里插入图片描述
注意:Slider的OnValueChanged函数,里面要求传入一个变量Single写的时候要注意
脚本 UIController 修改如下

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class UIController : MonoBehaviour
{// Start is called before the first frame updatepublic Text uiText; //待修改的文本//---- UIController 新增内容public Text SliderText;public void OnChangeSlider(Single value){SliderText.text = value + "";}//---- UIController 新增Slider的响应事件,让文本显示内容为传入的参数的值public void OnAddButtonClick(){string text = uiText.text;  //获取文本的值int num=Int32.Parse(text);  //将文本转化为整数uiText.text = num + 1 + ""; //让整数+1 ,然后在+""}public void ONDecreateButtonClick(){string text=uiText.text;int num=Int32.Parse(text);uiText.text = num - 1 + "";}}

(3)Slider 事件绑定

在这里插入图片描述
在这里插入图片描述

三、结束

最终结果如下
在这里插入图片描述
当你跟着做到这的时候。恭喜你初步掌握了UI界面的绘制与事件绑定,迈出了VR游戏的重要一步

该教程由:深圳技术大学 – 元宇宙开发者协会 撰写提供。协会邮箱:2981007652@qq.com

相关文章:

从零开始的PICO教程(4)--- UI界面绘制与响应事件

从零开始的PICO教程(4)— UI界面绘制与响应事件 文章目录 从零开始的PICO教程(4)--- UI界面绘制与响应事件一、前言1、大纲2、教程示例 二、具体步骤1、PICO VR环境配置2、XR的UI Canvas画布创建与调整(1)C…...

IntelliJ IDEA 远程调试 Tomcat

准备工作 明确远程服务器的 IP 地址,比如我是:192.168.92.128 关掉服务器防火墙:service iptables stop 本地 Remote Server 配置 添加 Remote Server,如下图 复制 Remote Server 自动生成的 JVM 参数,等下有用&…...

谷粒商城----认证服务

一、短信验证码(阿里云短信服务) Data ConfigurationProperties(prefix "spring.cloud.alicloud.sms") Component public class SmsComponent {private String host;private String path;private String skin;private String sign;private S…...

Mediasoup源码介绍

一、Mediasoup 整体结构 整个Mediasoup库通过Nodejs管理,比如整体逻辑、worker、router、producer、consumer...都是通过JS进行管理的。 其底层的数据传输是通过C部分进行控制的,通过NodeJs来控制C部分,以实现整体的数据传输效 二、Mediasou…...

GIS入门,WKT格式详解

WKT介绍 WKT是Well-known Text的缩写,它是一种用于描述地理空间几何对象的文本格式。 WKT是一种开放的国际标准,由Open Geospatial Consortium(OGC)定义和维护。 WKT是一种标准的表示方法,可以用来描述点、线、面等地理空间对象的形状和位置。通过使用一系列的坐标点和关…...

Qt之postEvent

基本介绍 postEvent方法所属类为QCoreApplication,完整声明如下: [static] void QCoreApplication::postEvent(QObject *receiver, QEvent *event, int priority Qt::NormalEventPriority) 该方法的作用是将要发送的事件推送到对应线程的事件队列中&…...

1976~2020年青藏高原典型冰川及冰湖遥感监测数据集

冰川面积是反应气候变化最直接的指标之一。在全球变暖的大背景下,对于评估冰川融化造成的生态、全球气候变化和水资源价值评价等问题十分重要。本文针对受西风和印度洋夏季风影响下的青藏高原冰川及其末端冰湖的变化特征,制作了近44年来时相相对连续的冰…...

时序预测 | MATLAB实现LSSVM最小二乘支持向量机时间序列预测未来

时序预测 | MATLAB实现LSSVM最小二乘支持向量机时间序列预测未来 目录 时序预测 | MATLAB实现LSSVM最小二乘支持向量机时间序列预测未来预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现LSSVM时间序列预测未来(最小二乘支持向量机); 2.运行环境Mat…...

windows10 使用WSL2安装原生docker

1.升级WSL2 我的 win10 wsl默认版本是1,先要升级WSL2不然不支持systemd(后台守护进程) 双击直接安装就行,安装包网上都能找到: Microsoft.WSL_1.3.17.0_x64_ARM64.msixbundle 执行 wsl --version 显示这样成功了: C:\Users\xx>wsl --version WSL …...

jupylab pandas按条件批量处理xls数据

批量处理xls表数据 引入相关包 import pandas as pd import xlrd import numpy as np# 去掉jupyleb警告 import warnings warnings.filterwarnings("ignore")from IPython.core.interactiveshell import InteractiveShell InteractiveShell.ast_node_interactivity…...

RJ45水晶头网线顺序出错排查

线序 网线水晶头RJ45常用的线序标准ANSI / TIA-568定义了T568A与T568B两种线序,一般使用T568B,水晶头8个孔对应的8条线颜色如下图: 那1至8的编号,是从水晶头哪一面为参考呢,如下图,是水晶头金手指一面&am…...

【洛谷 P1115】最大子段和 题解(贪心算法)

最大子段和 题目描述 给出一个长度为 n n n 的序列 a a a,选出其中连续且非空的一段使得这段和最大。 输入格式 第一行是一个整数,表示序列的长度 n n n。 第二行有 n n n 个整数,第 i i i 个整数表示序列的第 i i i 个数字 a i …...

uni-app--》基于小程序开发的电商平台项目实战(一)

🏍️作者简介:大家好,我是亦世凡华、渴望知识储备自己的一名在校大学生 🛵个人主页:亦世凡华、 🛺系列专栏:uni-app 🚲座右铭:人生亦可燃烧,亦可腐败&#xf…...

入门人工智能 —— 学习一门编程语言 python 基础代码编写和运算符介绍(1)

入门人工智能 —— 学习一门编程语言 python(1) 入门流程1.安装pythonwindowslinux ubuntu 代码编写打印输出结果 基本加减法介绍基本运算符 随着人工智能技术的快速发展,越来越多的年轻人开始关注这个领域。作为入门者,学习人工智…...

【java安全】CommonsBeanUtils1

文章目录 【java安全】CommonsBeanUtils1前言Apache Commons BeanutilsBeanComparator如何调用BeanComparator#compare()方法?构造POC完整POC 调用链 【java安全】CommonsBeanUtils1 前言 在之前我们学习了java.util.PriorityQueue,它是java中的一个优…...

JVM优化(OOM,内存溢出),查看线程快照,堆内存情况等问题

1:堆大小 新生代 老年代,新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 ) 2:-Xmn参数总是应当小于-Xmx参数,否则就会触发OOM错误 3:jvm优化与查看gc回收情况&#x…...

git 给分支添加描述

需求:分支多了不知道当前分支的用处可以使用git br用来描述 效果: 全局安装命令 npm i -g git-br 项目内使用 git br 给f-230825-4-zhou分支备注 git config branch.f-230825-4-zhou.description 用来开发第四迭代需求 再次git br查看效果...

SpringBoot+Vue 整合websocket实现简单聊天窗口

效果图 1 输入临时名字充当账号使用 2 进入聊天窗口 3 发送消息 &#xff08;复制一个页面&#xff0c;输入其他名字&#xff0c;方便展示效果&#xff09; 4 其他窗口效果 代码实现 后端SpringBoot项目&#xff0c;自行创建 pom依赖 <dependency><groupId…...

PCB layout在布线上的设计规范有哪些?

PCB Layout是一项技术活&#xff0c;也是经验活&#xff0c;良好的PCB Layout布线可帮助工程师确保最终的电路板性能、可靠性和制造质量&#xff0c;因此是很多电子工程师的学习重点&#xff0c;下面我们来盘点下PCB Layout关于布线的规范有哪些。 1、地管的引脚接地越短越好&a…...

喜报丨迪捷软件入选浙江省2023年省级产业数字化服务商

近日&#xff0c;根据《关于组织开展2023年度省级产业数字化服务商申报工作的通知》要求&#xff0c;省经信厅公布2023年省级产业数字化服务商名单&#xff0c;浙江迪捷软件科技有限公司榜上有名。 省级产业数字化服务商上榜名单的评选在企业申报、地方推荐、专家评审、综合评估…...

verilog写rom,采用端口排序顺序例化

verilog写rom,采用端口排序顺序例化 1,介绍rom,以及rom与ram的区别2,RTL设计模块、门级网表以及testbench测试模块2.1 RTL设计2.2 门级网表2.3 testbench3,波形输出1,介绍rom,以及rom与ram的区别 参考文献: 1, 转载-ROM、RAM存储器原理详解以及DRAM、SRAM、SDRAM 、FLA…...

基于SSM的共享客栈管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

全屏Activity弹出键盘不顶起布局

最近遇到的一个问题是全屏Activity中要求弹出键盘不顶起布局&#xff0c;首先windowSoftInputMode的取值是有多个的&#xff0c;在全屏场景下adjustPan是没有用的&#xff0c;需要使用adjustResize首先确保键盘不顶起布局。 android:windowSoftInputMode"stateHidden|adju…...

JAVA设计模式详解 解构设计模式思想 详细代码对比

JAVA设计模式详解 1 简单工厂模式 1 简单工厂模式 设计模式-01简单工厂模式详解 详细代码对比...

lintcode 567 · 最大得分 【动态规划 中等 】

题目 https://www.lintcode.com/problem/567 给定一个矩阵matrix&#xff0c; matrix[i][j]表示你到达第i行第j列可以得到的分数&#xff0c;现在你要用第0行任意一点出发&#xff0c;从每行里找到一个点进行跳跃&#xff0c;每次从(i,j)到(i1,k)跳跃需要消耗∣j−k∣的分数&…...

qml嵌入到QWidget的两种方式介绍

本文介绍qml页面嵌入到QWidget的两种方式,以及这两种方式的区别。 方式1 在 Qt 中,可以使用 QQuickWidget 将 QML 内容嵌入到基于 QWidget 的应用程序中。这是在旧的 QWidget-based 应用程序中逐渐引入 QML UI 的一种常见方式。 以下是如何使用 QQuickWidget 将 QML 内容嵌…...

Mysql数据库之常用SQL语句及事务学习总结

数据库介绍 几个常见的缩写&#xff1a; DB&#xff1a;数据库。全称&#xff1a;DataBase。DBMS&#xff1a;数据库管理系统。全称&#xff1a;DataBase Management System。DBS&#xff1a;数据库系统。全称&#xff1a;DataBase System。DBA&#xff1a;数据库管理员。全称…...

RuoYi若依管理系统最新版 基于SpringBoot的权限管理系统

RuoYi是一个后台管理系统&#xff0c;基于经典技术组合&#xff08;Spring Boot、Apache Shiro、MyBatis、Thymeleaf&#xff09;主要目的让开发者注重专注业务&#xff0c;降低技术难度&#xff0c;从而节省人力成本&#xff0c;缩短项目周期&#xff0c;提高软件安全质量。 本…...

html实现邮件模版布局-flex布局table布局-demo

邮件模版布局 flex - 布局简单方便 兼容性差 table - 优点 就是兼容性好&#xff0c;其他没有优点 注&#xff1a;使用图片需要png最好&#xff0c;使用svg图google邮箱会出现不能使用的情况 效果图 flex布局 <!DOCTYPE html> <html lang"en" xmlns:th&qu…...

CENTOS7安装redis在/home/pms/software路径下,并且将redis加入到systemctl中

要将/home/software/redis-stack-server-7.2.0-v0/service/redis.service添加到systemctl系统管理&#xff0c;你可以执行以下步骤&#xff1a; 创建软连接&#xff1a; sudo ln -s /home/software/redis-stack-server-7.2.0-v0/service/redis.service /etc/systemd/system/r…...

二手的家具哪个网站做的好/专业关键词排名优化软件

题目大意: 平面上n个点,每次给出一个点,求这个点的k远点 题解: 什么叫做k远点呢。。。 1 2 3 4 5中5是第一远,4是第二远... 看来我语文学的不好 那么我们直接上k-D Tree求k邻近的方式求k远离即可 #include <queue> #include <cstdio> #include <cstring> #in…...

民政府公众信息网站建设/推广一次多少钱

所有题目均有四种语言实现。C++ 实现目录、Python实现目录、Java实现目录、JavaScript实现目录 题目 题目描述:去除文本多余空格,但不去除配对单引号之间的多余空格。给出关键词的起始和结束下标,去除多余空格后刷新关键词的起始和结束下标。输入描述: 输入为两行字符串: 第…...

广南网站建设/网络优化基础知识

本文由曹素杰&#xff08;阿里云 MVP 石化盈科信息技术有限责任公司 高级工程师&#xff09;提供&#xff0c;若使用请标明出处。 内存溢出的表现&#xff1a;a) CPU会飙升到100%&#xff0c;如果是多核则乘以核数b) 日志中会出现OutOfMemoryError 分析原因步骤&#xff1a;a) …...

wordpress新用户管理/营销型网站策划书

构造高可用性和高可靠性系统的一项重要原则是假定失效&#xff08;Design forfailure&#xff09;。换言之&#xff0c;你的设计模型应具有正如亚马逊的首席技术官&#xff08;CTO&#xff09;沃纳•威格尔&#xff08;Werner Vogels&#xff09;曾说的“一切事物随时有可能失效…...

哪家上市公司做视频网站/企业营销策划合同

JavaScript 异步编程2.1异步编程概述2.2同步模式/异步模式同步模式异步模式2.3回调函数2.4Promise (一种更优的异步编程统一方案)概述常见误区链式调用异常处理静态方法Promise.resoler()Promise.reject()并行执行Promise.all()Promise.race()执行时序Promise异步执行顺序的特殊…...

给传销做网站什么罪/腾讯广告投放推广平台

前面一篇展示了一个简单工厂模式&#xff0c;这一篇主要是对比&#xff0c;工厂方法模式比简单工厂模式好在哪里&#xff1f;为什么要用这个模式&#xff1f;这个模式的精髓在哪里&#xff1f; 就以计算器为例&#xff0c;结果图如下&#xff1a; 加减乘除运算都是继承自基类运…...