游戏开发书籍推荐
《游戏编程模式》
A星寻路
A星寻路干嘛的
用来计算玩家行进最短路径的
A星寻路原理
不断找周围的点,选出一个作为新的点作为起点,循环查找,直到找到终点
寻路消耗公式:
f(寻路消耗) = g(离起点距离)+ h(离终点距离)
g:斜边勾股定理
h: 曼哈顿街区算法,就是直接平面的横纵坐标相加
开启列表:
存储起点周围的点,存储前判断不是障碍,不在开启和关闭列表
关闭列表:
存储查找过程中新的起点,存储时判断是否是终点
格子对象的父对象
A星寻路可能不能一次就找到最短路径,所以关闭列表不是所有的格子都是最短路径的一部分,通过终点格子不断查找父对象才能确定最短路径
广度优先遍历是从起始点开始从周围的点开始遍历,直到找到终点,周围的点是同时向外扩散查找的。
迪杰斯特拉算法:则是从起点周围的点中先从离自己最近的点作为下一个起点,不断遍历,直到找到终点。实际上已经是深度优先遍历了
A星算法则是在迪杰斯特拉的基础上,从周围的点选出下一个起点的条件除了离自己最近还要加上离目标点最近的条件。
Git版本控制
## 工作区和暂存区
在一个目录下我们,我们使用命令
1git init
则会在此目录下创建一个.git的隐藏文件夹,这就是Git的版本库 ,而当前目录就是我们的工作区 ,Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区 ,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
工作区、暂存区和版本库的关系:
注:Git不是保存多版本的文件,而是保存文件的修改
Git常见操作
1.添加到暂存区:
1git add filename
2.提交到版本库:
1git commit -m “commit description”
3.查看状态:
1git status
4.查看提交日志
详细日志
1git log
只显示一行的日志(主要查看commit id)
1git log --pretty=oneline
5.版本回滚
1git reset --hard commitID
commitID可以通过git log --pretty=oneline或者git reflog查找出来
6.操作日志
1git refl ...
Unity网络开发基础
学习目标
应对客户端网络模块中的网络连接 、网络通信 、协议统一 等必备需求
简单看看网络开发必备理论
网络基本概念
网络:由若干设备和连接这些设备的链路构成,设备间可以相互通信
局域网:指某一个小区域内由多台设备互联成的计算机组
以太网:网络连接的一种规则,定义了连接传输规范
城域网:是在一个城市范围内所建立的网络,几十到一百公里
广域网:是连接不同地区、城市、国家的远程网络,几十到几千公里
互联网(因特网):是目前国际上最大的互联网,定义了通信规则等
万维网:是基于因特网的网站和网页的统称
IP、端口、Mac地址
IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址
IP地址是IP协议提供的一种统一的地址格式,IP地址是设备在网络中的具体地址
端口是不同应用程序在该设备上的门牌号码
一台设备上不同的应用程序想要进行通信就必须对应一个唯一的端口号
Mac地址(Media Access Control Address) 直译为媒体存取控制地址,也称局域网地址,Mac地址,以太网地址,物理地址
Mac地址是用于在网络中唯一标识一个网卡的 ...
Test
❤️缓存穿透缓存击穿
123456789101112131415{% hideToggle ❤️ %}{% tabs %}<!-- tab 缓存穿透 --><!-- endtab --><!-- tab 缓存击穿 --><!-- endtab -->{% endtabs %}{% endhideToggle %}
Unity数据持久化
Json
JsonUtility(Unity自带)
123Test t = new Test();string jsonStr = JsonUtility.ToJson(t); //序列化t = JsonUtility.FromJson<Test>(jsonStr); //反序列化
注:
不能序列化Dictionary
类中的成员有其他类对象,需要在其他类加上[System.Serializable]
private 和 protected 成员需要加上[SerializeField]
无法存储null, 而是存储一个目标对象的默认值
无法直接读取数据集合
LitJson(第三方)
使用:将下载下来LitJson的src目录下的LitJson导入Unity即可
12345Test t = new Test();string jsonStr = JsonMapper.ToJson(t); //序列化JsonData data = JsonMapper.ToObject(jsonStr); //反序列化print(data.name)Test data = JsonMap ...
Unity进阶
概述
主要学习2D和动画相关、角色控制器、导航寻路系统
认识模型的制作过程
UV是纹理贴图坐标的简称,它有U轴和V轴,类似空间的xyz轴,他是把3D模型上的点平铺到2D图片上,即用2D平面上的点映射3D模型上的点。纹理贴图指的是一张2D图片记录着3D模型的UV信息和颜色信息,这样就可以通过纹理贴图给3D模型上色
材质:模型外表的表现,通过纹理贴图的信息使用不同的着色器算法,呈现不同的表现效果。如:金属、塑料。。
2D相关
图片导入设置
Unity支持的图片格式
unity一般使用JPG,PNG,TGA三种格式
图片设置的六大部分
(一)纹理类型
主要是为了让纹理图片有不同的使用类型
纹理类型:
(二)纹理形状
(三)高级设置
(四)纹理类型
(五)纹理类型
(六)纹理类型
Sprite
2D物理系统
SpriteShape
Tilemap
动画基础
Animation动画窗口
Animation动画状态机
2D动画
序列帧动画
骨骼动画–2D Animation
骨骼动画–Spine
模型导入相关
导入概述
Model模型页签
Rig操纵(骨骼)页签
Animation动画页签
M ...
Unity基础
反射机制和游戏场景
GameObject类是Unity提供的作为场景中所有对象的根本,不管是图片、模型、音效、摄像机等等都是依附于GameObject对象的
利用反射,我们可以获取脚本上的变量,显示在Inspector面板上并修改,而像Transform、BoxCollider等挂载的组件本质上也是脚本,所以在Inspector面板上可以修改他们的一些属性值
游戏场景Scene的本质就是配置文件.unity,记录了场景上有哪些游戏物体及其相关信息。引擎本质也是读取它通过反射创建各个对象关联各个脚本对象
Inspector面板显示
公共变量可以显示,用[HideInInspector]修饰可隐藏
私有变量不可显示,用[SerializeField]修饰可显示
大部分类型可以显示,要让自定义类型可显示,需要[System.Serializable]修饰(字典怎样都不行)
[Header("")] 分组说明、[Space()] 间隔、[Range(0, 10)] 限制拖动范围
[SerializeField]、[HideInInspector]可以实现显示隐藏变量的效 ...
Lua学习
__index元方法
Lua 查找一个表元素时的规则,其实就是如下 3 个步骤:
1.在表中查找,如果找到,返回该元素,找不到则继续
2.判断该表是否有元表,如果没有元表,返回 nil,有元表则继续。
3.判断元表有没有 index 方法,如果 index 方法为 nil,则返回 nil;如果 index 方法是一个表,则重复 1、2、3;如果 index 方法是一个函数,则返回该函数的返回值。
注:查找一个子表不存在的元素,不会在元表中查找,而是在元表的__index元方法中找
12345678910111213141516171819202122232425son = { name = "son name",}parent = { age = 101, __index = { name = "parent name", age = 23, }}parentIndexTbl = { sex = "fema ...
Unity-协程
概述
1)协程概念
协同程序(Coroutine)简称协程,是伴随主线程一起运行的程序片段,是一个能够暂停执行的函数,用于解决程序并行问题,主要是将主线程中耗时的逻辑分时分步的执行,他并不是开辟一个新的线程去执行,而是用线程来承载运行
协程是一个能够暂停执行的函数,在收到中断指令后暂停执行,并立即返回主函数,执行主函数剩余的部分,直到中断指令完成后,从中断指令的下一行继续执行协程剩余的部分。函数体全部执行完成,协程结束。协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。由于中断指令的出现,使得可以将一个函数分割到多个帧里执行。
注:Unity是支持多线程的,只是新创建的线程是无法访问Unity相关对象的内容
2)中断指令
123456789101112131415161718// 协程在所有脚本的FixedUpdate执行之后,等待一个fixed时间间隔之后再继续执行yield return WaitForFixedUpdate();// 协程将在下一帧所有脚本的Update执行之后,再继续执行yield return null;// (任意数 ...