Fairy下载和使用
写在最前:本系列中将会涉及到 Unity,C#,Lua和FairyGUI(FGUI)。
FairyGUI介绍
官网: FairyGUI
编辑器下载: FairyGUI
截至文档记录最新版: https://res.fairygui.com/FairyGUI-Editor_2022.1.0p1.zip
编辑器使用教程: FairyGUI
Unity版教程配套示例资源下载:
Master:https://github.com/fairygui/FairyGUI-unity/archive/refs/heads/master.zip
Release:https://github.com/fairygui/FairyGUI-unity/archive/refs/tags/4.3.0.zip
FairyGUI是游戏开发领域中制作UI的一个利器。它支持Unity,Cocos2dx,Egret,LayaAir,Cocos Creator等,基本上国内主流的引擎都支持了。而且使用FGUI编辑器制作UI的效率非常高,它有很多独特的功能,比如控制器,关联系统,分包,分支等,全部零代码,方便策划或者美术快速上手搭建UI。
获取FairyGUI Unity SDK
下载配套的示例资源并解压到合适的位置。使用Unity打开示例demo,工程Unity版本:2018.4.29f1,建议使用对应Unity的版本或更高的版本打开。我手头目前使用的是Unity2021.3.26f1。打开后可以看到如下图所示的目录结构:

将“Extensions”,“Resources”和“Scripts”拷贝到自己项目Assets下的一个空文件夹下如“FGUI”,即可为自己的项目引入FairyGUI库。
注意:FairyGUI支持TextMeshPro,所以在“FairyGUI-TMP.shader”文件中要注意“TextMesh Pro Shaders”的引用。
FairyGUI编辑器的概念词
1、包:FairyGUI是以包为单位组织资源的。包在文件系统中体现为一个目录。assets目录下每个子目录都表示一个包。默认情况下包和包之间无法建立依赖关系,需要包下面的资源设置为“导出”,才可以被其他包使用。包的定义
2、舞台:舞台是组件的编辑区域。中间区域就是舞台

3、元件:每个舞台中的组成元素我们称之为元件,元件的类型有很多,他们是:
- 基础元件:图片、图形、动画、装载器、文本、富文本、组、组件。
- 组合型元件:标签、按钮、下拉框、滚动条、滑动条、进度条。
- 特殊元件:列表。
- 在舞台上选中任意一个元件,右边的属性栏(检测器)会出现当前元件的属性数据。元件详情
4、组件:组件是FairyGUI中的一个基础容器。组件可以包含一个或多个基础显示对象(元件),也可以包含组件。组件详情
- 组件的创建:在资源库中右键“xx包”,即可在当前包下面创建组件。
5、右键导出:资源库中的资源设置为导出后,才能被其他包引用,以及在代码中动态的获取。设置为导出的资源会有红点提示。右键导出
6、发布:发布有三种方式:全部发布,仅发布定义和发布。全部发布和发布就字面意思,发布全部包和发布当前活跃包。而当资源越来愈多的时候,一个包的发布时间会越来越长,这时如果我们只是修改了界面参数,那就可以使用仅发布定义来跳过资源纹理集的重新生成。这样子可以提高发布速度。详情在主工具栏
7、更多的请阅读更加具体的编辑器使用教程
创建Unity工程
1、创建一个Unity,导入FairyGUISDK。
注意:在导入FairyGUISDK后如果出现Shader报错,请检查“Window→TextMeshPro”是否存在,如果不存在尝试导入TextMeshPro支持库。
如果存在,请尝试查找工程中是否存在“TMPro_Properties”文件,找不到的话请执行“Window→TextMeshPro→Import TMP Essential Resources”,之后修改报错的位置,将TMPro_Properties和TMPro的引用指向正确位置。
FairyGUI项目创建、配置和发布
1、下载并解压FairyGUI编辑器,双击“FairyGUI-Editor.exe”打开。


2、(可选)点击“文件→切换颜色空间”,将UI编辑器的颜色空间和引擎中的设置一样。Linear 和 Gamma 两种,后面也可以切换。
3、点击“创建新项目”,会弹出创建项目窗口,这里可以设置项目的名字、位置和类型。这里我使用的引擎是Unity,项目位置建议放置到工程的Assets同级目录中,方便后期管理。点击“创建”进入正式的UI编辑窗口中。

4、编辑窗口中,“资源库”存放所有的资源和UI,毕竟UI也是资源。资源库中默认会有个“Package1”包,“Package1”包下存在一个被导出的组件“Component1”。按照项目的习惯重命名包和组件。比如我习惯在组件名字前使用UI来表示这个组件是UI界面,Comp开头表示这是个UI中的自定义组件需要代码操作,其他命名则为默认,之后的发布代码插件会详细说明。这里使用Test作为测试示例。
改之前的:
改之后的:
5、点击“文件→发布设置”菜单,可以设置项目资源包的发布路径,发布路径分为包设置和全局设置,包设置中可以为当前选中活跃包设置单独的发布路径,默认“使用全局配置”。

6、点击“全局设置”。
发布路径中支持相对路径,如果你的FGUI工程和Assets同级目录,那你的发布路径可以设置为“../Assets/UI存放路径”,这时候点击发布或全部发布,就可以在你UI存放路径的文件夹下发现一堆FGUI生成出来的二进制文件和相关的纹理集等,UI存放路径根据自己的项目文件结构来。这里我测试在Resources下新建一个UI文件夹来存放所有的UI,发布路径:../Assets/Resources/UI
发现一堆资源后,想将一堆的资源按包分类可以在发布路径后面加{publish_file_name},这时候再次点击发布后,生成文件就会按钮当前文件所在的包进行划分。发布路径:../Assets/Resources/UI/{publish_file_name}
注意:发布出来的资源只会同名覆盖,而不会删除。也就是说如果文件A被你在FGUI工程中删除了,之前在UI存放路径下的文件A还是存在的。
7、回到Unity中,在“Hierarchy”面板中右键点击“FairyGUI→UI Panel”,创建UI面板。

8、选中UIPanel,点击“Inspector”面板中的“Package Name”会出现之前导出的UI资源,依次点选“Test”和“UITest”后点击OK即可在场景中查看UITest。

注意:
1、如果这时候Game窗口出现了双重UI,请检查是否有多个相机同时渲染了UI层级。建议使用默认FairyGUI相机“Stage Camera”渲染UI即可。
2、如果Game窗口没有显示UI,运行后也没有显示,则排查一下UI界面是否有内容显示,以及当前Unity版本中是否需要将UI相机加入到主相机的“Stack”列表中。
这篇文章只是粗略的概括一下FGUI的UI导出和展示流程,详细的UI制作可以查看编辑器使用教程
相关文章:
Fairy下载和使用
写在最前:本系列中将会涉及到 Unity,C#,Lua和FairyGUI(FGUI)。 FairyGUI介绍 官网: FairyGUI 编辑器下载: FairyGUI 截至文档记录最新版: https://res.fairygui.com/FairyGUI-Ed…...
隧道HTTP优化程序示例
作为专业爬虫程序员,我们经常需要使用代理服务器处理大量的请求。但是,单一服务器往往无法承担高并发请求和HTTPS加密的压力,这时候我们可以利用CDN来优化性能,并实现反向代理和HTTPS加速。下面,让我们一步步来了解。 …...
Flink源码之State创建流程
StreamOperatorStateHandler 在StreamTask启动初始化时通过StreamTaskStateInitializerImpl::streamOperatorStateContext会为每个StreamOperator 创建keyedStatedBackend和operatorStateBackend,在AbstractStreamOperator中有个StreamOperatorStateHandler成员变量…...
selenium常见等待机制及其特点和使用方法
目录 1、强制等待 2、隐式等待 3、显示等待 1、强制等待 强制等待是在程序中直接调用Thread.sleep(timeout) ,来完成的,该用法的优点是使用起来方便,语法也比较简单,缺点就是需要强制等待固定的时间,可能会造成测试的时间过…...
C++物件数组的常用方法介绍
以下代码建立了一个物件数组Student,并展示了如何计算物件数组的长度,如何从物件数组中找到特定的对象,如何根据数组的不同参数进行排序,以及如何找到最大和最小值。 #include <iostream> #include <algorithm>using…...
云计算:新一代的技术革命
云计算,作为21世纪的一项重要技术革命,已在全球范围内引发了深远的影响。它改变了我们存储和处理数据的方式,使得企业无需再建设和维护昂贵的本地服务器和数据中心。本文将深入探讨云计算的基本概念,类型,主要优点&…...
数据结构—图的应用
6.4图的应用 概念回顾—生成树 生成树:所有顶点均由边连接在一起,但不存在回路的图。 一个图可以有许多棵不同的生成树、含有n个顶点 n-1 条边的图不一定是生成树所有生成树具有以下共同特点 生成树的顶点个数与图的顶点个数相同;生成树是图的…...
Unity 鼠标控制 UI 放大、缩小、拖拽
文章目录 1. 代码2. 测试场景 1. 代码 using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems;public class UIDragZoom : MonoBehaviour, IDragHandler, IScrollHandler {private Vector2 originalSize;private Vector2 originalPosition;private RectTr…...
tensorflow 模型计算中,预测错误;权重参数加载
tensorflow 模型计算中,预测错误;权重参数加载 tensorflow 模型计算主要代码(正确代码) linear1_kernel_initializer tf.constant_initializer(numpy.transpose(data["linear1.weight"])) linear1_bias_initializer …...
Jay17 2023.8.14日报 即 留校集训阶段性总结
8.14 打了moeCTF,还剩一题ak Web。 Jay17-集训结束阶段性总结: 集训产出: 自集训开始以来一个半月,最主要做的事情有三。 一是跟课程,复习学过的知识,学习新的知识;目前课程已大体听完&…...
【C语言】小游戏-扫雷(清屏+递归展开+标记)
大家好,我是深鱼~ 目录 一、游戏介绍 二、文件分装 三、代码实现步骤 1.制作简易游戏菜单 2. 初始化棋盘(11*11) 3.打印棋盘(9*9) 4.布置雷 5.计算(x,y)周围8个坐标的和 6.排查雷 <1>清屏后打印棋盘 <2>递归展开 <3>标记雷 四、完整代…...
云服务 Ubuntu 20.04 版本 使用 Nginx 部署静态网页
所需操作: 1.安装Nginx 2.修改配置文件 3.测试、重启 Nginx 4.内部修改防火墙 5.配置解析 6.测试是否部署成功 1.安装Nginx // 未使用 root 账号 apt-get update // 更新apt-get install nginx // 安装 nginx 1.1.测试是否安装没问题 在网页上输入云服务的公网…...
无后效性
动态规划的概念 在上例的多阶段决策问题中,各个阶段采取的决策,一般来说是与时间有关的,决策依赖于当前状态,又随即引起状态的转移,一个决策序列就是在变化的状态中产生出来的,故有“动态”的含义…...
Kubernetes系列-删除deployment和pod
通过deployment创建的pod直接执行delete是不会正常被删除的,因为deployment中设置了pod的数量,deployment会动态维护pod的数量,倘若pod数量少于约定数量,deployment会创建pod,直到pod数量达到约定数量才会停止。 如若…...
kotlin字符串方法
以下是一些常用的 String 方法示例: 1.获取字符串长度: val str "Hello, Kotlin" val length str.length2.字符串比较: val str1 "apple" val str2 "banana" val compareResult str1.compareTo(str2)3…...
ubuntu篇---配置FTP服务,本机和docker安装
ubuntu篇---配置FTP服务 一、本机安装1.1 安装FTP服务器软件1.2 配置FTP服务 二、docker安装(我用的这个)2.1 创建 目录2.2 启动脚本2.3 访问2.4 如何创建一个新的用户2.5 测试2.6 使用 一、本机安装 1.1 安装FTP服务器软件 ubuntu安装vsftp sudo apt…...
SpringBoot中properties、yml、yaml的优先级
原理 配置优先级低的会先加载然后会被配置优先级高的覆盖 验证 创建SpringBoot项目(网址) 在resource目录下创建application.properties、application.yml、application.yaml文件 运行 结论 优先级顺序: properties>yml>yaml...
SHELL 基础 SHELL注释 及 执行SHELL脚本的四种方法
SHELL 脚本编写规范 : 脚本开头 : # 脚本第一行 : #! /bin/bash 或 #!/bin/sh ( 脚本解释器 ) # 程序段开头需要加 版本版权信息 ,例如 : # Date 创建日期 # Author : 作者 # …...
【Spring】深入探索 Spring AOP:概念、使用与实现原理解析
文章目录 前言一、初识 Spring AOP1.1 什么是 AOP1.2 什么是 Spring AOP 二、AOP 的核心概念2.1 切面(Aspect)2.2 切点(Pointcut)2.3 通知(Advice)2.4 连接点(Join Point) 三、Sprin…...
LocalDate介绍和使用
1.什么是 LocalDate? 在我们开始之前,让我先简单介绍一下 LocalDate。它是 Java 8 中引入的日期类,用于表示不带时区信息的日期。也就是说,它专注于日期,并忽略了具体的时间。这样,我们就可以专心解决那些…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
