UN——Unity网络开发相关
UN——Unity网络开发相关
前置知识:C#,线程相关知识,二进制相关(变量的本质 + 数据持久化二进制),Json
Unity网络开发
在没有学习网络相关知识之前,我们只能制作单机游戏,玩家之间不能交互,数据只能在本机上存储读取
在学习网络开发相关的知识后,我们可以通过网络制作让玩家之间进行交互的内容(信息同步,信息交换),也可通过网络将动态数据存储到服务器上
注:本笔记对应的课程主要针对的Unity客户端的前端部分的开发,而不是服务器后端,也没有涉及同步模式,但仍然是网络相关课程的基础
笔记代号UN——Unity Network的缩写 (不是联合国!)
本系列学习内容
网络开发必备理论和通信前的必备知识
网络基本概念
IP、端口、Mac地址
客户端和服务端
数据通信模型
网络协议
OSI 模型
TCP/IP 协议
TCP和UDP
通信前的必备知识
网络游戏通信方案概述
IP地址和端口类
域名解析
序列化和反序列化2进制数据
字节编码
序列化
反序列化
网络通信
套接字Socket(长连接游戏常用)
S ...
UH2——Lua热更新解决方案
UH2——Lua热更新解决方案
Lua热更新
在Unity内,AB包资源可以动态更新,而Lua代码脚本可以放进AB包内,随AB包更新
Unity中的Lua热更新的本质,就是为Unity提供Lua编程能力,让C#和Lua可以相互访问
这样,就可以通过热更新Lua脚本文件,使得Unity代码拥有热更新能力
本系列主要涉及:
Lua方案基础 —— Lua
Lua热更新方案 —— xLua
Lua热更新方案 —— toLua
Lua热更新开发方式
纯Lua开发(即所有游戏主要逻辑全部使用Lua实现,C#脚本仅用于对接Lua脚本)
热更新机动性强,甚至可以更换游戏玩法内核(真有你的.jpg)
代码开发和运行效率差
半C#,半Lua开发(核心逻辑C#开发,业务逻辑Lua开发)
性能略好
热更新机动性略差
xLua热补丁(纯C#开发,后期加入xLua热补丁,不建议)
好处:不需要过度翻新代码,解决急需热更的问题
坏处:破坏项目稳定性与整体性(史山上添加新的史.jpg)
xLua和toLua使用上对比
xLua在设计上更加完善,两种性能差异不大(toLua不适用于新项目 ...
UH2S3L17——Lua调用协程
UH2S3L17——Lua调用协程
本章代码关键字
1234567StartCoroutine() --开启协程,返回协程变量StopCoroutine() --停止协程,传入要停止的协程变量WaitForSeconds() --挂起协程,传入要挂起的秒数Yield(0) --挂起协程,传入要挂起的帧数WaitForFixedUpdate() --挂起协程,传入要挂起的物理帧帧数WaitForEndOfFrame() --挂起协程,等待一帧渲染完后在执行后面的逻辑Yield(异步加载返回值) --返回异步加载的返回值,相当于Unity协程中的yield return
1LuaCoroutine.Register() //lua协程注册,这样我们才能在Lua中使用tolua提供的协程函数,需要传入lua解析器,以及调用该方法的MonoBehaviour脚本自己
Lua调用C#协程
toLua提供给我们了一些方便的开启协程的方法,也可以直接使用类似Unity中的协程相关方法, ...
UH2S3L16——Lua调用委托和事件
UH2S3L16——Lua调用委托和事件
Lua调用C#的委托和事件
假设我们要调用下面的委托和事件
1234567891011121314151617181920212223public class Lesson7{ //申明委托和事件 public UnityAction del; public event UnityAction eventAction; public void DoDel() { del?.Invoke(); } public void DoEvent() { if (eventAction != null) eventAction(); } public void ClearEvent() { eventAction = null; }}
委托中加函数
委托是用来装函数的,使用C#中的委托 就是用来装lua函数的
Lua中没有复合运算符,不能用+ ...
UH2S3L15——Lua调用函数(重载)
UH2S3L15——Lua调用函数(重载)
Lua调用C#的重载方法
假设我们要调用下面的方法
123456789101112131415161718192021222324252627282930313233343536public class Lesson6{ public int Calc() { return 100; } public int Calc(int a, int b) { return a + b; } public int Calc(int a, out int b) { b = 10; return a + b; } public int Calc(int a) { Debug.Log("Int"); return a; } public float Calc(float a) ...
UH2S3L14——Lua调用函数(ref和out)
UH2S3L14——Lua调用函数(ref和out)
Lua调用C#的ref和out方法
假设我们要调用下面的方法
1234567891011121314151617181920212223public class Lesson5{ public int RefFun(int a, ref int b, ref int c, int d) { b = a + d; c = a - d; return 100; } public int OutFun(int a, out int b, out int c, int d) { b = a; c = d; return 200; } public int RefOutFun(int a, out int b, ref int c) { b = a * 10; c = a * 20; return 300; ...
UH2S3L13——Lua调用函数(拓展方法)
UH2S3L13——Lua调用函数(拓展方法)
Lua调用C#方法
假设我们要调用下面的静态方法和成员方法
1234567891011121314public class Lesson4{ public string name = "唐老狮"; public void Speak(string str) { Debug.Log(str); } public static void Eat() { Debug.Log("吃东西"); }}
调用静态方法
使用静态方法,使用:命名空间.类名.静态方法名() 即可
1Lesson4.Eat()
调用成员方法
调用成员方法,调用者需要是实例化对象,并且使用:来调用成员方法
12local obj = Lesson4()obj:Speak("唐老狮我爱你")
调用拓展方法
假设我们要调用下面的拓展方法
12345678public static ...
U4S4L3——指定资源加载
U4S4L3——指定资源加载
本章代码关键字
123456789101112131415161718192021//不同的资源加载标识类AssetReference //通用资源标识类 可以用来加载任意类型资源AssetReferenceAtlasedSprite //图集资源标识类AssetReferenceGameObject //游戏对象资源标识类AssetReferenceSprite //精灵图片资源标识类AssetReferenceTexture //贴图资源标识类AssetReferenceTexture2D //2D贴图资源标识类AssetReferenceTexture3D //3D贴图资源标识类AssetReferenceT<> //指定类型标识类,通过泛型指定加载资源//异步加载相关assetRef ...
U4S4L2——寻址资源设置
U4S4L2——寻址资源设置
让资源变为可寻址资源
方法一:选中资源,勾选Inspector窗口中的Addressable
方法二:选中资源,拖入Addressables Groups窗口中
注意:
C#代码无法作为可寻址资源
Resources文件夹下资源如果变为寻址资源,会移入Resources_moved文件夹中
原因:Resources文件夹下资源会最终打包出去,如果变为可寻址资源意味着想通过Addressables进行管理
那么它就没有必要通过Resources方式去加载和打包,所以会自动迁移,避免重复打包,浪费空间
右键选择资源时菜单内容
Move Addressables to Group:将该资源放入到现有的另一个组中
Move Addressables to New Group:
使用与当前组相同设置创建一个新组,并将该资源放入该新组中
Rmove Addressables:移除资源,该资源会变为不可寻址资源
Simplify Addressable Names:
简化可寻址资源名,会删除名称中的路径和拓展,简化缩短名称
C ...
U4S4L1——导入Addressables
U4S4L1——导入Addressables
导入Addressables包
在工具栏处点击Window —— Package Manager,打开后下载Addressables包即可
之后看到Window —— Asset Management —— Addressables,即证明安装成功
创建配置相关文件
创建配置文件有两种方法
方法一:打开资源组窗口
Window——>Asset Management——>Addressables——>Groups
在窗口中点击 Create Addressables Settings 按钮
方法二:在Inspector窗口中为资源勾选Addressable
如果没有创建过配置相关文件,这时会自动创建相关文件