【Unity】UI界面的热更新技术 FairyGUI的使用流程

zz/2024/4/19 23:11:54
需求环境
       通常在项目中我们会使用MVC的方式去构建界面框架,而以往我们也会使用NGUI,UGUI,或者DaikonGUI等等方案去实现界面的搭建。
       这些UI方案各有优点,也都适用于我们的工程,但在实际项目中,热更新的逻辑代码意味着游戏界面也需要热更新,如果能有一种界面架构可以实现界面与代码的分离,实现热更新,并且代码逻辑本身也能热更新,那么就再好不过了。
       于是,FairyGUI就由此诞生,FairyGui有自己单独的编辑器,编辑出的配置文件仅仅以资源的方式存在于Unity中,并且它支持Lua语言的脚本逻辑,也就是说,如果我们使用之前配置好的sLua加上FairyGUI,就可以实现从逻辑到界面的全部热更新。

插件信息
官网:http://www.fairygui.com/
       插件在主页中有文字教程也有视频教程,我们这里仅仅针对【解决方案】系列做一些准备工作与测试。
       在继续下面的内容之前,确保你已经了解了sLua引用外部接口的流程,也确保你至少看过了FairyGUI基础教程。

暴露Lua接口
       插件本身提供了Lua接口的暴露方式,不过我们使用的是sLua,所以需要按照sLua的方式来把插件的Lua接口生成出来。
        首先找到CustomExport.cs 文件,这是sLua的暴露接口的自定义脚本,我们在其中加入FaityGui的DDL或者命名空间。

     

1
2
3
4
5
6
7
8
   public  static  HashSet OnAddCustomNamespace()
         {
             return  new  HashSet
             {
                 //"NLuaTest.Mock"
                 "DJLuaTools"
             };
         }


然后按照sLua的流程,在Unity菜单种选择生成用户自定义的Lua接口。


【技术点】Unity 能热更的界面 FairyGUI

或者

【技术点】Unity 能热更的界面 FairyGUI


完了以后,你会得到一个惊喜,那就是:报错!


【技术点】Unity 能热更的界面 FairyGUI


这样的错误是因为FairyGui用到了一些U3D的类在sLua中没有做特殊处理,把它们都当作了不能为空的类型。


【技术点】Unity 能热更的界面 FairyGUI   

 

类似的错误还有几个,只用把前面的Nullable去掉就好。


【技术点】Unity 能热更的界面 FairyGUI


可以使用替换来简化这样的操作。经过几次替换后,报的错误也就消失不见了,此时就代表着我们可以在sLua中调用FaityGUI的代码。


测试
        做个按钮与标签
       通过FairyGUI的编辑器,假设我希望有一个界面,上面有一个按钮与图片,当我点击这个按钮时,图片的内容有所改变。
       这只是一个很小的功能,但测试Lua+FairyGUI的接口显然是足够了。


http://www.ngui.cc/zz/2700347.html

相关文章

K-means算法补充:K-means++

K-means算法是机器学习经典算法之一,对于机器学习的初学者来说,最先接触的应该就是该算法,对于K-means算法思想都已经很熟悉了,本文主要介绍K-means聚类中心的初始化。 K-means算法对聚类中心的初始化比较敏感,不同的初始值会带来不同的聚类结果。在标准的K-means算法中,…

疯狂地学习C语言

一个月疯狂的学习《C程序设计题解与上机指导》。

最短路径Dijkstra算法(JAVA)

/* * Graph.java */ class Vertex { public char label; public boolean isInTree; public Vertex(char label) { this.label label; isInTree false; } } //sPath[]用来存储父节点和距离。 class DistPare { public int parentVertex; public int distance; public Dist…

五台归来

五台之旅结束,学习之。 2009.5.27~2009.6.13作息时间表: 7:00起床 7:30~8:50图书馆:算法、数据结构、JAVA程序员宝典 9:00~12:00办公室:WSN 12:30~14&…

PL/SQL 调试存储过程(报错ora-01036 非法的变量名/编号)

存储过程: create or replace procedure zhanshi(v_pid article.pid%type) is cursor c is select * from article where pid v_pid;begin for v_article in c loop dbms_output.put_line(v_article.cont); if (v_article.isleaf 0) then zhansh…

Arduino+WZ指令+Onenet

title: ArduinoWZ指令Onenet tags: Onenet date: 2019-02-24 00:53:00 视频演示: src"//player.bilibili.com/player.html?aid44421747&cid77777406&page1" scrolling"yes" border"0" allowfullscreen"true"> …

一行代码完成485通讯与数据回传以及CRC校验

title: 一行代码完成485通讯与数据回传以及CRC校验 tags: STM32 date: 2019-03-16 21:10:00 由于工作需要,我对现有的485通讯方式进行了一个总结,同时也包含自己原创的一些算法来快速实现485通讯与CRC校验,以及返回值的处理 看下效果&#xf…

209年7月生活记录

title: 最近生活记录 tags: 生活 date: 2019-07-28 21:46:00 OK,今天来记录一下我的生活近况,其实这一段儿工作比较忙,尤其是最近在搞联通动环监控的B接口协议,相对来说还是很复杂的,但是做好以后的效果还是可以的&…

涂鸦NBIOT OpenCPU开发快速入门(三)

1、开发板选择 工欲善其事,必先利其器。 我之前做了两款开发板(其实主要是为了我工作上开发的方便),第一款用来测试通用对接(NB+MCU)…