【Unity之FGUI】黑神章Fairy GUI控件详解

在这里插入图片描述


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创
👨‍💻 收录于专栏:就业宝典

🅰️推荐专栏

⭐-软件设计师高频考点大全



文章目录

    • 前言
    • 🪶 FGUI控件 详解【一】
      • 😶‍🌫️字体控件注意事项
      • 😶‍🌫️1.普通文本控件
      • 😶‍🌫️2.富文本控件
      • 😶‍🌫️3.输入文本控件
      • 😶‍🌫️4.组控件
      • 😶‍🌫️5.控制器(组件的一个功能)
      • 😶‍🌫️6.关联系统(组件的一个功能)
      • 😶‍🌫️7.标签(组件的一个功能)
    • 🅰️


前言

FGUI是一种用于游戏开发的GUI系统。它是一种轻量级的UI系统,具有高性能和可扩展性。FGUI使用自定义的UI编辑器来创建和管理UI界面,开发者可以使用编辑器中提供的各种组件和布局来设计和排版UI界面。FGUI还支持多分辨率适配和多语言本地化,使开发者能够轻松地创建适应不同设备和语言环境的UI界面。FGUI可以与各种游戏引擎和开发工具集成,如Unity和Cocos2d-x,使其可以在不同平台上使用。


🪶 FGUI控件 详解【一】


😶‍🌫️字体控件注意事项


导入字体资源包后,还需在项目设置中,进行路径填写,才可以选择显示

在这里插入图片描述

  • 1.系统字体(不建议使用)

  • 2.TTF字体(常用)支持ttf/ttc/otf字体文件
    发布后,字体文件不会被发布,需要自己手动将字体文件放置到引擎中Unity Resources或者Resources/Fonts目录下

字体设置
在这里插入图片描述

①系列:字体名称,只读
②采样字体大小:渲染方式为SDFAA才有意义,其它方式使用默认值16即可
③渲染方式
Smooth:抗锯齿,建议使用
Hinted Smooth:比Smooth更清晰,速度较慢,较小字体建议使用
SDFAA:使用SDF技术渲染字体,TextMeshPro时可使用
④斜体样式:SDFAA时才有,使用斜体时的倾斜角度15~60
⑤粗体分量:SDFAA时才有,使用粗体时,粗体的重量,-3~3


3.位图字体(特殊需求时使用)
位图字体就是使用图片来表示某个文字

在这里插入图片描述

首先需要导入字体图片然后,导入到位图字体编辑器中

在这里插入图片描述
而后就形成了一个字体包,可以放入文字中使用

注意:默认字体




   //2.默认字体需要自己手动设置
   //设置默认字体 要在显示面板之前
   //如果是放置在指定文件夹下 那么直接填写字体名即可
   UIConfig.defaultFont = "STHUPO";
   //如果没有放到指定路径下
   UIConfig.defaultFont = "Other/STHUPO";

   //3.如果字体文件放置在AB包中或者Resources下其他目录下,需要手动自己注册
   //手动从对应位置加载字体文件 
   Font font = Resources.Load<Font>("Other/STCAIYUN");
   //然后申明一个 动态字体类型对象
   DynamicFont dFont = new DynamicFont("STCAIYUN", font);
   //注册它
   FontManager.RegisterFont(dFont);

   //设置适配相关
   GRoot.inst.SetContentScaleFactor(1365, 768, UIContentScaler.ScreenMatchMode.MatchHeight);
   //包和依赖包的加载
   UIPackage package = UIPackage.AddPackage("UI/Teach");
   foreach (var item in package.dependencies)
   {
       UIPackage.AddPackage(item["name"]);
   }

   GComponent view = UIPackage.CreateObject("Teach", "TeachPanel").asCom;
   GRoot.inst.AddChild(view);

   #endregion

   #region 知识点三 字体相关问题解决
   //1.字体不带加粗 可以手动设置
   //FontManager.GetFont("字体名").customBold = true;

   //2.斜体和粗体不能同时使用 如果已经设置了customBold 不用设置customBoldAndItalic
   //FontManager.GetFont("字体名").customBoldAndItalic = true;

   //3.如果要使用TextMeshPro 需要在Unity编辑器的Scripting Define Symbols里增加 FAIRYGUI_TMPRO
//1.手动设置字体格式
//FontManager.GetFont("字体名").customBold = true;
//2.使用TextMeshPro 
//Unity编辑器的Scripting Define Symbols增加 FAIRYGUI_TMPRO

😶‍🌫️1.普通文本控件


    普通文本负责文本的显示功能
    不支持交互(鼠标触摸感应)、超链接和图文混排、HTML语法

在这里插入图片描述


在这里插入图片描述

  • 支持UBB语法

在这里插入图片描述

显示图片:[img]ui://包名/图片名[/img]_富文本才支持
超链接:[url=网址]超链接[/url]_富文本才支持
字体:[font=字体名]字体[/font]
字体大小:[size=10]text[/size]
粗体:[b]123[/b]
斜体:[i]123[/i]
下划线:[u]123[/u]
颜色:[color=#FFFFFF]123[/color]
[color=#FFFFFF,#000000]文字[/color] 两个颜色上下过渡
[color=#FFFFFF,#CCCCCC,#000000,#FFFF00]文字[/color]四个颜色可以做左右过渡或者双方向过渡

  • 支持文字模板

钻石数量:
{H=100}红钻{Y=200}银钻

在这里插入图片描述

 //1.获取文本
 GTextField text = view.GetChild("字体控件名").asTextField;
 text.text = "设置文字内容";
 //2.对齐方式
 text.align = AlignType.Left;
 text.verticalAlign = VertAlignType.Middle;
 //3.单行显示并设置大小
 text.singleLine = true;
 text.textFormat.size = 50;
 //4.动态创建文本
 GTextField txt = new GTextField();
 txt.SetSize(100, 100);
 txt.text = "哈喽·";
 view.AddChild(txt);
 //5.修改文本样式
 txt.text
 txt.textFormat.size 
 txt.textFormat.color
 //6.文本模板设置
 GTextField txt = view.GetChild("txtInfo").asTextField;
 //方式一:
 txt2.SetVar("jin", "500");
 txt2.SetVar("yin", "1000");
 txt2.FlushVars();
 //方式二:
 Dictionary<string, string> xxx = new Dictionary<string, string>();
 dic.Add("jin", "10000");
 dic.Add("yin", "1");
 txt2.templateVars = xxx;
 //7.关闭模板功能
 txt2.templateVars = null;

😶‍🌫️2.富文本控件


HTML语法点击进入

1.图片
<img src='ui://包名/图片名/>
<img src='ui://包名/图片名' width='20' height='20'/>
<img src='ui://包名/图片名' width='50%' height='50%'/>
2.超链接:
<a href='链接地址'>链接名字</a>
HtmlParseOptions.DefaultLinkColor = ...; //设置链接颜色
HtmlParseOptions.DefaultLinkBgColor = ...;
HtmlParseOptions.DefaultLinkHoverBgColor = ...;
  • 富文本支持交互(鼠标/触摸)
    • 富文本支持超链接和图文混排
      • 富文本支持HTML语法在这里插入图片描述
        在这里插入图片描述
    //1.获取富文本
    GRichTextField richTxt = view.GetChild("控件名").asRichTextField;
    richTxt.text = "";
    //2.动态创建富文本
    GRichTextField richTxt2 = new GRichTextField();
    richTxt2.SetSize(100, 100);
    richTxt2.SetPosition(20, 20, 0);
    richTxt2.text = "<a herf='www.baidu.com'>超链接3</a>";
    view.AddChild(richTxt2);

    //3.点击相关
    richTxt.onClick.Add(Click);
    richTxt.onClick.Add(() => {
        print("点击2");
    });
    richTxt.onClick.Remove(Click);
    richTxt.onClick.Clear();

    //4.超链接点击相关
    richTxt.onClickLink.Add((obj) =>
    {
        print(obj.data.ToString());
    });

}

    //HTML超链接样式 
    //1.全局设置
    HtmlParseOptions.DefaultLinkUnderline = true;
    HtmlParseOptions.DefaultLinkColor = Color.red;
    HtmlParseOptions.DefaultLinkBgColor = Color.green;
    HtmlParseOptions.DefaultLinkHoverBgColor = Color.yellow;

    //2.单个富文本设置
    HtmlParseOptions options = richTxt.richTextField.htmlParseOptions;
    options.linkUnderline = false;
    options.linkColor = Color.green;
    options.linkBgColor = Color.red;

😶‍🌫️3.输入文本控件


在这里插入图片描述

  • 输入限制:正则表达式规则
  • 键盘类型:在手机上输入时是手机键盘类型
 //1.获取输入文本控件
 GTextInput input = view.GetChild("inputTxt").asTextInput;
 //2.控件相关API
 input.text = "输入的字符串";
 input.maxLength = 20; //最大长度
 input.displayAsPassword = false; //密码开关
 input.restrict = ""; //输入限制
 input.keyboardType = 0; //键盘类型
 input.promptText = "请输入密码"; //提示内容
 input.SetSelection(0, 4); //设置当前输入框选中的字符串范围
 //3.事件监听相关
 input.onChanged.Add(() =>
 {
     print(input.text);
 });
 //4.焦点事件监听
 input.onFocusIn.Add(() =>
 {
     print("焦点进入");
 });
 input.onFocusOut.Add(() =>
 {
     print("焦点离开");
 });
 //主动设置焦点
 input.RequestFocus();

 //输入完成事件监听(设置为单行时PC上有用)
 input.onSubmit.Add(() =>
 {
     print("输入完成" + input.text);
 });

😶‍🌫️4.组控件


  • 组是组件内用于可以批量管理元件和控件的特殊对象,统一管理多个元件

相当于变成一个对象的子对象的统一管理

在舞台上选定一个或多个元件、控件,然Ctrl+G,建立成组
在这里插入图片描述

在这里插入图片描述

  • 排除隐藏对象:勾选后,隐藏对象不会参与排列
 //1.获取高级组对象
 GGroup g = view.GetChild("group1").asGroup;

 //2.相关API

 g.y = 0; //设置位置
 g.visible = false; //设置显隐
 g.layout = GroupLayoutType.Horizontal; //改变布局
//3.判断归属
 GImage img = UIPackage.CreateObject("包名", "组名").asImage;
 view.AddChild(img);
 //设置该元件属于某一组
 img.group = g;
 for (int i = 0; i < view.numChildren; i++)
 {
     //我们只有通过这种遍历的方式 找到 组件中的 元件 是否在某一个组当中
     if( view.GetChildAt(i).group == g )
     {
         print(view.GetChildAt(i).name + "在组当中" + g.name);
     }
 }


😶‍🌫️5.控制器(组件的一个功能)


核心功能之一:如按钮就用到了控制器

  • 1.分页功能:一个组件可以切换不同的页面
    在这里插入图片描述

  • 2.按钮状态: 按钮通常有按下、鼠标悬浮等多个状态,我们可以利用控制器为每个状态安排不同的显示内容

  • 3.属性变化:利用控制器,我们可以使元件具有多个不同的形态,并且可以方便地切换

在这里插入图片描述

  • 导出为组件属性:可以在组件属性上面显示
  • 分页功能的切换:有以下功能
    在这里插入图片描述
      //1.获取控制器
      GComponent controller = view.GetChild("controllerTest").asCom;
      Controller c = controller.GetController("myController");
      //2.控制器重要API
      c.selectedIndex = 1;       //通过切换控制器页签  会触发事件        
      c.selectedPage = "page2";  //通过名字去切换页签 会触发事件
      c.SetSelectedIndex(1);     //通过索引切换不会触发事件  
      c.SetSelectedPage("page2");//通过名字去切换页签 不会触发事件
      GearBase.disableAllTweenEffect = true;关闭所有控制器的缓动播放
      //3.控制器事件相关
      c.onChanged.Add(() =>//控制器变化时监听
      {
          print("切换页签");
      });
      c.SetSelectedIndex(1);      
      GObject obj = controller.GetChild("bk");
      obj.onGearStop.Add(() =>//控制器有缓动效果 缓动结束后事件监听
      {
          print("结束缓动");
      });

😶‍🌫️6.关联系统(组件的一个功能)


类似于UGUI中的九宫格锚点,但是FGUI操作有点麻烦

  • 默认为左边的为控件的方位,右边为容器的就是组件的方位
    在这里插入图片描述

FairyGUI实现自动布局的核心技术

  • 快捷按钮
    在这里插入图片描述
  //1.设置关联
  obj.AddRelation(view, RelationType.Left_Left);
  obj.AddRelation(view, RelationType.Top_Top);
  //2.删除关联
  obj.RemoveRelation(view, RelationType.Left_Left);
  obj.RemoveRelation(view, RelationType.Top_Top);
  obj.relations.ClearAll();  //移除和所有对象的关联
  obj.relations.ClearFor(view);  //移除和指定对象的所有关联

😶‍🌫️7.标签(组件的一个功能)


标签主要是由文本和图片组成 ,是一个组合控件(组件)

  • 用途: 当我们需要在UI中使用图片+文字的组合显示时

  • 规则:组成完整标签的两部分

1.文本:可以是普通文本、富文本、标签、按钮 ——元件名字一定为title(自动)

2.图片:装载器、标签、按钮——元件名字一定为icon

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

  • 将标签拖到组件上之后,即可一键设置在这里插入图片描述

 //1.获取标签控件
 GLabel label = view.GetChild("标签名").asLabel;
 label.text = "";
 label.icon = "ui://xx/xxxx";
 
 GObject obj = view.GetChild("标签名");
 obj.text = "";
 obj.icon = "ui://xx/xxx";
 //2.标签控件常用API
 label.GetChild("title").asTextField; //获取title使用他的API
 label.GetChild("icon").asLoader//获取icon使用他的API
 label.titleColor; //文本颜色
 label.titleFontSize = 30;//文本大小

🅰️


⭐【Unityc#专题篇】之c#进阶篇】

⭐【Unityc#专题篇】之c#核心篇】

⭐【Unityc#专题篇】之c#基础篇】

⭐【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

⭐【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/673252.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python采集汽车价格数据

python采集汽车价格数据 一、项目简介二、完整代码一、项目简介 本次数据采集的目标是车主之家汽车价格数据,采集的流程包括寻找数据接口、发送请求获取响应、解析数据和持久化存储,先来看一下数据情况,完整代码附后: 二、完整代码 #输入请求页面url #返回html文档 imp…

6.3 Go 结构体(Struct)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

普华永道信任危机:上市公司解约风波与反思

在全球会计业界的星空中&#xff0c;普华永道无疑是那颗最为耀眼的星之一。然而&#xff0c;近日这颗星却遭遇了前所未有的信任危机。这家大名鼎鼎的四大会计师事务所之一&#xff0c;近期陷入了上市公司解约的风波之中&#xff0c;其声誉与地位正面临严峻挑战。 就在昨晚&…

Word2Vec模型的引入介绍与相关概念

一 、Word2Vec模型的背景引入 1.1 One-hot模型 One-hot模型是是用N位的状态寄存器对N个状态进行编码 如下所示&#xff0c;是有4个样本&#xff0c;每个样本都有三个特征&#xff0c;特征1表示当前样本的性别。 我们喂给算法怎么样的数据&#xff0c;算法就会给我们一个怎么…

学习笔记——IP地址网络协议——网络层(IP)协议

一、网络层(IP)协议 网络层(被称为IP层)但网络层协议并不只是IP协议&#xff0c;还包括ICMP(Internet Control Message Protocol)协议、IPX(Internet Packet Exchange)协议等。 1、IP协议 IP(Internet Protocol)本身是一个协议文件的名称&#xff0c;该协议文件的内容非常少&…

使用python统计word文档页数

使用python统计word文档页数 介绍效果代码 介绍 使用python统计word文档的页数 效果 代码 import os import comtypes.clientdef get_word_page_count(docx_path):try:# Initialize the COM objectword comtypes.client.CreateObject(Word.Application)word.Visible False…

【Qt】探索Qt绘图世界:自定义控件与视觉效果的全面指南

文章目录 前言&#xff1a;1. 绘图基本概念2. 绘制各种形状3. 绘制文字&#xff08;显示文字&#xff09;、设置画笔4. 画刷5. 绘制图片6. 特殊的绘图设备总结&#xff1a; 前言&#xff1a; 在软件开发中&#xff0c;图形用户界面&#xff08;GUI&#xff09;的设计是至关重要…

【面试题】CAP理论、BASE理论及其注册中心选型

1.CAP理论 CAP&#xff1a;指的是在一个分布式系统中&#xff0c;Consistency&#xff08;一致性&#xff09;、Availability&#xff08;可用性&#xff09;、Partition Tolerance&#xff08;分区容错性&#xff09;&#xff0c;三者不可同时获得 一致性&#xff08;C&#x…

成功解决“IndexError: pop index out of range”错误的全面指南

成功解决“IndexError: pop index out of range”错误的全面指南 引言 在Python编程中&#xff0c;处理列表&#xff08;list&#xff09;、双端队列&#xff08;deque&#xff09;或其他可迭代对象时&#xff0c;我们经常使用pop()方法来移除并返回指定索引处的元素。然而&am…

图解 Python 编程(10) | 错误与异常处理

&#x1f31e;欢迎来到Python的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f4c6;首发时间&#xff1a;&#x1f339;2024年6月2日&…

图解 IPv6 地址范围

1、 IPv6 多播地址范围 2、1 - 接口本地&#xff1c;2 - 链路本地&#xff1c;5 - 站点本地&#xff1c;8 - 组织本地&#xff1c;E - 全局 3、Well-Known Multicast Addresses

TiDB-从0到1-部署篇

TiDB从0到1系列 TiDB-从0到1-体系结构TiDB-从0到1-分布式存储TiDB-从0到1-分布式事务TiDB-从0到1-MVCCTiDB-从0到1-部署篇 一、TiUP TiUP是TiDB4.0版本引入的集群运维工具&#xff0c;通过TiUP可以进行TiDB的日常运维工作&#xff0c;包括部署、启动、关闭、销毁、弹性扩缩容…

U-boot、linux内核、根文件系统移植以及程序

终于这几天把这个移植的流程过了一遍&#xff0c;所以特此回来总结。 U-boot移植 首先是U-boot移植。Linux 系统要启动就必须需要一个 bootloader 程序&#xff0c;也就说芯片上电以后先运行一段bootloader 程序。这段bootloader程序会先初始化DDR等外设&#xff0c;然后将Li…

linux sed命令替换文件端口

1、需求描述&#xff1a;因sed -i ‘s/旧端口/新端口/g’ 文件&#xff0c;替换会直接增加端口导致端口直接追加后面&#xff0c;因此需要修改 要求&#xff1a;2300替换为23003&#xff0c;23001替换为23004 <value>192.168.1.133</value></constructor-arg>…

【学习Day4】计算机基础

✍&#x1f3fb;记录学习过程中的输出&#xff0c;坚持每天学习一点点~ ❤️希望能给大家提供帮助~欢迎点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;指点&#x1f64f; ❤️学习和复习的过程是愉快嘚。 1.7.3 流水线 流水线&#xff08;pipeline&#xff09;技术…

考研数学考到110+分,到底有多难?

很难&#xff01; 大家平时在网上上看到很多人说自己考了130&#xff0c;其实这些人只占参加考研数学人数的极少部分&#xff0c;有个数据可以展示出来考研数学到底有多难&#xff1a; 在几百万考研大军中&#xff0c;能考到120分以上的考生只有2%。绝大多数人的分数集中在30…

数字经济中的哪些行业或领域最依赖云服务器?

数字经济是互联网发展的产物&#xff0c;近几年随着网络发展&#xff0c;有好些个行业或领域那可真是对云服务器“爱得深沉” 以电子商务为例&#xff0c;典型的如亚马逊、阿里巴巴等电商巨头&#xff0c;它们所面对的是海量且繁杂的商品信息&#xff0c;涵盖从商品的详细规格…

01 - 嵌入式之软件的安装

1 - 首先我们需要安装keil5软件&#xff0c;我们可以在官网找到进行下载~ ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/29f87fa21a4744af9ce288a1bc607c20.png)2 - 下载后就得到如下这个exe文件&#xff1a; 3 - 右击管理员运行 4 - 安装步骤 安装的过程…

浏览器运行原理:网页被解析过程、script元素和页面解析的关系、defer和async使用;V8引擎执行原理(执行js)

一、浏览器渲染页面的流程 1.如何找到服务器 2.找到服务器如何下载对应的静态资源 输入完服务器地址&#xff0c;下载下来的一般是html文件&#xff0c;在解析html文件过程中&#xff0c;遇到link引用了css文件&#xff0c;就下载对应的css文件&#xff0c;js文件同理 3.一个…

飞书API(11):阿里云MaxCompute分区表入库

一、引入 前面入库阿里云 MaxCompute 的数据都是读取之后直接写入&#xff0c;保留数据最新的状态&#xff0c;如果我要保留历史的状态&#xff0c;怎么办呢&#xff1f;MaxCompute 表有一个分区功能&#xff0c;可以自行定义分区。我们可以使用 MaxCompute 表的分区功能&…