UG4——FairyGUI系列
UG4——FairyGUI系列
UI系统第四部分——系列代号UG4
FairyGUI
FairyGUI是跨引擎的开源UI解决方案,它包含一个UI编辑器,以及多个流行游戏引擎的运行库(SDK)
支持包括 Unity、Unreal、Cocos2dx、Egret、Laya、Flash 等等游戏引擎、
需要时可以在FairyGUI官网上去查看官方文档:
编辑器教程:编辑器使用基础 - 编辑器教程 | FairyGUI
UnitySDK教程:特色功能 - Unity SDK 教程 | FairyGUI
FairyGUI编辑器部分功能专业版才有
本系列学习内容:
FairyGUI基础
基础必备
FairyGUI编辑器下载和UnitySDK下载
编辑器基础使用
项目设置
包的概念
组件
发布UI
使用发布的UI
加载包
UIPanel加载界面
动态加载界面
StageCaera和UIContentScaler
UIConfig
FairyGUI中的基础元件
元件
图片
图形
动画
序列帧动画元件
骨骼动画元件
装载器
3D装 ...
UD4——二进制系列
UD4——二进制系列
数据持久化第四部分——系列代号UD4
二进制文件
二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数,它的基数为2,进位规则是“逢二进一”
计算机中存储的数据本质上都是2进制数的存储,在计算机中位(bit)是最小的存储单位,1位就是一个0或者一个1
也就是说一个文件的数据本质上都是由n个0和1组合而成的,通过不同的解析规则最终呈现在我们的眼前。
本系列学习内容
各类型数据转字节数据
文件操作相关
文件相关
文件流相关
文件夹相关
C#类对象的序列化和反序列化
序列化
反序列化
加密
知识补充
Unity中添加菜单栏功能
Excel数据读取
导入Excel相关Dll包
Excel数据读取
学习二进制的原因
之前我们学过的xml和json都是用特定的字符串组合规则来读写数据的。
清晰易懂是他们的共同好处,但是也是一把双刃剑,
比如如果我们用xml或者json存储数据,只要玩家找到对应的存储信息,就能够快速修改其中的内容。
而且由于他们把数据转换成了对应的xml或者json字符串,我们最终在存储数据时 ...
UG3L18——Canvas Group 画布组
UG3L18——Canvas Group 画布组
问题:如何整体控制一个面板的淡入淡出等
如果我们想要整体控制一个面板的淡入淡出 或者 整体禁用
使用目前学习的知识点 是无法方便快捷的设置的
Canvas Group
为面板父对象添加 CanvasGroup组件 即可整体控制
Canvas Group 参数相关
Alpha:整体透明度控制
Interactable:是否是可交互的
Blocks Raycasts:整体射线检测设置
Ignore Parent Groups:是否忽略父级CanvasGroup的作用
UG3L17——自动布局组件
UG3L17——自动布局组件
自动布局
虽然 UGUI 的 RectTransform 已经非常方便的可以帮助我们快速布局
但 UGUI 中还提供了很多可以帮助我们对UI控件进行自动布局的组件
他们可以帮助我们自动的设置UI控件的位置和大小等
自动布局的工作方式一般是:自动布局控制组件 + 布局元素 = 自动布局,其中:
自动布局控制组件:Unity 提供了很多用于自动布局的管理性质的组件用于布局
布局元素:具备布局属性的对象们,这里主要是指具备 RectTransform 的UI组件
布局元素的布局属性
在 Inspector 窗口左下角选择 Layout Properties
要参与自动布局的布局元素必须包含布局属性,布局属性主要有以下几条:
Minmum width:该布局元素应具有的最小宽度
Minmum height:该布局元素应具有的最小高度
Preferred width:在分配额外可用宽度之前,此布局元素应具有的宽度
Preferred height:在分配额外可用高度之前,此布局元素应具有的高度
Flexible width:此布局元素应相对于其同级而填充的额外 ...
UG3L16——异形按钮
UG3L16——异形按钮
异形按钮
图片形状不是传统矩形的按钮
如何让异形按钮能够准确点击
通过添加子对象的形式
按钮之所以能够响应点击,主要是根据图片矩形范围进行判断的
它的范围判断是自下而上的,意思是如果有子对象图片,子对象图片的范围也会算为可点击范围
那么我们就可以用多个透明图拼凑不规则图形作为按钮子对象用于进行射线检测
具体一点来说,就是设置一个背景Image,并为其添加一个按钮子对象
按钮的脚本使用的Image改为父对象的image,自身图片改为透明图片
为按钮设置多个透明image子对象,最终拼凑成符合背景形状
通过代码改变图片的透明度响应阈值
该方法相比上个方法较占用内存
第一步:修改图片参数 开启Read/Write Enabled开关,一定要打开!否则会报错
第二步:通过代码修改图片的响应阈值
123456789101112using UnityEngine;using UnityEngine.UI;public class Lesson23 : MonoBehaviour{ public Image img; void ...
UG3L15——模型和粒子显示在UI之前
UG3L15——模型和粒子显示在UI之前
模型显示在UI之前
直接用摄像机渲染3D物体
Canvas的渲染模式只要不是覆盖模式
摄像机模式 和 世界(3D)模式都可以让模型显示在UI之前(Z轴在UI元素之前即可)
注意:
摄像机模式时建议用专门的摄像机渲染UI相关
面板上的3D物体建议也用UI摄像机进行渲染
将3D物体渲染在图片上,通过图片显示
专门使用一个摄像机渲染3D模型,将其渲染内容输出到Render Texture上
类似小地图的制作方式,再将渲染的图显示在 RawImage 上,即可让拍摄3D模型的摄像机的拍摄内容显示在UI上
该方法适用于只有一个模型的渲染,如果使用多个摄像机制作这样的贴图,性能消耗较大
该方式 不管Canvas的渲染模式是哪种都可以使用
粒子特效显示在UI之前
粒子特效的显示和3D物体类似
注意点:
在摄像机模式下时
可以在粒子组件的 Renderer 相关参数中改变排序层
让粒子特效始终显示在其之前不受Z轴影响
UG3L14——Mask 遮罩
UG3L14——Mask 遮罩
遮罩
在不改变图片的情况下,让图片在游戏中只显示其中的一部分
如何使用遮罩
实现遮罩效果的关键组件时 Mask 组件
通过在父对象上添加 Mask 组件即可遮罩其子对象
Show Mask Graphic 是否显示遮罩的图形,不勾选,遮罩用的图片不显示
注意!
想要被遮罩的 Image 需要勾选 Maskable
只要父对象添加了 Mask 组件,那么所有的UI子对象都会被遮罩(包括子对象的子对象)
遮罩父对象图片的制作,不透明的地方显示,透明的地方被遮罩
UG3L13——屏幕坐标转UI相对坐标
UG3L13——屏幕坐标转UI相对坐标
RectTransformUtility
RectTransformUtility 公共类是一个 RectTransform 的辅助类
主要用于进行一些 坐标的转换等等操作
其中对于我们目前来说 最重要的函数是 将屏幕空间上的点,转换成UI本地坐标下的点
将屏幕坐标转换为UI本地坐标系下的点
RectTransformUtility.ScreenPointToLocalPointInRectangle()
参数一:相对父对象的坐标系(需要RectTransform类型,且一定是自己的父对象,否则转换可能出现偏差! )
参数二:屏幕点(要转换的相对于屏幕坐标系的点,使用 PointerEventData 的 position 会更准确)
参数三:摄像机(需要为UI的摄像机,可以直接用 PointerEventData 的 enterEventCamara)
参数四:最终得到的点(Vector2 类型,使用 out 关键字,需要在使用该函数前就声明好,转换完成后该变量就会转载转换好的点)
一般配合拖拽事件使用,效果远比 位置 ...
UG3L12——EventTrigger 事件触发器
UG3L12——EventTrigger 事件触发器
EventTrigger
事件触发器是EventTrigger组件,它是一个集成了上节课中学习的所有事件接口的脚本
它可以让我们更方便的为控件添加事件监听
EventTrigger可以让我们写更少的代码,可以在面板类中处理面板控件的事件逻辑,更加的面向对象,便于管理
如何使用事件触发器
需要声明一个参数为 BaseEventData 类型的方法,参数用来表示本次监听事件的具体数据(例如点击时间位置等)
可以根据使用的监听类型,将参数 as 成其派生类(例如用于 PointerEnter 的函数可以将参数 as 成 PointerEventData 使用)
拖脚本进行关联
假设要为按钮添加一个监听鼠标进入的事件
在Add New Event Type之后,在脚本内根据要求写好函数,然后将脚本挂载到某个对象(不一定要挂载到自己上)
将挂载脚本的对象拖入左下角的参数上,再选择拖入对象上的函数,
注意!需要选择动态参数类型的函数,否则参数不能获取到监听事件数据
1234567891011using UnityEn ...
UG3L11——UI事件监听接口
UG3L11——UI事件监听接口
UI事件监听接口
目前所有的控件都只提供了常用的事件监听列表
如果想做一些类似长按,双击,拖拽等功能是无法制作的
或者想让 Image 和 Text,RawImage三大基础控件能够响应玩家输入也是无法制作的
而事件接口就是用来处理类似问题
让所有控件都能够添加更多的事件监听来处理对应的逻辑
好处:
需要监听自定义事件的控件挂载继承实现了接口的脚本就可以监听到一些特殊事件
可以通过它实现一些长按,双击拖拽等功能
坏处:
不方便管理,需要自己写脚本继承接口挂载到对应控件上,比较麻烦
事件接口种类
使用所有相关接口都需要引用命名空间 UnityEngine.EventSystems
注意,以下的大部分事件接口需要打开 Raycast Target 才能使用,请注意是否打开!
常用接口
鼠标指针(或者触屏点击)和操作相关
需要继承的接口
监听函数名
作用
IPointerEnterHandler
OnPointerEnter
当指针进入对象时调用 (鼠标进入)
IPointerExitHandler
OnPointe ...