UG——UI系统笔记
UG——UI系统笔记
UI系统
UI 是 User Interface(用户界面)的简称
用户界面就是游戏中的登录,注册,背包,人物等等功能面板,
游戏中最多的逻辑功能就是和UI相关的功能
Unity中的UI系统可以理解为,Unity提供给我们制作UI功能的手段
UI是游戏中最重要的部分,不管是2D游戏还是3D游戏,几乎所有游戏功能都和UI有关系
所以它是极其重要的知识点,UI开发几乎会伴随你的整个游戏开发生涯
笔记代号UG——即Unity GUI的缩写(不特指UGUI)
Unity 中 UI 系统的对比 - Unity 手册 (unity3d.com)
本笔记包括以下系列
IMGUI(调试或者编辑器使用)
NGUI(第三方插件,旧项目使用)
UGUI(当前主流 Unity UI 方案)
FairyGUI(第三方跨引擎UI方案,功能封装多)
UH2S2SL1——VSCode编写Unity代码相关
UH2S2SL1——VSCode编写Unity代码相关
VSCode下载
官网在此 ——> Visual Studio Code - Code Editing. Redefined
Unity首选项设置
想要让Unity的外部脚本编辑器为VSCode需要到Edit - Preference - External Tools 去选择
当你打开Unity内C#脚本但是不显示全项目文件,以及调试需要你选择(即使选择也大概率不生效),你需要检查这里是否选择
(更新Unity的VSCode插件等也可能会让这里的选项失效,需要重新选择)
VSCode开发Unity插件(2024年2月适用)
本笔记于2024年2月份写下,此时VSCode开发Unity的必需插件相比老师录制课程时期已经有了较大的不同,在此重新列出
安装如下插件即可使VSCode的开发接近于VS
Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code
C#(强烈建议使用梯子或者其他加速手段,否则有可能导致.NET下载不畅)
C# Dev ...
UH2S2L26——泛型类替换
UH2S2L26——泛型类替换
泛型类替换
泛型类,T是可以变化,而Lua没有泛型,因此,lua中的替换,要一个类型一个类型的来
你想替换几个类型,就写几个对应类型的补丁
固定语法为:
123xlua.hotfix(CS.泛型类名(类型), { -- 要替换的方法})
假设我们要对下面泛型类做热补丁
1234567891011121314151617181920212223[Hotfix]public class HotfixTest2<T>{ public void Test(T str) { Debug.Log(str); }}public class HotfixMain : MonoBehaviour{ void Start() { LuaManager.Instance.Init(); LuaManager.Instance.DoLuaFile("Main"); Hotfix ...
UH2S2L25——事件加减替换
UH2S2L25——事件加减替换
事件加减替换
事件加减替换一般是为了将传入的方法存入到Lua的容器内
固定语法为:
12345678910xlua.hotfix(CS.HotfixMain, { add_myEvent = function(self, del) --del是要添加的函数 --不要再执行self:myEvent("+", del)!!!!!! end, remove_myEvent = function(self, del) --del是要移除的函数 --不要再执行self:myEvent("-", del)!!!!!! end})
事件加减替换指的是,对事件的+=和-=做重定向操作,只要执行到这些语句就使用Lua相关的代码
12345678910111213141516[Hotfix]public class HotfixMain : MonoBehaviour{ event UnityAction myEv ...
UH2S2L24——索引器和属性替换
UH2S2L24——索引器和属性替换
索引器和属性替换
索引器和属性的固定写法如下
12345678910111213141516171819202122xlua.hotfix(CS.类名, { --如果是属性进行热补丁重定向 set_属性名 = function(self, v) -- v是传入的值 -- 设置属性 的方法 end, get_属性名 = function(self) -- 得到属性 的方法 return 对应属性的值 end, --索引器固定写法 --set_Item 通说索引器设置 --get_Item 通过索引器获取 set_Item = function(self, index, v) -- index是传入的索引 -- v是传入的值 end, get_Item = function(self, index) -- index是传入的索引 return 对应索引的值 en ...
UH2S2L23——协程函数替换
UH2S2L23——协程函数替换
协程函数替换
前置知识:Lua调用协程
假设我们要对下面协程方法做热补丁
1234567891011public class HotfixMain : MonoBehaviour{ IEnumerator TestCoroutine() { while (true) { yield return new WaitForSeconds(1); Debug.Log("C#协程打印一次"); } }}
协程函数的替换比较特别,需要在热补丁替换的基础上,执行Lua调用协程的前置步骤,归纳固定写法为
123456789101112-- 导入必要工具表util = require("xlua.util")-- 为类打热补丁xlua.hotfix(CS.类名, { -- 替换协程逻辑 协程名 = function(self) -- ...
UH2S2L22——多函数替换和构造函数与析构函数替换
UH2S2L22——多函数替换和构造函数与析构函数替换
本章代码关键字
12[".ctor"] --xlua.hotfix内使用,用于添加构造函数逻辑(无法直接替换)Finalize --xlua.hotfix内使用,用于添加析构函数逻辑(无法直接替换)
多函数替换
我们可以使用另外一种写法,执行一次xlua.hotfix,即可对多个方法进行热补丁操作
假设我们要对下面三个方法进行热补丁替换
1234567891011121314public class HotfixMain : MonoBehaviour{ void Update() { } public int Add(int a, int b) { return 0; } public static void Speak(string s) { Debug.Log("C# Speak"); }}
我们通过固定写法 ...
UH2S2L21——第一个热补丁
UH2S2L21——第一个热补丁
本章代码关键字
1xlua.hotfix() --该方法可以用于对类的一个或多个方法进行热补丁替换操作,它使得调用方法时不再执行C#脚本内逻辑,而是Lua脚本逻辑
xLua热补丁原理
假设我们的游戏项目游戏逻辑目前全是用C#编写的,此时我们想要使用Lua来做热更新基本是要推翻重写的
而xLua提供了一种热补丁功能,可通过打补丁的形式,使得我们代码逻辑不再走C#脚本的逻辑,而是Lua代码的逻辑
这时我们再对Lua脚本执行热更新即可达到代码热更新的目的
xLua热补丁
假设我们要对下面类的Add方法和Speak方法做热补丁
123456789101112public class HotfixMain : MonoBehaviour{ public int Add(int a, int b) { return 0; } public static void Speak(string s) { Debug.Log("C# Speak" ...
UH2S2L20——Lua调用泛型函数
UH2S2L20——Lua调用泛型函数
本章代码关键字
12xlua.get_generic_method() --通过类与方法名获取方法信息,之后传入泛型参数即可构建可用的方法,在调用方法既可所有泛型函数-- 有一定的局限性
调用泛型函数
Lua只有有约束有参数(且约束必须是class)的泛型函数才能调用
其他情况,需要使用xlua.get_generic_method()获取方法信息,再传入类型,得到可用的函数,即可调用(IL2CPP打包下存在限制)
先在C#脚本内声明如下内容
12345678910111213141516171819202122232425262728public class Lesson12{ public interface ITest { } public class TestFather { } public class TestChild : TestFather, ITest { } public void TestFun1<T& ...
UH2S2L19——Lua调用协程
UH2S2L19——Lua调用协程
本章代码关键字
12"xlua.util" --xlua提供的一个工具表,协程相关的内容就在里面util.cs_generator --将函数转化为MonoBehaviour可用的协程
调用协程
Lua中调用MonoBehaviour的协程分三个部分
首先需要获取一个继承MonoBehaviour的类,通过它来调用StartCoroutine方法来启动协程
作为协程的函数,使用coroutine.yield可挂起协程,返回的内容还是Unity挂起协程需要返回的内容
作为协程的Lua函数不能直接传入到StartCoroutine,需要加载 "xlua.util" 并调用cs_generator来将协程函数转化为可用的协程
在C#中协程启动都是通过继承了MonoBehaviour的类,通过里面的启动函数StartCoroutine来启动协程
但是,我们不能直接将lua函数传入到开启协程中!!!!
xlua提供了一个工具表,一定是要通过requir ...