![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Unity后端开发
文章平均质量分 81
是嘟嘟啊
一个放弃java转投游戏的热血战士!
展开
-
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】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 评论 -
【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】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游戏制作实例(一)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】Unity C#基础(三)封装、修饰符、方法、参数、扩展方法
当定义一个方法时,从根本上说是在声明它的结构的元素。访问修饰符,这个决定了变量或方法对于另一个类的可见性。返回类型,一个方法可以返回一个值。返回类型是方法返回的值的数据类型。如果方法不返回任何值,则返回类型为void。方法名称,是一个唯一的标识符,且是大小写敏感的。它不能与类中声明的其他标识符相同。参数列表,使用圆括号括起来,该参数是用来传递和接收方法的数据。参数列表是指方法的参数类型、顺序和数量。参数是可选的,也就是说,一个方法可能不包含参数。方法主体,包含了完成任务所需的指令集。...原创 2021-08-26 19:41:46 · 3164 阅读 · 0 评论 -
【Unity】Unity开发进阶(五)ArrayHelper数组帮助类
如果LINQ展开来讲其实也会有很多内容,类似于Hibernate,我自己之前做Java开发时也开发过类似的功能。其实此类功能开发并不复杂,从功能上来讲大部分就是查询和排序之类的,其实现原理也大多数是利用反射+表达式(LINQ中又利用到了委托),从性能方面考虑的话,反射和委托其实都不适合反复使用(因为经常会造成内存泄漏),所以我个人觉得非必要情况下尽量不使用LINQ,基本的功能自己实现就好了,而且自己实现的代码便于掌控,更便于自己掌控项目性能。...原创 2022-05-28 12:14:58 · 948 阅读 · 2 评论 -
【Unity】虚拟现实 VR UI框架搭建
由于VR游戏的UI相对来说比较复杂,普通的UGUI并不能满足要求,所以下面我们自定义一套更适合VR的UI框架,以便于开发和管理。原创 2021-12-13 18:32:35 · 6274 阅读 · 0 评论 -
【Unity】虚拟现实 VRTK插件使用教程(六)VR UI (UGUI和VRTK的事件处理机制)
文章目录UI2D UIUIUI通常按类别分为三种,即2D UI、3D UI、模型UI。2D UI:2D UI固定在屏幕上,不会跟着角色移动而移动。3D UI:3D UI放在场景世界中,当相机移动到UI前面才能看到。模型UI:2D UI要使用2D UI就要先创建一个画布Canvas,画布的渲染类型通常可以设置为:Screen Space - Overlay(2D)Screen Space - Camera(2D)World Space(3D)在VR游戏中,如果想要2D UI,原创 2021-11-11 17:44:30 · 6886 阅读 · 0 评论 -
【Unity】虚拟现实 VRTK插件使用教程(五)看源码了解VRTK设计思路
传送组件的实现原理传送组件(VRTK_BasicTeleport)的源码中,在OnEnable方法中使用协程调用了 InitListenersAtEndOfFrame 方法,该方法的实际内容就是在帧的最末尾调用 InitDestinationMarkerListeners 方法,此方法中做了以下几件事:获取左右手的 GameObject 对象,传到 InitDestinationSetListener 方法中。获取所有 VRTK_ObjectCache 中缓存的VRTK游戏对象,传到 InitDes原创 2021-09-15 16:41:35 · 1850 阅读 · 0 评论 -
【Unity】虚拟现实 VRTK插件使用教程(四)武器事件处理
文章目录武器脚本开火事件注册武器脚本通常在游戏中可以使用多种武器,那么每类武器就应该有自己独立的脚本,每个实际的武器又应该有其单独的脚本实例。比如,我有一部分武器是单发的枪,那我就应该有一个单发枪的脚本 SingleGunControl ,这个脚本可以指定一些枪支的基本参数(单发伤害,子弹初速度,子弹类型,射速,换弹速度等),在生成不同的单发枪支时给这些参数赋值。开火事件注册在定义好 SingleGunControl 脚本后,我们需要给手柄控制器提供开火事件响应器。代码如下:/// <s原创 2021-09-14 19:06:58 · 727 阅读 · 0 评论 -
【Unity】Unity开发进阶(四)Unity脚本单例工具(必备工具)
在Unity场景中,经常有很多脚本需要引入,而这些脚本中,有很大一部分都是只需要引用一次,也只需要进行一次实例化,此时我们可以提供一个工具用于自动获取该脚本的实例对象,并保证全场景中只包含这一个实例,还能在脚本未被引入时实现自动引入脚本。这是一个非常实用的工具,几乎每个项目都会用到。该工具的特点:自动获取该脚本的实例对象。保证全场景中只包含这一个实例。在脚本未被引入时实现自动引入脚本。具体代码如下:/// <summary>/// Mono脚本单例工具/// 使用场景:所有在原创 2021-09-06 18:34:27 · 1599 阅读 · 0 评论 -
【Unity】Unity开发进阶(三)对象排序工具、减少使用foreach
vs类设计器(类图工具)安装vs2019安装路径:工具 - 获取工具和功能 - 点击VS2019选项卡的修改按钮 - 单个组件标签页 - 搜索类设计器 - 勾选类设计器 - 修改。2017略有不同,不行百度一下。原创 2021-08-10 00:20:39 · 1098 阅读 · 0 评论 -
【Unity】Unity内存管理与优化(三)
文章目录Unity内存管理内存细分分析内存- 分析内存消耗- 分析内存效率内存管理性能增强垃圾回收策略手动JIT编译值类型和引用类型- 传值和传引用- 结构体是值类型- 数组和引用类型- 字符串是不可变的引用类型字符串连接- 字符串池- StringBuilder- 字符串格式化拆装箱数据布局的重要性Unity API中的数组对字典使用InstanceIDforeach循环协程闭包.NET库函数临时工作缓冲区对象池预制池IL2CPP优化WebGL优化Unity、MONO和IL2CPP的未来C# Job Sy原创 2021-09-02 09:55:54 · 531 阅读 · 0 评论 -
【Unity】Unity C#基础(十三)泛型(Generic)
文章目录泛型(Generic)泛型(Generic)的特性泛型类泛型方法泛型委托继承和泛型泛型方法虚拟方法泛型参数隐式强制转换泛型参数显示强制转换泛型参数强制转换到其他任何类型使用is和as运算符泛型约束派生约束构造函数约束值约束引用约束多个泛型参数C#泛型与Java泛型泛型(Generic)泛型(Generic) 允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛型允许您编写一个可以与任何数据类型一起工作的类或方法。C#的泛型,无论是源码,IL语言,还原创 2021-08-31 13:55:08 · 3429 阅读 · 0 评论 -
【Unity】Unity 常用类
Unity核心类图更多内容请查看总目录【Unity】Unity学习笔记目录整理原创 2021-08-28 14:40:56 · 1011 阅读 · 0 评论 -
【Unity】Unity C#基础(十二)特性Attribute、反射Reflection
特性常用特性自定义特性更多内容请查看总目录【Unity】Unity学习笔记目录整理原创 2021-08-28 13:16:39 · 3562 阅读 · 3 评论 -
【Unity】Unity C#基础(十一)预处理指令
预处理指令更多内容请查看总目录【Unity】Unity学习笔记目录整理原创 2021-08-28 13:14:15 · 2996 阅读 · 0 评论 -
【Unity】Unity开发进阶(二)自定义Update
自定义Update更多内容请查看总目录【Unity】Unity学习笔记目录整理原创 2021-08-27 23:49:15 · 1199 阅读 · 0 评论 -
【Unity】Unity 进程、线程、协程
进程线程协程更多内容请查看总目录【Unity】Unity学习笔记目录整理原创 2021-08-27 17:29:05 · 6351 阅读 · 0 评论 -
【Unity】Unity C#基础(九)继承、多态、抽象类、接口、抽象方法、虚方法、重写、覆盖
抽象类抽象属性接口委托抽象方法虚方法匿名方法更多内容请查看总目录【Unity】Unity学习笔记目录整理原创 2021-08-27 15:50:03 · 5013 阅读 · 0 评论 -
【Unity】Unity内存管理与优化(二)方法表、重写、隐藏、静/动态绑定、同步块索引
Unity内存管理分析内存分析内存消耗分析内存效率内存管理性能增强垃圾回收策略手动JIT编译值类型和引用类型传值和传引用结构体是值类型数组和引用类型字符串是不可变的引用类型字符串连接字符串池StringBuilder字符串格式化拆装箱数据布局的重要性Unity API中的数组对字典使用InstanceIDforeach循环协程闭包.NET库函数临时工作缓冲区对象池预制池IL2CPP优化WebGL优化Unity、MONO和IL2CPP的未来C#原创 2021-08-27 12:12:13 · 1220 阅读 · 0 评论 -
【Unity】Unity开发进阶(一)减少跨桥(上下文切换)
创建自定义的Update层减少跨桥(上下文切换)什么是桥?Unity中有三大内存域:托管域、本地域、内存域外部库。其中托管域主要存放我们编写的MonoBehaviour和自定义C#类,而本地域用于存放Unity底层功能,主要处理各个子系统(渲染管线、物理系统、用户输入系统等)中资源数据(纹理、音频文件、网格等)和内存空间的分配。最主要的是本地与包含了GameObject和Component等重要游戏对象的部分本地描述,这也是大多数内建Unity类(Transform、Rigidbody等)保存数据的原创 2021-08-26 11:35:34 · 2094 阅读 · 2 评论 -
【Unity】Unity内存管理与优化(一)内存域、堆栈、垃圾回收、内存泄漏、内存碎片
Unity内存管理在游戏开发的世界中,程序的优劣与内存的使用有着密不可分的关系。从很多方面来说Unity对于内存的使用并不是最优解,正因为如此,Unity的内存管理与优化就显得尤为重要。内存域垃圾回收内存碎片运行时垃圾回收多线程垃圾回收分析内存分析内存消耗分析内存效率内存管理性能增强垃圾回收策略手动JIT编译值类型和引用类型传值和传引用结构体是值类型数组和引用类型字符串是不可变的引用类型字符串连接StringBuilder字符串格式化拆装箱数据布局的重要性U原创 2021-08-25 14:46:19 · 9332 阅读 · 3 评论 -
【Unity】Unity编译顺序及代码保护
Unity编译顺序及代码保护原创 2021-08-25 09:17:59 · 464 阅读 · 0 评论