![](https://img-blog.csdnimg.cn/20210720133004308.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Unity
文章平均质量分 82
Unity游戏开发
是嘟嘟啊
一个放弃java转投游戏的热血战士!
展开
-
【Unity】线性代数基础:矩阵、矩阵乘法、转置矩阵、逆矩阵、正交矩阵等
矩阵的感性意义在于它为我们提供了一种简洁、直观、有力的数学工具来描述和理解现实世界的复杂现象和变化规律。无论是组织数值、描述变换、简化计算还是数学建模和感性认知等方面,矩阵都发挥着不可替代的重要作用。而在游戏开发行业中,矩阵是你从小白到大神 **无法绕过的必修课** 之一!原创 2024-08-05 23:52:49 · 1098 阅读 · 0 评论 -
【Unity】向量应用:已知入射方向和法向量求反射方向(跳弹系统)
n’ 可以用 v1 和 n 的点乘值再乘以 n 的单位向量来获取,公式为: n’ = Dot( v1, n ) * n.normalized。所以最终的公式为v2 = v1 - (2 * Dot( v1, n ) * n.normalized)。而 n 等于 n’ 的二倍,所以得出公式为:v2 = v1 - (2 * n’)。已知入射向量v1和法向量n(OB),求反射向量v2,上述向量均为单位向量。设 AO为 v1;OD 为 n’;用 v1 - n 即可得到 v2(方向)。更多内容请查看总目录。原创 2024-06-17 23:50:12 · 333 阅读 · 0 评论 -
【研发日记】【策划向】(一)游戏策划其实就是一道加减法题
诚然,这类游戏确实能在短时间内通过砸钱宣发实现爆发式的增长,但玩家的流失也是爆发式的,因为游戏的核太过模糊,而玩家都是有自己的固定取向的,模糊的游戏玩着玩着就忘了。与游戏的核心玩法不一样,卖点可以是核心玩法,也可以是其他方面的东西。再比如玩法上的创新,相信大家都不会忘记当年的那款《纪念碑谷》吧,游戏虽然不算大,但是在玩法上却有很好的创新,虽然不能跟3D之父这种级别的人物去比,但起码给了3D游戏更多的想象空间,这些年陆陆续续出现的很多游戏都有《纪念碑谷》的影子,比如《笼中窥梦》、《Viewfinder》。原创 2024-05-25 13:57:35 · 848 阅读 · 0 评论 -
【Unity】程序创建Mesh(二)MeshRenderer、光照、Probes探针、UV信息、法线信息
关于UV和法线相关的更细节的内容,我会在渲染章节再进行细致的学习和记录(详见文档下方的目录),欢迎大家一起学习。更多内容请查看总目录【Unity】Unity学习笔记目录整理。原创 2024-03-15 00:11:46 · 1984 阅读 · 0 评论 -
【Unity】程序创建Mesh(一)Mesh网格、代码创建模型、顶点信息、三角形信息、MeshFilter、MeshRenderer
首先三角形信息的数据格式是一个 int 类型的数组,数组中的每个元素就是三角形的一个顶点(顶点是可以共用的),这个数组每三个元素形成一个面,所以数组的长度通常是3的倍数。具体来说,如果我们按照逆时针顺序(从三角形的一个顶点开始,沿着边缘到下一个顶点,再到下一个,最后回到起始顶点)来定义三角形的顶点,那么当观察者站在三角形的“外部”时,这个面会朝向观察者,我们称之为“正面”或“前向面”。相反,如果顶点顺序是顺时针的,那么当观察者站在三角形的“外部”时,这个面会背向观察者,我们称之为“背面”或“后向面”。原创 2024-03-14 23:42:42 · 2802 阅读 · 2 评论 -
【Unity】Tag、Layer、LayerMask
在Unity中,Layer的核心作用其实就是给游戏对象分类,这样我们就可以针对这些类别进行统一处理。比如我正在做一个Moba游戏,需要一个小地图,我打算用一个相机从地图上方俯视,这时候我需要在地图中显示一些标记(比如玩家的标记,怪物的标记)在地图上,这些标记是跟着玩家移动的,但是我的主相机中又不想看到这些标记,这时候就可以把这些标记指定为一个特殊的层,比如 “MapSignal” ,然后我们将主相机设置为不看 “MapSignal” 层,我们的功能就实现了。原创 2024-03-09 16:06:04 · 1997 阅读 · 2 评论 -
SQL优化基础教程
在这单表查询统计的情况下,如果要过滤的条件没有涉及 到要计算字段,那它们的结果是一样的,只是where可以使用rushmore技术,而having就不能,在速度上后者要慢如果要涉及到计算的字段,就 表示在没计算之前,这个字段的值是不确定的,根据上篇写的工作流程,where的作用时间是在计算之前就完成的,而having就是在计算后才起作用的, 所以在这种情况下,两者的结果会不同。如果索引是建立在多个列上,只有在它的第一个列(leading column)被where子句引用时,优化器才会选择使用该索引。原创 2023-05-29 18:15:45 · 838 阅读 · 0 评论 -
【Unity】Unity C#基础(十六)C#中的? 、?. 、?? 、??=
C# 8.0 及更高版本中可使用空合并赋值运算符?=,该运算符仅在左侧操作数的求值结果为 null 时,才将其右侧操作数的值赋值给左操作数。如果左操作数的计算结果为非 null,则?= 运算符不会计算其右操作数。用于定义引用类型和可空类型的默认值。如果此运算符的左操作符不为Null,则此操作符返回左操作数,否则返回右操作数。为了使值类型也能使用可空类型,就可以使用“?”来表示,表现形式为“T?是System.Nullable的缩写,更便于读取。引用类型能用空引用来表示一个不存在的值,但是值类型不能。原创 2023-04-11 09:59:41 · 1148 阅读 · 1 评论 -
【Unity】Unity C#基础(十五)implicit 隐式类型转换、explicit 显式类型转换
Implicit提高了代码的可读性,但程序员需要自己保证转换不引发异常且不丢失信息。Explicit可阻止编译器静默调用可能产生意外后果的转换操作。前者更易于使用,后者能向阅读代码的每个人清楚地指示您要转换类型。C#中的Explicit和Implicit更多内容请查看总目录【Unity】Unity学习笔记目录整理。转载 2023-04-10 11:11:27 · 908 阅读 · 0 评论 -
【Unity】Unity Shader学习笔记(四)创建和使用、基本语法、属性基本类型、数值精度
shader根据不同的精度设计了float、half、fixed三种类型,其中float精度最高,共32位,几乎适用于任何情况,但内存占用也较高。half的精度是16位的,理论值域是 [ -65536 ~ 65535 ](实际值域好像是65504)。fixed精度最低,只有11位,值域是 [ -2 ~ 2 ]。因为颜色的值域是 [ 0 ~ 1 ] ,所以通常颜色是使用 fixed4来定义的。由于着色器是依赖于材质的,所以创建着色器之前通常要先创建一个材质(Material)。代码块中,其中包含一个。原创 2023-03-10 00:24:12 · 5063 阅读 · 0 评论 -
【Unity】U3D TD游戏制作实例(五)防御塔设计:对象排序、锁定敌人、攻击敌人、防御塔特色功能实现
比如我们的加农炮台需要顶部炮台朝着敌人的位置旋转,此时可以使用扩充的方式,在子类代码中重写 AttackTarget 方法并调用父类方法(base.AttackTarget();父类的锁定敌人方法 LockTarget 和攻击敌人方法 AttackTarget 是常规情况下的处理方式,有时候新的防御塔并不一定用同样的方式锁定敌人或者攻击敌人,此时可以在子类中增加个性化代码。设计防御塔类型以及配置方式,选择几种防御塔做样例,实现防御塔的攻击相关功能,如:锁定敌人、攻击敌人、攻击动画、攻击特效等。原创 2022-11-11 18:28:42 · 2982 阅读 · 1 评论 -
【Unity】Unity C#基础(十四)注释
在 C# 智能注释时,常常希望它能在开发时显示为换行,使得提示更加友好!/// 是智能注释也称xml注释,会在被编译,并生成xml文件在可执行文件中。在 View -> Task List ,选择 Comments ,即可以查看项目中所有标记 TODO 的位置。“//TODO:此处还没测试通过”/* 注释内容 */原创 2022-11-11 16:09:59 · 3042 阅读 · 0 评论 -
【Unity】导航细节问题汇总:Instantiate飘移问题
使用 Instantiate 方法实例化预制件时会出现位置飘移的问题,正常情况下角色应该在圆圈位置生成,出现这样的问题是因为我们在设置角色位置时没有关闭 NavMeshAgent 组件,该组件会自动改变位置。解决方案如下方代码,在设置角色的 Position 之前要先关闭预制件上的 NavMeshAgent 组件,等位置设置好以后再打开,就可以解决这个问题了。原创 2022-11-10 23:08:55 · 1296 阅读 · 6 评论 -
【Unity】常用几何知识:根据角度获取圆形上某个点的坐标
通过遍历按钮列表 List _createBtnList ,计算每个按钮的旋转角度,再根据角度计算出按钮的坐标。最后再给这个角度增加90°,让起始坐标从 3 点钟方向变为 12 点钟方向。本案例将按钮的位置设计成围绕着生成器旋转排列。当按钮数量为 3 时,就每隔 120° 放一个按钮,当按钮数量为 4 时,就隔 90°。angle:旋转角度(起始方向为 3 点钟方向)centerX centerY 圆的中心点。更多内容请查看总目录。原创 2022-11-08 18:56:02 · 3479 阅读 · 0 评论 -
【Unity】U3D TD游戏制作实例(四)建造防御塔:防御塔生成器、一个int代表多选框,圆上任意点位的坐标计算、制作防御塔预制件
防御塔生成器、一个int代表多选框,圆上任意点位的坐标计算、制作防御塔预制件。由于目前预想的运行环境是PC端,但后续也可能移植到手机端,且有可能提供玩家自定义关卡的功能,所以将防御塔建造点设置为固定位置模式。也就是当鼠标停留在可建造防御塔的位置时显示一个建造区域,当鼠标点击这个区域时弹出建造防御塔的UI菜单。如下图:演示效果如下:Unity制作炮台防守游戏(2)建造炮台。原创 2022-11-08 18:42:25 · 2011 阅读 · 3 评论 -
【Unity】Unity开发进阶(八)Windows解析Excel报错问题、跨平台解析Excel文件
Excel文件的读取问题 ; Unity读取Excel文件报错 ; Windows解析Excel报错 ; Excel.ExcelOpenXmlReader.IsDBNull ; Unity Excel.ExcelOpenXmlReader.IsDBNull ; NullReferenceException: Object reference not set to an instance of an object ; 读取Excel文件时出现null的解决方法 ;原创 2022-10-19 23:16:15 · 1369 阅读 · 1 评论 -
【Unity】U3D TD游戏制作实例(三)相机管理器、生成敌人优化、敌人血槽小组件
由于是正交镜头,所以此处画布朝向不是直接指向镜头位置的,而是要根据镜头俯仰角度做运算,找到相应的点位,然后LookAt这个点位,如下图:我们已知镜头的俯视角为 x ,再设 a 边为 10 ,计算 c 边,进而得到 p 点的位置,最后使画布朝向 p 点。注意:以上代码有部分为硬编码,比如左右边缘位置以及随着缩放比例变化的缩放系数 scaleRatio 的计算方式,但目前版本已经有较合理的表现,所以暂时不做修改。当敌人到达终点后销毁敌人,目前只做简单的销毁,后续再将造成伤害的代码加进去。原创 2022-10-19 00:39:00 · 1284 阅读 · 0 评论 -
【重温经典】《谁谋杀了我们的游戏?》出自《黑神·话悟空》制作人Yocar
文章出自2007年,由《斗战神》主策划Yocar(尤卡:本名冯骥,《黑神话悟空》制作人)编写,记载了当时游戏市场中的乱象以及对造成这个乱象的原因,深刻反思了游戏制作行业的一些存在的问题。全文字字珠玑,虽是07年的文章,现在看来仍颇有建树。对于游戏人来说,这是一场灵魂拷问,在善与利之间,我们究竟该如何取舍?原创 2022-10-13 16:06:17 · 11915 阅读 · 9 评论 -
【Unity】U3D TD游戏制作实例(二)配置关卡、加载Excel配置文件
然后再创建一个 LevelManager 脚本来读取配置,这个 LevelManager 后期将会实现关卡的加载、开始、结束,以及生成敌人等功能。前面三个小的是第一轮的,中间两个大的是第二轮的,后面小的是第三轮的。本章主要实现通过 Excel 配置关卡数据, Unity 解析 Excel 生成关卡,实现自动刷新敌人。注意,EnemyGeneratePoint 的位置要放在地图上合理的位置上,不然导航将会报错。用 Excel 写一个配置文件,上面预留两行,左侧预留一列方便后期做填写说明。原创 2022-09-26 16:13:36 · 2191 阅读 · 2 评论 -
【Unity】U3D TD游戏制作实例(一)创建敌人、加载预制件
TD(炮台防守)类游戏是比较经典的游戏类型,当年在 War3 中有很多 TD 类地图,还有类似《保卫萝卜》这种 2D 炮台防守游戏也曾火爆一时。本次实例将使用 Unity 实现此类游戏,功能包含地图创建、敌人创建、敌人导航、炮台创建与升级、炮台攻击、敌人攻击等功能。原创 2022-09-26 11:44:48 · 2325 阅读 · 0 评论 -
【Unity】Inspector中脚本中文乱码问题
打开项目时,EditorConfig 插件会在打开文件的目录和每个父目录中查找 .editorconfig 文件,如果到达根文件路径或EditorConfig 文件root = true,则文件搜索将停止。这种情况,我们可以使用 EditorConfig 插件来统一处理,而且这个插件还可以帮助我们规范代码,更方便团队管理代码格式。配置文件写好后,保存,然后重启 VS,后面再保存的文件就会使用 UTF-8 来处理了。在编辑器扩展商店中搜索 EditorConfig ,点击下载,成功后重启 VS。原创 2022-09-26 00:03:03 · 2159 阅读 · 2 评论 -
【Unity】Navigation 选择性寻路:Area Mask
在上一章节我们讲了窄桥、隧道、斜坡、台阶、坠落、跳跃等不同的烘焙方式,但还有一些导航的特殊情况。有时候某些特殊地形只能特定的角色才能通过,比如会游泳的角色才能下水,或者只有猴子才能爬上高坡,这时候就要进行选择性寻路了,通常我们使用Area Mask来实现这个功能。原创 2022-09-20 19:07:09 · 1354 阅读 · 0 评论 -
【Unity】导航 Navigation 设置:窄桥、隧道、斜坡、台阶、坠落、跳跃
Navigation 可以帮助我们自动生成坠落的外链,步骤是先在 Navigation 的 Object 标签页选中可以跳下的物体,勾选物体的 Navigation Static 和 Generate OffMeshLinks 属性。Navigation 是导航网格的核心模块,可以实现对 Agent(代理)、Area(区域)、Bake(烘焙)、Object(对象)的配置。通过调整跳跃距离可以实现自动生成跳跃的外链接。烘焙设置可以调整烘焙的方式,如代理半径、可移动斜坡角度等。更多内容请查看总目录。原创 2022-09-20 16:37:43 · 2070 阅读 · 0 评论 -
【Unity】导航基本组件:Nav Mesh Agent、Off Mesh Link、Nav Mesh Obstacle
如果该障碍物是可移动的障碍物,可以使用 Nav Mesh Obstacle 组件,实现物体的动态碰撞。比如一些动态机关或可移动的墙壁等。动态障碍物通过 Carve 设置也可以实现动态烘焙挖孔,但性能损耗较大,通常情况下尽量不要使用该功能。原创 2022-09-20 15:34:31 · 6403 阅读 · 0 评论 -
【Unity】Unity寻路系统讲解及Navigation实际应用
如果一个简单游戏只有一个代理在场景中移动,可一次性找出走廊的所有拐角,并推动角色沿着连接拐角的线段移动。描述路径的多边形的线性列表是用于转向的灵活数据结构,并可在代理的位置移动时进行局部调整。由于算法是局部的,因此它只考虑即将发生的碰撞,并且不能绕过陷阱或处理障碍物挡路的情况。这些情况需要知道动作的位置。由于每一帧中的代理移动距离非常小,我们可以使用多边形的连接来修复走廊,以防我们需要稍微绕道而行。单元格寻路就是把地图分隔为多个格子,形成一个矩阵,每个格子标注是否可移动,角色在可移动的格子内寻路。原创 2022-09-17 15:52:53 · 5468 阅读 · 2 评论 -
【Unity】Unity插件:地形编辑器MTE(Mesh Terrain Editor)
MTE(Mesh Terrain Editor)是一款Unity的地形编辑器插件,该插件能够更方便的创建和编辑地图,提升场景开发效率。原创 2022-09-14 20:56:30 · 8675 阅读 · 0 评论 -
【Unity】模型文件格式、常见3D模型格式
除非在计算机上安装了相应的 3D 建模软件,否则保存为 .ma、.mb、.max、.c4d 或 .blend 文件的资源将无法导入。.obj文件是Alias|Wavefront公司为它的一套基于工作站的3D建模和动画软件"Advanced Visualizer"开发的一种标准3D模型文件格式,很适合用于3D软件模型之间的互导。.fbx最大的用途是用在诸如在 Max、Maya、Softimage 等软件间进行模型、材质、动作和摄影机信息的互导,这样就可以发挥 Max 和 Maya 等软件的优势。原创 2022-09-09 21:52:17 · 16816 阅读 · 0 评论 -
【Unity】Unity 欧拉角、四元数、万向节死锁、四元数转轴角
所以我们要了解的是,欧拉旋转是一定要有顺序的。这样的问题其实是无法避免的,但是我们可以根据物体的旋转情况对此进行优化,这个优化的方法就是给三个轴指定一个新的层级顺序。欧拉角的旋转就是沿着万向节的轴旋转的。目前人类最常用也最容易理解的方式是先沿着X轴旋转,再沿着Y轴旋转,最后沿着Z轴旋转,最后达到目标旋转角度。在使用欧拉旋转的情况下,万向节锁的情况是无法避免的,为了更好的表示旋转,Unity引入了四元数的概念。Unity的优化方案:在万向节死锁的情况下,规定沿z轴完成绕竖直轴的全部旋转,即此时y轴旋转为0。原创 2022-09-09 18:01:00 · 3963 阅读 · 0 评论 -
【Unity】Unity常用类:向量Vector3、四元数Quaternion
但如果有任意三个向量为标准化向量(大小为1),且彼此正交(互相垂直),他们就可以被认定为轴。Vector3提供了一些静态变量,方便使用常用的方向,例如Vector3.up代表了Vector3(0, 1, 0)。通常使用此方法来做轴旋转(对Transform进行转转),使其一个轴(如 y 轴)跟随世界空间中的目标方向。正交标准化可以用来生成新的坐标系,但与正常坐标系不同的是,其正切向量与副向量是不固定的。例:用脚本创建物体,第三个参数角度可使用,使用后所创建的物体将于世界坐标一致。获取两个四元数之间的角度。原创 2022-09-09 17:57:48 · 5926 阅读 · 0 评论 -
【Unity】Unity 几何知识、弧度、三角函数、向量运算、点乘、叉乘
向量是一个数字列表,表示各个维度上的有向位移。它是一个有大小有方向的物理量。大小就是方向的模长,方向描述了空间中向量的指向。向量可以用来表示物体的位置和方向。原创 2022-09-07 14:02:50 · 4499 阅读 · 5 评论 -
【Unity】如何查看源码
将apk文件后缀名改为zip,然后解压到某个目录下,然后依次找到\assets\bin\Data\Managed\Assembly-CSharp.dll文件,拖拽到ILSpy.exe程序中即可。在游戏根目录找到Library文件夹,进入ScriptAssemblies文件夹,找到Assembly-CSharp.dll文件,拖拽到ILSpy.exe程序中即可打开。第二行标红处为DLL文件地址,找到此文件,并拖拽到刚才打开的ILSpy.exe软件中,即可查看源码。根据自己定义的命名空间找到相应的代码。原创 2022-09-06 14:29:01 · 14319 阅读 · 2 评论 -
【Unity】U3D ARPG游戏制作实例(二)人物基本动作切换
打开PlayerAnimatorController,右键点击空白处创建一个名为Idle的空白状态(Create State --> Empty),再将此状态设置为默认状态(Set as Layer Default State),通常情况下创建的第一个状态会自动被指定为默认状态,黄色状态即为默认状态。Idle和Run都需要做此操作,而Die则不需要,除非你的角色需要不停的Die。再创建Die和Run两个状态,按照下图,右键点击各个状态将动线连接到相应的状态(Make Transition)。原创 2022-09-02 13:01:07 · 1815 阅读 · 0 评论 -
【Unity】物理引擎、生命周期物理阶段、刚体、碰撞体、触发器、物理材质
Unity 可帮助您在项目中模拟物理系统,以确保对象正确加速并对碰撞、重力和各种其他力做出响应。从开发方式的角度出发,Unity提供了面向对象和面向数据两种方式。面向数据指的是Unity提供的一种新的技术栈DOTS(Data Oriented Tech Stack),而面向数据的物理引擎需要使用专用的DOTS物理包。由于此项技术栈尚不成熟,可用性很低,所以暂不考虑。面向对象内置3D物理系统(集成 NVIDIA PhysX 引擎)内置2D物理系统(集成Box2D引擎)......原创 2022-09-01 15:42:50 · 2768 阅读 · 1 评论 -
【Unity】U3D ARPG游戏制作实例(一)EasyTouch5完整示例
Unity Store中有很多Input相关插件,跟EasyTouch功能相似的也有很多,如果想要做个简单操作的手机项目可以考虑EasyTouch,如果想要在多个平台发布或者支持多种操作、复杂操作的话可以考虑另外一款插件Rewired,这款插件可以识别多种外设(手机、键鼠、手柄、方向盘、乐器等),有机会的话我会在写一片关于Rewired的文章。...原创 2022-08-25 22:38:41 · 2660 阅读 · 2 评论 -
【Unity】Unity开发进阶(七)双刃剑:扩展方法
扩展方法可以说是一把双刃剑,用好了锋利无比,用不好也有可能会自伤,但总得来说还是功大于过,特别适合具有经验的团队使用。原创 2022-07-30 23:06:50 · 1971 阅读 · 0 评论 -
【Unity】Unity开发进阶(六)UnityEvent使用与源码解析
UnityEvent其实就是Unity帮我们提前写好的用于处理事件的功能,其作用是减去了自己写委托的过程,且提高了开发的规范性,方便代码整合。更多内容请查看总目录【Unity】Unity学习笔记目录整理httpshttps。...原创 2022-07-29 16:38:37 · 8884 阅读 · 1 评论 -
【Unity】Unity3D 车位售卖系统制作实例(一)系统介绍及相机控制器
使用Unity制作停车管理系统;相机控制器示例。原创 2022-06-23 18:25:55 · 1031 阅读 · 11 评论 -
【Unity】Unity开发进阶(五)ArrayHelper数组帮助类
如果LINQ展开来讲其实也会有很多内容,类似于Hibernate,我自己之前做Java开发时也开发过类似的功能。其实此类功能开发并不复杂,从功能上来讲大部分就是查询和排序之类的,其实现原理也大多数是利用反射+表达式(LINQ中又利用到了委托),从性能方面考虑的话,反射和委托其实都不适合反复使用(因为经常会造成内存泄漏),所以我个人觉得非必要情况下尽量不使用LINQ,基本的功能自己实现就好了,而且自己实现的代码便于掌控,更便于自己掌控项目性能。...原创 2022-05-28 12:14:58 · 948 阅读 · 2 评论 -
关于作者:一些想说的话
从小我就是个游戏爱好者,四岁的时候红白机盛行,父亲顶着母亲的压力买了一台,任天堂的马里奥,KONAMI的魂斗罗、赤色要塞,还有各式各样的N in 1卡带,后来街机开始盛行(街霸、拳皇、三国战纪、西游释厄传、双截龙),从那时起就开始爱上了游戏,但也仅仅是爱玩。1994年我开始接触PC游戏,可以联机的红色警戒、绝地风暴、毁灭公爵、星际争霸,单机的金庸群侠传、幻想西游记、曹操传,还有永远也不会忘的仙剑奇侠传,既不回头,何必不忘,若是无缘,何须誓言。 今日种种,似水无痕,明夕何夕,君已末路。仿佛一扇大门向我打开原创 2021-12-15 16:55:04 · 3161 阅读 · 11 评论 -
【Unity】虚拟现实 VR UI框架搭建
由于VR游戏的UI相对来说比较复杂,普通的UGUI并不能满足要求,所以下面我们自定义一套更适合VR的UI框架,以便于开发和管理。原创 2021-12-13 18:32:35 · 6274 阅读 · 0 评论