Lua热更新技术
热更新介绍1.热更新说明:游戏或者软件无需重新下载客户端进行安装,而是在应用程序启动情况下,在内部进行的资源或者代码更新,能迅速修复Bug、提升玩家留存率;
2.热更新分类:以下俩种
资源的热更新:Unity内置的有AssetBundle来进行资源热更;
逻辑的热更新:也就是对代码的热更新,一般使用xlua、tolua;
XLua教程1、建立一个lua虚拟机(LuaEnv类),这个类的API见https://www.jianshu.com/writer#/notebooks/47506883/notes/77530589使用完成后,通常在Destroy里Dispose掉,防止报错。
2、通常会在lua文件里写lua代码,所以需要一个lua文件加载器在C#脚本中用Resource.load(文件名不需要后缀)加载TextAsset资源,因为TextAsset加载的是txt类型文件,所以代码里文件名用xxx.lua。文件夹中实际文件名要用xxx.lua.txt。另外一种用Lua内置的方式加载lua文件,env.DoString(“require ‘文件名xxx’ ”),会默认用Reso ...
Markdown语法格式(.md后缀-使用typora)
Markdown基本语法格式标题:#标题1 (大)
##标题2
###标题3
####标题4 (小)
以此类推 最高标题6
代码块:```代码块名称(可以输入各种语言java、c++、html等)
加粗://加粗
**加粗**
//代码高亮显示
==高亮==
//删除线
~~删除线~~
//斜体
*斜体内容*
引用://引用语法
>作者:泽
>>作者:泽
>>>作者:泽
分割线://分割线
---
***
图片插入://在线图片与本地图片
![照片名子](/image/me.png)
超链接://超链接语法
[超链接名字](https://gihub.com/yerenping)
列表://无需列表
- 目录1 -后加空格
- 目录2
- 目录3
//有序列表
1+. +名称
表格:右键》插入》表格
用代码过于复杂不推荐使用
用 Markdown 写数学公式Markdown 是很优秀的标记语言,目前很多平台都带 $\TeX$ 公式引擎(XTeX, Mathjax 等)的 Markdown 编辑器。文章介绍使用 Typor ...
游戏程序基础框架实例
单例管理者基类不继承自Mono1.利用单例模式和泛形去实现模块管理者基类;
public class SingletonBase<T> where T:new()
{
private static T instance;
public static T GetInstance()
{
if (instance == null) instance = new T();
return instance;
}
}
继承自Mono1.直接实例化通过生成游戏对象并且附加脚本;2.Awake实例化的话要保证单例的唯一性;
public class SingletonMono<T> : MonoBehaviour where T : MonoBehaviour
{
private static T instance;
public static T GetInstance()
{
if (instance == null)
{
...
Unity进阶-Addressables
Addressables概述1.Addressables说明:Addressables是基于AssetBundle架构做的高阶流程,目的是实现资源自动化管理,Addressables翻译过来是可寻址的意思,它是可寻址资源管理系统,是Unity从2018.2版本开始,建议用于替代AssetBundle的高阶资源管理系统,在之后的Unity的新版本中,AssetBundle将渐渐被淘汰;
2.Addressables的优点:
自动化管理AB包打包、发布、加载;
可以更方便的进行本地、远程资源的加载;
系统会自动处理资源关联性;
内存管理更方便;
迭代更方便;
3.Addressables使用方法:
导入包:在Package Manager中导入该包;
创建配置文件:在Window找到Addressables中的Groups点击创建配置文件,或者直接在Inspector窗口勾选Addressable就会自动创建;
资源加载基础寻址资源设置1.让资源变为可寻址资源:
//方法一:选中资源,勾选Inspector窗口中的Addressable
//方法二: ...
Git版本控制工具使用
Git的介绍1.Git是什么:Git是目前世界上最先进的分布式版本控制系统,工作流程,Workspace(工作区)——Index / Stage(暂存区)——Repository(本地仓库)——Remote(远程仓库);
2.SVN与Git的最主要的区别:
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了;
Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了;
3.Git的安装和配置:在Windows下安装Git如下步骤
从官网下载Git安装,并且 ...
常用排序算法
列举一些常用的排序算法
#冒泡排序
/// <summary>
/// 冒泡排序
/// </summary>
/// <param name="array">数组</param>
/// <param name="count">数组元素个数</param>
public static void BubbleSort(int[] array, int count)
{
//设置标识符,如果为false意为当前数组为有序,不需要再排序了
bool shouldSorted = true;
for (int i = 0; i < count && shouldSorted; i++)
{
shouldSorted = false;
for (int j = count - 1; j > i; j--)
{
if (array[j - 1] > array[j])
...
游戏MVC系列框架
MVC基本概念:MVC全名是Model View Controller是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计规范,用一种业务逻辑、数据、界面显示 分离的方法,组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制,界面及用户交互的同时,不需要重新编写业务逻辑;
流程:View(界面)触发事件—Controller(业务)处理了业务触发数据更新—更新Model的数据—Model(带着数据)回到了View—View更新数据;
总结:MVC主要用于软件和WEB开发;在游戏中时非必须的UI系统开发框架;
不使用MVC的逻辑:
public class PlayerLevPanel : MonoBehaviour
{
public Button btnLevUp;
public Button btnClose;
//展示UI面板
public static void ShowMe()
{
//todo
}
//隐藏UI面板
pu ...
C#各版本知识补充
C#版本和Unity的关系1.各Unity支持的的C#版本说明:主要是不同Unity版本 使用的 C#编译器和脚本运行时版本不同,所以随着Unity的更新,它一般会采用较新的 编译器和运行时版本,新版本的脚本运行时将为Unity带来了大量的新版C#功能和.NET的功能,就意味着它可以支持更高版本的C#,以下是各版本支持的C#版本;
Unity 2021.2 —— C# 9;
Unity 2020.3 —— C# 8;
Unity 2019.4 —— C# 7.3;
Unity 2018.3 —— C# 7
Unity 2017 —— C# 6;
Unity 5.5 —— C# 4;
Unity - 手动:C# 编译器 (unity3d.com)
2.Unity的.Net API兼容级别:在PlayerSetting->Other Setting->Api Compatibility Level中,我们可以设置.Net API的兼容级别:
.Net 4.x(特殊需求时):具备较为完整的.Net API,甚至包含了一些无法跨平台的API,如果你的应用主要针对W ...
Excel编辑器工具
Excel介绍1.Excel的本质:Excel表本质上也是一堆数据,只不过它有自己的存储读取规则,如果我们想要通过代码读取它,那么必须知道它的存储规则,官网是专门提供了对应的DLL文件用来解析Excel文件的;
2.获取Excel数据信息的意义:
可以根据表中数据来动态的生成相关数据,如数据结构类、容器类、二进制数据类;
转成二进制数据也可以提升读取效率,提升数据安全性;
Excel官方工具使用//主要知识点:
//1.FileStream读取文件流
//2.IExcelDataReader类,从流中读取Excel数据
//3.DataSet 数据集合类 将Excel数据转存进其中方便读取
//4.DataTable 数据表类 表示Excel文件中的一个表
//5.DataRow 数据行类 表示某张表中的一行数据
[MenuItem("GameTool/读取Excel里的具体信息")]
private static void ReadExcel()
{
using (FileStream fs = File.Open(Application.dataPath + "/Art ...
Unity进阶-ScriptableObject
ScriptableObject概述1.ScriptableObject说明:ScriptableObject是Unity提供的一个数据配置存储基类,它是一个可以用来保存大量数据的数据容器,就像是可以自定义的数据预制物资源文件,需要我们继承它来进行使用,它的主要作用是如下:
数据复用(多个对象用同一个数据)
配置文件(配置游戏中的数据)
编辑模式下的数据持久化
2.ScriptableObject优点:如下
我们可以直接在Inspector窗口编辑配置数据,可以利用它来做配置文件;
处理重复数据,减少数据拷贝时造成的内存占用,可以利用它来做公共数据;
可以更方便的处理数据带来的多态行为;
3.ScriptableObject持久化注意点:通过代码修改数据对象中内容,会影响数据文件,相当于达到了编辑器中数据持久化的目的(该数据持久化 只是在编辑模式下的持久,发布运行时并不会保存数据);
ScriptableObject数据文件创建1.自定义ScriptableObject数据容器
//1.继承ScriptableObject类
//2.在该类中声明 ...
人工智能导论
绪论人工智能基本概念1.自然界四大奥秘:物质的本质、宇宙的起源、生命的本质、智能的发生;
2.智能的定义:智能是只是和智力的总和;
3.智能的特征:
感知能力(游戏AI必须品):主动信息的输入,实现视觉、听觉、触觉、嗅觉等感觉器官;
记忆力和思维能力:信息的存储和信息的模拟,记忆存储由感知器官感知到的外部信息以及由思维所产生的知识,思维能力对记忆的信息进行处理;
逻辑思维(抽象思维):例如理科生通过逻辑去肢解一道数学题;
形象思维(直感思维):例如人的第五感;
顿悟思维(灵感思维):例如牛顿如何发现了力学;
学习能力:被动信息的输入,学习既可能是自觉的、有意识的,也可能是不自觉的、无意识的;既可以是有教师指导的,也可以是通过自己实践的;
行为能力(表达能力):信息的输入,人工智能实现的目的;
人工智能发展简史人工智能发展史:了解就好了,知乎看看就好;人工智能发展史 - 知乎 (zhihu.com)
人工智能研究的基本内容1.知识表达:将人类知识形式化或者模型化,方法有符号表示法、连接机制表示法,简单点说就是建立一个能把人懂的东西弄成机器能懂的东西的东西;
2.机器感知:使机器( ...
Unity进阶-AssetBundle
AssetBundle介绍1.AB包说明:特定的平台资产压缩包,有点类似压缩文件,资源有模型、贴图、预制物、音效、材质球;
2.相对于Resources的优点:
资源压缩,直接打包后包体更小;
可以进行资源热更新,游戏资源先下包再更新;
AssetBundle资源打包1.标签说明
在Inspector窗口下将要打包的资源选择或命名一个标签;
2.API打包:BuildPipeline.BuildAssetBundles() 方法三个参数
Bundle输出路径:打包路径;
BuildAssetBundleOptions:不压缩、LZMA压缩、LZ4压缩(如下打包工具详细介绍);
BuildTarget:打包平台;
3.官方打包工具:AssetBundleBrowser打包关键参数说明;
BuildTarget:目标平台
Output Path:目标输出路径
Clear Folders:是否清空文件夹 重新打包
Copy To StreamingAssets:是否拷贝到StreamingAssets
Compression
NoCompression:不压缩,解压快,包较大 ...