- 博客(145)
- 收藏
- 关注
原创 Unity游戏开发如何优化移动端的延迟渲染管线?
hlsl 复制 // Compute Shader中光源剔除 [numthreads(8, 8, 1)] void CullLights (uint3 id : SV_DispatchThreadID) { uint2 tileID = id.xy / TILE_SIZE;优化手段带宽节省内存降低画质损失Half-Res GBuffer75%50%中(需TAA)RGB565颜色格式50%50%高(色带)分块光源剔除30%*无低禁用屏幕空间反射20%15%中。
2025-03-26 16:44:44
706
原创 Unity游戏开发中的网格简化与LOD技术(Mesh Simplification & LOD)
在Unity游戏开发中,网格简化(Mesh Simplification)和LOD(Level of Detail)技术是优化渲染性能的关键手段,尤其在处理复杂场景和高精度模型时至关重要。// quality范围0~1(0为最简化)// 保留30%细节。最终实现复杂场景在移动端稳定30/60FPS、PC/主机端4K高帧率渲染的目标。// 运行时动态简化(适用于Procedural Mesh)// LOD0(高清模型,摄像机距离0-10米时显示)// 运行时根据距离生成简化网格(需结合简化算法)
2025-03-06 13:45:21
991
原创 房间模式网络游戏的架构与设计
这样云服务器的配置就确定了,在代码不变的情况下每台云服务器能做的事情,部署的任务也就确定了。如果云服务器的硬件配置一般,我们可以把一部分的逻辑服(游戏分区,如新手场,高手场)部署到一台云服务器上,把另外一部分部署到另外的云服务器上。每个房间实例中,管理一起游戏的几个玩家对象。房间模式逻辑服务实例的第一个流程就是将等待列表上的玩家进行匹配,分配几个玩家到一个房间对象,一起游戏,上架构图1-2。不同的等级,不同的分区分成不同的等待列表。步骤2: 找一个空闲的还可以容纳人的房间对象,如果没有房间,则用创建一个;
2024-12-27 15:46:31
888
原创 Unity 战斗系统中角色UI血条设计
最后一件事情,就是角色到哪里,UI血条昵称对象的位置就更新到哪里,这个如何设计呢?首先每个战斗单元,我们都会设计一个管理类提供策略,比如玩家对象,很多游戏会设计一个Player类来控制玩家, Boss怪会设计一个BossEnemy的类来控制Boss,而Player, Boss需要的很多策略,有些是共用的,血条就是其中之一,所以一般Player与Boss都会继承自一个策略基类FightCharactor,我们就可以把战斗掉血,吃道具加血以及UI血条的机制策略设计到FightCharactor里。
2024-12-26 16:37:06
1050
原创 Unity Lua方向的面试真题详解
如果是帧同步,每一帧,服务端会把所有客户端的操作转发出去,这个时候要解决网络延时问题,也是用UDP来代替传统的TCP,来做数据通讯,如果某个数据包卡住的情况下,客户端,可以用上一帧的操作,延长几帧的处理时间,做所谓的"预演",如果下一帧来的操作,刚好和上一帧一样,那么预演成功,客户端感觉不出来卡顿,不成功,客户端会卡顿or鬼畜。3: 操作层:我们会把战斗中的操作独立出来,比如UI操作,网络事件,AI事件等,通过事件模块,来调用到战斗中的具体策略,这样,可以实现不同操作层来驱动战斗,调用战斗策略;
2024-11-22 15:34:25
877
原创 Unity DOTS系列之Aspect核心机制分析
Aspect是一个特殊的数据结构,可以把它理解为是entity中一些组件的引用Wrapper”包装盒”,把entity中的一些组件的引用包含在一起。方便在System中通过这个Aspect来获取entity当中的组件的引用,高效方便的访问entity中的一些组件数据。RefRO修饰的组件是只读的,RefRW修饰的组件可读写。例如Entity类型A与Entity类型B,都有Aspect所定义的组件与引用,那么系统如何把A类型的Entity与B类型的Entity都生成它对应的Aspcet对象呢?
2024-10-25 10:34:54
617
原创 Unity DOTS系列之Struct Change核心机制分析
Struct Change开销,除了要重新从chunk里面分配内存块,复制数据以外,还有同步点的开销,同步点你可以理解为一个锁,当发生了Strcut Change的时候,为了保证正确性,系统会生成一个同步点,这样其它的要使用这个数据的线程都会被挂起,直到Struct Change操作完成。当删除一个entity的时候,先找到内存块所在的chunk,找到内存块在chunk中的偏移位置,把最后一个entity的component数据复制到刚才释放的内存块中,把最后的那个内存块释放出来,供一下分配。
2024-10-25 10:33:42
962
原创 Unity DOTS系列之托管/非托管Component的区别与性能分析
它与所在Entity的其它Unmanaged Component基于ArchType排列在一起,这样可以获得很好的性能,因此Unmanaged Component在ECS开发中是最常用的一种组件数据类型。Managed Component的数据不直接存放在Chunk中,World会有一个很大的”数组”,专门来存放Managed Component,而我们Entity的基于ArchType的Component数据块中存放的是Managed Component的在数组中的偏移地址。
2024-10-25 10:32:41
550
原创 Unity DOTS《群体战斗弹幕游戏》核心技术分析之3D角色动画
在DOTS 的baker过程种,不支持常见的动画组件,包括: Animation组件,基于状态机的Animator, 以及人形动画。按照以上的需求,我们在群体战斗的游戏中选择《3D帧动画》模式来做大规模的角色动画。这个方式有几个好处,动画预先被计算生成到纹理里面,这样代替原来的动画采样计算,空间换时间节省了性能,同时面数少,动画简单,这样动画纹理的内存占用可以接受。渲染质量要求不高,这样我们的战斗单元的模型的面数可以尽量的低,这样顶点数不会特别多,同时动画也不会很复杂,帧数也可以比较少。
2024-10-25 10:30:27
1264
原创 关于Unity UGUI动静分离面试题详解
静态合批”合批的一个好处就是合并完后如果内部的UI元素没有位置等信息没有修改,就不用重新计算,渲染的时候直接把合并好的数据提交渲染就可以了。Unity UGUI 会基于Canvas,将能合并的UI元素,计算合并到一起,然后再提交给GPU渲染来节约Drawcall,在这个过程中,如果某个UI元素改变了,就会引发一次合并计算。假设界面A中的所有UI元素都不变化,界面B中的每个UI元素的位置在不断的改变,我们来分别讨论以下,界面A,界面B共用一个Canvas与界面A,界面B分开两个Cavans在合并上的开销。
2024-10-23 15:18:29
295
原创 关于无厘头的面试题,我们该如何回答
,我们先抛一个”不败”的立场来开场:”现在社会,生活压力很大,节奏很快,个人,公司都可能面临复杂的竞争和抉择,导致我们不能像国企一样,可以一直干下去。“面试官,这个问题有点不好回答,不同的项目,情况可能不一样,不能一刀切,如果我是项目负责人来制定公司某个项目的相关技术规范,我会这样来综合考虑,来制定一些注意的规范,您看下我说的对不对?,有遗漏的还请指正。最后面试时,分享一个小技巧,自己带笔+笔记本,面试时,记录面试官的问题,同时回答问题时,先在笔记本上思考一小会,确立一下回答问题的基本立场和思路框架。
2024-10-23 10:23:16
451
原创 程序员该如何做游戏创业
创业拉投资这个想法,对于个人开发者而言是不现实的,除非你有很好的人脉和背景资源,因为别人投一分钱,首先也到要有信任,所以个人开发者基本上是拉不到投资的,也不是一条好路。没错,在立项的时候,就要选择好对应的后续运营的重点渠道。选好要做的渠道后,就要搞清楚渠道的一些规则和平台运营的相关策略,持续的跟踪渠道上其它的一些好的游戏项目,学习他们的一些运营方式,并找一些潜在可以合作的运营资源。做熟人数据调研的时候,不要去问朋友,自然的推荐他们这款游戏,就让他们自然的玩,然后后台看下他们的一些相关的游戏数据与游戏时长。
2024-10-23 10:22:07
415
原创 关于个人创业的几个大实话
我们普通人,没有好的背景,没有好的学历,没有过硬的技术专利等无资源调度的情况下,商业模式要足够的简单,从产品研发到市场到回款,链条要足够的简单,清晰,周期短。可能我们起步创业的项目,没有赚多少钱,但是时间积累下的基本盘的价值,能为你后来的融资转型打下坚实的基础。所以我们很辛苦的做外包项目,发现当有一天外包没有那么多的时候,再回头发现,我们从来没有真正的进入哪个行业,哪个市场,积累了一批忠实的用户。我们一辈子的精力与机会是有限的,从创业开始,你就要想清楚,你到底要一个什么样的事业。也是竞争很大的创业项目。
2024-10-23 10:21:11
429
原创 Unity MMORPG 背包系统如何设计
背包系统中的物品分为2个部分,第一部分是物品的属性描述,第二部分是玩家在游戏里面拥有物品的数量,第一个部分就是策划要填写的内容,有哪些物品,这些物品会有哪些属性等,同时程序在使用装备的时候, 去读取里面的数据属性值来参与程序计算。MMORPG游戏中背包系统是很重要的一个模块, 大部分的背包系统的讲解,都是讲如何设计UI,如何显示这些,其实这些东西并不是背包系统的核心,接下来我们来分析一下背包系统的数据结构如何设计,能让策划和程序很好的工作,以及非常方便的扩展。3: 如何设计好背包物品的数据属性配置。
2024-10-12 10:52:24
576
原创 URP渲染管线实战教程系列3
光照上色的本质就是,渲染Shader拿到光照的数据,根据光照计算,最后决定片元的颜色,上色到屏幕中。上一节通过剖析URP 摄像机了解摄像机的机制,本节来分析URP的光照的主要机制,并通过与内置的向前渲染管线做对比,来比较它们的与不同。(图1.3-6) URP Shader一次完成光照计算。(图1.3-5) URP光源的逐顶点+逐像素配置。(图1.3-4) URP光源的数目限制。(图1.3-1) URP平行光组件。(图1.3-3) URP平行光组件。(图1.3-2) 普通平行光组件。
2024-09-27 12:31:10
880
原创 URP渲染管线实战教程系列2
Base 摄像机是最先被绘制的,场景中只有一个Base摄像机有效,如果要做多个摄像机共存,我们需要把创建一个Overlay模式摄像机(可以添加组件或复制其它摄像机),并在Base摄像机的Stack List上添加这个Overlay模式摄像机。上一节从项目的目录结构与示例场景的内容分析了UPR渲染管线项目的基本组成,接下来分析URP的主要机制,并通过与内置的向前渲染管线做对比,来比较它们的与不同。(图1.2-5) 将创建的Overlay摄像机放入Base摄像机的Stack中。
2024-09-27 12:30:33
935
原创 URP渲染管线实战教程系列1
游戏是从PC端游发展起来的,我们拿传统的向前渲染管线中的光源来距离,向前渲染管线支持任意多的重要光源,每个重要光源, Unity 都要基于这个光照来绘制一次物体, 这样导致pass次数非常的多,性能消耗开销非常大,于是就有静态光照,静态烘培等。这个时候,就需要开发者做一个权衡和选择,在特定的满足手游开发需求前提下,最大限度的提升性能,于是URP渲染管线就出来了,他假定了一些特定条件如主光源只能是平行光,其它的附加光源在配置文件中限定数目,在一个pass内处理完所有的光源与光照计算。
2024-09-27 12:29:46
927
原创 灵魂拷问: Unity主程如何做好游戏项目管理
还有一个很重要的点是要考虑渲染降级,我们在做一些精品的游戏的时候往往考虑的是中高端手机的游戏画面和效果,但是有些低端机,为了玩家的流畅性,我们就要考虑渲染降级,如何来做这个处理,我们也要做好需求分析与技术验证,比如编写一套shader,如果是低端机,就用渲染效果没有那么好但是性能开销小的shader。今早的他测试对接流程放日常的开发中。渲染性能验证是指模拟游戏玩法的极限情况,堆出来可能的极限的场景,角色数目,怪物数目,释放技能等然后运行来验证渲染的性能,看下三角形的面数,渲染性能开销,Drawcall等。
2024-09-27 12:27:24
889
原创 Unity DOTS《群体战斗弹幕游戏》核心技术分析之3D角色动画
在DOTS 的baker过程种,不支持常见的动画组件,包括: Animation组件,基于状态机的Animator, 以及人形动画。按照以上的需求,我们在群体战斗的游戏中选择《3D帧动画》模式来做大规模的角色动画。这个方式有几个好处,动画预先被计算生成到纹理里面,这样代替原来的动画采样计算,空间换时间节省了性能,同时面数少,动画简单,这样动画纹理的内存占用可以接受。渲染质量要求不高,这样我们的战斗单元的模型的面数可以尽量的低,这样顶点数不会特别多,同时动画也不会很复杂,帧数也可以比较少。
2024-09-26 14:47:35
954
原创 Unity 性能调优技术集锦
不管什么问题,按部就班,不要根据经验,武断的下结论,要严格证明问题所在后再动手, 很多小伙伴遇到性能问题后,把问题简单的描述一下,去请教一个经验丰富的人,问他可能是哪方面的问题,我想说这种方式是很难做好你项目的性能优化的,项目和项目都不一样,连具体的问题都没有定位,你去请教经验丰富的老者,从老者的角度来说也无法帮到你。例如, 刚开始的时候帧率是60FPS,同一个场景运行一段时间以后是30FPS,如何优化,像这种符合很明显的对比场景,我们可以通过前后对比,来找出60FPS,30FPS,最大的变化。
2024-09-26 14:46:03
1115
原创 Unity Lua方向面试真题详解
如果是帧同步,每一帧,服务端会把所有客户端的操作转发出去,这个时候要解决网络延时问题,也是用UDP来代替传统的TCP,来做数据通讯,如果某个数据包卡住的情况下,客户端,可以用上一帧的操作,延长几帧的处理时间,做所谓的"预演",如果下一帧来的操作,刚好和上一帧一样,那么预演成功,客户端感觉不出来卡顿,不成功,客户端会卡顿or鬼畜。3: 操作层:我们会把战斗中的操作独立出来,比如UI操作,网络事件,AI事件等,通过事件模块,来调用到战斗中的具体策略,这样,可以实现不同操作层来驱动战斗,调用战斗策略;
2024-09-26 14:45:32
583
原创 Unity架构师进阶:红点系统的架构与设计
红点系统内部基于节点池机制,所以要给红点节点创建一个特有的节点池。编写一个RedPointFlag组件,继承Component,用来标记哪些节点是红点,这个组件的作用是在一个UI界面销毁的时候,方便利用这个Flag组件,找到所有的”红点”,并把它们一起回收。删除所有的红点,这里就利用了RedPointFlag组件,通过把带有这个组件的所有节点筛选出来,就是我们的红点节点了。1: 编写接口”CreateRedPoint”,用来创建一个”红点”的节点,返回节点给使用者,至于红点放什么位置由使用者决定;
2024-09-26 14:44:39
486
原创 Unity DOTS系列之IJobChunk来迭代处理数据
当JobChunk的结构体定义好以后,我们就可以在System中使用它们,在System的Update中定义一个结构体对象,把JobChunk结构体中的数据初始化好,然后调用JobChunk的执行函数。3:定义在Job中Execute中所使用的数据,这些数据在System Update迭代的时候传入。在DOTS中迭代处理Entity的组件数据先找到对应符合条件的ArcheType,然后再找到ArcheType对应的所有的Chunks,再遍历每个Chunk里面的每个Entity的组件数据。
2024-09-19 13:50:20
1255
原创 Unity DOTS系列之System中如何使用SystemAPI.Query迭代数据
当我们要遍历一个World里面的entity数据的时候,我们需要根据数据类型来筛选出对应的组件与Entity。>(),其中t1, t2就是我们需要的component data的类型,查询的时候,会遍历World 里面有这些组件的Entity,获取组件的引用。当我们在System代码里面调用foreach+SystemAPI.Query的时候,我们的自动代码生成器会根据Query调用的时候传递的参数的类型来生成EntityQuery字段到当前的System类里面(正因如此,我们在定义一个S。
2024-09-19 13:49:45
756
原创 网络游戏开发系列
状态同步的核心就是:处理每种状态和事件之前,先同步,然后再服务端计算服务端的,客户端做客户端的。只要是网络游戏,涉及到服务器与客户端同步的游戏,都可以使用状态同步,举几个状态同步的例子,如《魔兽世界》,腾讯《吃鸡》,《自走棋》等大部分的多人在线的网络游戏都是用状态同步来做的,换句话说网络游戏中除了少数人对战(5v5, 10v10)的Moba类,FPS类等会用帧同步以外,其它的都是状态同步。由上面得到的结论就是,行走过程中位置的变化,没有必要同步到客户端,服务端跑服务端的,客户端跑客户端的,只是。
2024-09-13 15:32:08
438
原创 游戏开发中的矩阵
根据上面的规则,我们发现两个矩阵要能相乘必须要满足一个条件,就是左边矩阵的列数等于右边矩阵的行数,否者两个矩阵是无法相乘的。我们叠加在一起运算一下, 先缩放还是先平移,得到的结果不一样,先平移后缩放的结果是 (x, y, 1) 先平移dx, dy, 后缩放3倍,(3x+3*dx, 3y + 3*dy, 1), 先缩放后平移, 得到的结果是(3x+dx, 3y + dy, 1)。逆矩阵: 矩阵A的反向矩阵叫A的逆矩阵即: A矩阵*A的逆矩阵=单位矩阵, 两个互为逆矩阵的叠加在一起,相当于没有变化。
2024-09-13 15:31:33
455
原创 游戏服务器性能压测实战分析
问题中,总共8个CPU核心,CPU占用率20%左右,要3秒的响应时间,和我们数据分析出来的基本能对上。问题5, 测试服务端请求Redis的情况,彻底排除掉Redis的影响,因为本次的性能测试请求与Redis有关。遇到这类问题,我们首先要做问题分析,在处理问题之前,一定要了解清楚并发时候的服务端技术架构组成,以及相关信息,然后再对问题做出对应的判断与调试。今天的分享就到这里了,问题比较简单,但是分析的思路值得推荐给大家,所以我就写了这个文章,关注我,可以获得更多游戏开发的文章与教程。能否发挥多核的优势。
2024-09-13 15:30:44
497
原创 C#游戏服务器开发框架设计与架构详解
很多新手会担心自己整合的框架不能商用,这个担心完全没有必要,现在行业的发展已经很成熟,每个模块都有成熟的解决方案来提供支撑,我们要做的就是整合起来,组织我们项目逻辑的开发方式而已,所以现在的行业设计一个游戏服务端框架远比大家想象的简单和稳定。经过这些年的项目经验,其实最好用,最适合的游戏服务端框架就是自己结合公司项目需求,团队特点与技术能力,自己整合的游戏框架是最好用的。我们服务端开发中的所有基础模块都有成熟的第三方库,有了这些第三方库的加持,你做的游戏服务端框架,想不稳定都难^_^。
2024-09-06 15:49:04
920
原创 制作MMORPG游戏需要储备哪些技术
2: 学会引擎基础知识:【项目创建】,【编辑器面板使用】,【3D物体的创建与摆放】【模型角色的导入与显示】,【地形的制作与使用】,【场景光照烘培】【角色动画播放】【粒子特效】【UI界面制作】【事件监听与响应】【物理引擎】【角色导航与地图编辑】【声音播放】【网络连接服务器】【资源管理】【Shader开发】【登录与注册】【角色创建】【准备的穿戴】【背包系统】【商城系统】【任务系统】【游戏地图】【游戏刷怪】【攻击与技能】【怪物与AI】【装备管理】【数值对接】【工会系统】【地图副本】等业务逻辑。
2024-07-03 14:08:48
553
原创 DOTS Unity.Physics物理引擎碰撞查询核心分析
给定一个特定的形状,沿着一条直线的起点到终点的方向来做碰撞测试,这个形状撞到空间中的物体就返回碰撞结果。如下图所示,橙色的碰撞器沿着直线的方向与黄色的物体相交,相交的性质与位置在紫色的地方。碰撞查询(Collison Qurey)计算的时候,读取的是物理引擎里面的内部数据,更准确的说是broadphase阶段的内部数据。完成物理迭代的计算后,同步更新最新的物理数据到碰撞查询所需要的数据结构中,这样碰撞查询更精准但是也会消耗更多的性能。ColliderKey: 返回碰撞所在的三角形面的更加详细的内部信息;
2024-07-02 09:53:34
895
原创 DOTS Unity.Physics物理引擎碰撞事件处理
上面提到的Step1,在PhysicsInitializeGroup阶段完成, step2~step5在PhysicsSimulationGroup中完成, PhysicsSimulationGroup完成后物理引擎的一帧的迭代计算完成,最后通过ExportPhysicsWorld的System把把物理引擎的内部数据同步到Entity的PhysicsVelocity, LocalTransform等ECS组件。Step3: 通过编写Job,来遍历当前所有发生的碰撞事件,然后编写每个碰撞事件的处理逻辑;
2024-07-02 09:45:05
953
原创 游戏服务器性能压测实战分析
问题中,总共8个CPU核心,CPU占用率20%左右,要3秒的响应时间,和我们数据分析出来的基本能对上。问题5, 测试服务端请求Redis的情况,彻底排除掉Redis的影响,因为本次的性能测试请求与Redis有关。遇到这类问题,我们首先要做问题分析,在处理问题之前,一定要了解清楚并发时候的服务端技术架构组成,以及相关信息,然后再对问题做出对应的判断与调试。今天的分享就到这里了,问题比较简单,但是分析的思路值得推荐给大家,所以我就写了这个文章,关注我,可以获得更多游戏开发的文章与教程。能否发挥多核的优势。
2024-07-01 09:48:33
996
原创 Unity 如何设计网络框架
写好这些基本数据类型的编码和解码的代码, 然后编写要数据对象的协议,然后开发一个编译器,他可以根据这个协议文件,基于基本数据类型的编码/解码函数,根据协议,结合基本数据类型的编码解码,按照对象的结构,猜分成若干基本数据类型,自动生成编码/解码函数代码。注意好这些点,就可以设计出一个很好的网络框架。当我们要发送数据的时候,CPU调用IO的接口,把数据从内存拷贝到网络底层,等待底层把数据传送过去后,CPU调用的IO函数返回,而这个过程,CPU在等待网络把数据发出去,线程挂起了,这个我们叫做。
2024-06-13 15:03:00
1027
原创 Unity 3D定点数物理引擎实战系列
而且其它的形状的物理Entity,除了形状创建会不一样,其它基本一样,所以我们调整一下设计,把PhyBoxEntity与物理形状相关的代码放到PhyBoxEntity里面,与形状无关的物理Entity的基本功能,我们放到PhyBaseEntity里面,然后让具体的形状在扩展的时候继承PhyBaseEntity即可。本节来从新调整设计,让物理的Entity基本操作与物理的形状分离,支持更多的物理形状,支持物理entity与Unity物体位移与旋转同步。3: 编写其它的形状的物理Entity;
2024-06-13 15:01:48
1079
原创 实测Unity程序员面向ChatGPT编程是个什么样的体验
以上代码中,首先获取了模型材质和TextMeshPro组件,然后创建了一个512x512的文字纹理,并将TextMeshPro组件中的文字像素值赋值给纹理。我们加上名字空间,还是报错找不到TextureMapping,我们怀疑是不是版本的问题,接下来问ChatGPT, unity 2020 是否有TextureMapping, 如何没有,用什么替代?我们对逐一的情况进行了排查,发现chatgpt列举的情况,都是对的,meshinfo[0]也不为null, 好吧我们换一种问法。
2024-05-06 10:52:56
749
原创 可视化冒泡排序算法
相信大家都知道一些排序算法,比如冒泡排序,快速排序,选择排序等等...就算大家不知道,也应该听过,一般的面试都会问一些算法,简单一点的就是冒泡排序这些,难一些的就是A*寻路算法等...其实大家可能都会觉得这个冒泡排序非常简单,确实是挺简单的,但是对于初学者或者一些萌新们来说,他们只会按照别人说的秘籍:外层循环n - 1 次,里层循环n -1 - i 次,但是真的理解了吗?重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。
2024-04-17 09:53:27
219
原创 亮度、饱和度、对比度对后处理的影响
首先说下原理,关于亮度的操作,其实很简单的一个操作就是通过一个参数,让它和采样后的变量进行相乘就可以了,也就是对整个的RBG进行缩放。接着就是对比度的操作了,关于这个对比度我们可以首先定义一个最低的对比度值,然后根据用户设置的变量让对比度再最低和原图之间进行插值运算。Shader不仅可以做一些炫酷的效果,比如技能特效,粒子特效等,除了这些,它也是能对屏幕进行操作的。今天给大家分享一个后处理效果,关于亮度,饱和度,对比度对后处理的影响。我们可以通过对亮度,对比度,饱和度的值进行修改,从而修改最终的渲染效果。
2024-04-17 09:50:15
339
原创 如何实现Moba游戏野怪的AI系统
OK,那么这个野怪的AI到底怎么做的?首先我们需要闭着眼睛想想我们玩游戏的时候,别人的AI咋做的,然后我们就模仿别人的做出来。那么我们都玩过,也知道野怪的”脾气”,你不打它,它就会在自己的一亩三分地里面,不会乱跑。如果你过去打它,那么它也会反击你,直到它丢失视野或者超过了它可移动的最大范围,它就会回去原来的地方待着。既然是中立的野怪,那么它是不属于任何一方的资源,大家是靠本事获取的。那么今天我们就做一个野怪的AI系统,这个系统不是非常的完整的一个野怪系统,因为是抽时间随便做的,但是基本的功能都是有的。
2024-04-15 10:38:34
317
原创 Unity 3D定点数物理引擎实战系列:BEPU物理引擎碰撞计算与碰撞规则的架构与设计
使得物理Entity与周围的物理环境产生碰撞时,如何灵活的控制物理碰撞,本节給大家详细的讲解BEPUphysicsint 物理引擎内部是如何管理与控制碰撞规则的。形状与角度来精确的计算出来是否有真实的碰撞以及详细的碰撞点位置,表面法线信息等。延后决定,一个比较特殊的状态,上面说了有3个地方可以决定碰撞策略,如果某一个地方没有碰撞策略,就返回。两个地方无法决定碰撞策略的时候,物体的碰策略就是由它所在的分组来决定。,碰撞规则是决定了物体与物体之间的碰撞该如何处理与计算。碰撞测试时候的碰撞算法。
2024-04-15 10:33:05
1073
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人