UG1L3——多选框和单选框
UG1L3——多选框和单选框 本章代码关键字 1GUI.Toggle() //绘制多选框,第二个参数需要传入当前是否选中的值,返回这一帧是否被选中的值 多选框 GUI.Toggle 会绘制一个多选框,第二个参数需要传入当前是否选中的值,返回这一帧是否被选中的值,其余参数和其他控件差不多 因此,使用 GUI.Toggle 绘制的多选框,必须要在外面声明一个 bool 变量,用来存储多选框是否被选中的值 该变量需要传入到 GUI.Toggle 内,再返回给该变量,这样才能实现多选框选中的效果 1234567private bool isSel;private void OnGUI(){ //第二个参数应该用变量,而不是固定的常量 isSel = GUI.Toggle(new Rect(0, 0, 100, 30), isSel, "效果开关");} 自定义样式的显示问题 GUI.Toggle 使用 GUIStyle 时,我们可以通过设置背景图来自定义是否选中的图标,Normal...
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#...
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"); ...
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...
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 对应索引的值 ...
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) { ...
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...