自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(117)
  • 收藏
  • 关注

原创 制作MMORPG游戏需要储备哪些技术

2: 学会引擎基础知识:【项目创建】,【编辑器面板使用】,【3D物体的创建与摆放】【模型角色的导入与显示】,【地形的制作与使用】,【场景光照烘培】【角色动画播放】【粒子特效】【UI界面制作】【事件监听与响应】【物理引擎】【角色导航与地图编辑】【声音播放】【网络连接服务器】【资源管理】【Shader开发】【登录与注册】【角色创建】【准备的穿戴】【背包系统】【商城系统】【任务系统】【游戏地图】【游戏刷怪】【攻击与技能】【怪物与AI】【装备管理】【数值对接】【工会系统】【地图副本】等业务逻辑。

2024-07-03 14:08:48 348

原创 DOTS Unity.Physics物理引擎碰撞查询核心分析

给定一个特定的形状,沿着一条直线的起点到终点的方向来做碰撞测试,这个形状撞到空间中的物体就返回碰撞结果。如下图所示,橙色的碰撞器沿着直线的方向与黄色的物体相交,相交的性质与位置在紫色的地方。碰撞查询(Collison Qurey)计算的时候,读取的是物理引擎里面的内部数据,更准确的说是broadphase阶段的内部数据。完成物理迭代的计算后,同步更新最新的物理数据到碰撞查询所需要的数据结构中,这样碰撞查询更精准但是也会消耗更多的性能。ColliderKey: 返回碰撞所在的三角形面的更加详细的内部信息;

2024-07-02 09:53:34 759

原创 DOTS Unity.Physics物理引擎碰撞事件处理

上面提到的Step1,在PhysicsInitializeGroup阶段完成, step2~step5在PhysicsSimulationGroup中完成, PhysicsSimulationGroup完成后物理引擎的一帧的迭代计算完成,最后通过ExportPhysicsWorld的System把把物理引擎的内部数据同步到Entity的PhysicsVelocity, LocalTransform等ECS组件。Step3: 通过编写Job,来遍历当前所有发生的碰撞事件,然后编写每个碰撞事件的处理逻辑;

2024-07-02 09:45:05 831

原创 游戏服务器性能压测实战分析

问题中,总共8个CPU核心,CPU占用率20%左右,要3秒的响应时间,和我们数据分析出来的基本能对上。问题5, 测试服务端请求Redis的情况,彻底排除掉Redis的影响,因为本次的性能测试请求与Redis有关。遇到这类问题,我们首先要做问题分析,在处理问题之前,一定要了解清楚并发时候的服务端技术架构组成,以及相关信息,然后再对问题做出对应的判断与调试。今天的分享就到这里了,问题比较简单,但是分析的思路值得推荐给大家,所以我就写了这个文章,关注我,可以获得更多游戏开发的文章与教程。能否发挥多核的优势。

2024-07-01 09:48:33 786

原创 Unity 如何设计网络框架

写好这些基本数据类型的编码和解码的代码, 然后编写要数据对象的协议,然后开发一个编译器,他可以根据这个协议文件,基于基本数据类型的编码/解码函数,根据协议,结合基本数据类型的编码解码,按照对象的结构,猜分成若干基本数据类型,自动生成编码/解码函数代码。注意好这些点,就可以设计出一个很好的网络框架。当我们要发送数据的时候,CPU调用IO的接口,把数据从内存拷贝到网络底层,等待底层把数据传送过去后,CPU调用的IO函数返回,而这个过程,CPU在等待网络把数据发出去,线程挂起了,这个我们叫做。

2024-06-13 15:03:00 734

原创 Unity 3D定点数物理引擎实战系列

而且其它的形状的物理Entity,除了形状创建会不一样,其它基本一样,所以我们调整一下设计,把PhyBoxEntity与物理形状相关的代码放到PhyBoxEntity里面,与形状无关的物理Entity的基本功能,我们放到PhyBaseEntity里面,然后让具体的形状在扩展的时候继承PhyBaseEntity即可。本节来从新调整设计,让物理的Entity基本操作与物理的形状分离,支持更多的物理形状,支持物理entity与Unity物体位移与旋转同步。3: 编写其它的形状的物理Entity;

2024-06-13 15:01:48 937

原创 实测Unity程序员面向ChatGPT编程是个什么样的体验

以上代码中,首先获取了模型材质和TextMeshPro组件,然后创建了一个512x512的文字纹理,并将TextMeshPro组件中的文字像素值赋值给纹理。我们加上名字空间,还是报错找不到TextureMapping,我们怀疑是不是版本的问题,接下来问ChatGPT, unity 2020 是否有TextureMapping, 如何没有,用什么替代?我们对逐一的情况进行了排查,发现chatgpt列举的情况,都是对的,meshinfo[0]也不为null, 好吧我们换一种问法。

2024-05-06 10:52:56 698

原创 可视化冒泡排序算法

相信大家都知道一些排序算法,比如冒泡排序,快速排序,选择排序等等...就算大家不知道,也应该听过,一般的面试都会问一些算法,简单一点的就是冒泡排序这些,难一些的就是A*寻路算法等...其实大家可能都会觉得这个冒泡排序非常简单,确实是挺简单的,但是对于初学者或者一些萌新们来说,他们只会按照别人说的秘籍:外层循环n - 1 次,里层循环n -1 - i 次,但是真的理解了吗?重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。

2024-04-17 09:53:27 166

原创 雷霆战机游戏的制作

Unity

2024-04-17 09:52:09 415

原创 亮度、饱和度、对比度对后处理的影响

首先说下原理,关于亮度的操作,其实很简单的一个操作就是通过一个参数,让它和采样后的变量进行相乘就可以了,也就是对整个的RBG进行缩放。接着就是对比度的操作了,关于这个对比度我们可以首先定义一个最低的对比度值,然后根据用户设置的变量让对比度再最低和原图之间进行插值运算。Shader不仅可以做一些炫酷的效果,比如技能特效,粒子特效等,除了这些,它也是能对屏幕进行操作的。今天给大家分享一个后处理效果,关于亮度,饱和度,对比度对后处理的影响。我们可以通过对亮度,对比度,饱和度的值进行修改,从而修改最终的渲染效果。

2024-04-17 09:50:15 278

原创 如何实现Moba游戏野怪的AI系统

OK,那么这个野怪的AI到底怎么做的?首先我们需要闭着眼睛想想我们玩游戏的时候,别人的AI咋做的,然后我们就模仿别人的做出来。那么我们都玩过,也知道野怪的”脾气”,你不打它,它就会在自己的一亩三分地里面,不会乱跑。如果你过去打它,那么它也会反击你,直到它丢失视野或者超过了它可移动的最大范围,它就会回去原来的地方待着。既然是中立的野怪,那么它是不属于任何一方的资源,大家是靠本事获取的。那么今天我们就做一个野怪的AI系统,这个系统不是非常的完整的一个野怪系统,因为是抽时间随便做的,但是基本的功能都是有的。

2024-04-15 10:38:34 214

原创 Unity 3D定点数物理引擎实战系列:BEPU物理引擎碰撞计算与碰撞规则的架构与设计

使得物理Entity与周围的物理环境产生碰撞时,如何灵活的控制物理碰撞,本节給大家详细的讲解BEPUphysicsint 物理引擎内部是如何管理与控制碰撞规则的。形状与角度来精确的计算出来是否有真实的碰撞以及详细的碰撞点位置,表面法线信息等。延后决定,一个比较特殊的状态,上面说了有3个地方可以决定碰撞策略,如果某一个地方没有碰撞策略,就返回。两个地方无法决定碰撞策略的时候,物体的碰策略就是由它所在的分组来决定。,碰撞规则是决定了物体与物体之间的碰撞该如何处理与计算。碰撞测试时候的碰撞算法。

2024-04-15 10:33:05 805

原创 Unity架构师经验分享:基于状态机的逻辑控制

状态机是一种用于描述对象在不同状态之间转换的模型。在游戏开发中,一个对象可以处于不同的状态,比如待机、移动、攻击等。状态机通过定义这些状态以及它们之间的转换规则,来管理对象的行为。

2024-02-20 13:53:36 737 1

原创 RTS游戏核心技术 流场寻路算法详解

在上述示例代码中,我们首先生成了一个简单的流场,然后使用A*算法来搜索起点到终点的最优路径。在路径搜索过程中,根据流场中的流速向量调整路径的生成方向,使得路径更加自然和合理。流场寻路技术的优点在于能够处理大规模地图和大量单位的路径规划问题,能够适应动态环境变化,生成的路径更加自然和合理。路径生成:根据流场中的流速向量调整路径生成的方向,使得路径更加自然和合理。流场和路径实时更新:在游戏中,流场和路径需要实时更新以适应动态环境变化。路径优化:对搜索得到的路径进行优化和平滑处理,使得路径更加平滑和自然。

2024-02-19 14:11:00 1374

原创 Unity常用设计模式之工厂模式

以上就是Unity中常用的工厂模式的介绍,包括简单工厂模式、工厂方法模式和抽象工厂模式。在实际开发中,根据具体的需求选择合适的工厂模式来创建对象,可以让我们的代码更加灵活和易于扩展。工厂模式是一种常用的设计模式,它属于创建型模式,用于创建对象的过程中。简单工厂模式是工厂模式的最简单形式,它包含一个工厂类和多个产品类。抽象工厂模式将工厂接口抽象为一个工厂族接口,每个具体的工厂类都对应一个工厂族。工厂方法模式是一种更加灵活的工厂模式,它将工厂类抽象为一个接口,每个具体的产品类都有对应的工厂类。

2024-02-19 11:40:16 838

原创 屏幕后处理之睁眼闭眼特效

OK,不多说,直接上代码了。就是当主角(一般情况主角镜头多嘛)被人重伤过后,但是不会致死,这个时候主角就会昏迷,然后过一段时间就会苏醒,但是由于身体虚弱,他会再昏睡过去,其中有这样的一段镜头,就是主角的眼睛特写,主角会缓慢睁开眼睛看一下周围环境,然后由于体力不支,眼睛再慢慢的闭合,昏睡过去。就是这样的一个效果,我们眼睛看到的范围是一个椭圆的,用椭圆来模拟最适合不过了,然后当眼睛慢慢睁开的时候,周围的一切都从黑暗到明亮,但是由于比较虚弱,所以还是相对于一般情况而言是比较黑一点的。好了,本次的分享就到这里了。

2024-02-17 15:21:28 528

原创 如何制作炫酷的残影效果

首先我们需要有特殊的材质,然后通过网格快照来做出和人物一样的网格出来,然后创建空物体,给空物体添加网格过滤器和网格渲染器,最后再给它特制的材质,并且在适当的时候把残影生成出来就可以了。所以我们需要计算顶点和摄像机的距离,然后计算他们的点乘,最后得出颜色的强度,这样就能体现出X光效果了。之前一直比较喜欢玩DNF,感觉效果很不错,很多技能非常炫酷,玩法也比较丰富,有任务,有PK,有打团等副本。然后我们有了特殊的材质,就只剩下怎么来产生残影了,我记得DNF里面的传承武器好像是只要走动,都是会有残影的吧?

2024-02-17 15:19:52 363

原创 Unity内置寻路算法-导航网格

路算法非常重要,因为绝大部分的游戏都需要用到,比如RPG游戏中的任务系统,任务点击任务后需要自动寻路到目标位置,再比如Moba游戏,我们点击地图,英雄就会自动寻路到点击的地方。这就是寻路算法的作用了。首先我们要用unity的导航网格组件,我们就需要烘焙场景,然后根据烘焙出来的数据,才能进行具体寻路,比如什么地方可以走,什么地方不能走,爬坡的最大高度等等,所以你怎么烘焙你的场景,就会出现怎么样的寻路地图。当你看到你的场景出现浅蓝色的区域时,那么你就成功的烘焙了你的场景了,浅蓝色区域就是可以行走的区域了。

2024-02-01 13:19:22 452

原创 如何制作炫酷的残影效果

首先我们需要有特殊的材质,然后通过网格快照来做出和人物一样的网格出来,然后创建空物体,给空物体添加网格过滤器和网格渲染器,最后再给它特制的材质,并且在适当的时候把残影生成出来就可以了。所以我们需要计算顶点和摄像机的距离,然后计算他们的点乘,最后得出颜色的强度,这样就能体现出X光效果了。之前一直比较喜欢玩DNF,感觉效果很不错,很多技能非常炫酷,玩法也比较丰富,有任务,有PK,有打团等副本。然后我们有了特殊的材质,就只剩下怎么来产生残影了,我记得DNF里面的传承武器好像是只要走动,都是会有残影的吧?

2024-01-23 14:16:27 398

原创 深度应用之景深

大家应该都用过手机或者摄像机拍过照片吧,一般情况下我们用手机拍照的时候画面都是一样清晰的,但是你如果用过单反拍照,你就知道当你拍照的时候,你可以进行聚焦,然后聚焦的地方会非常的清晰,但是没有聚焦的范围是比较模糊的,这也可以突出你要拍摄的是啥东西,那么这个效果就是景深。后处理的操作就是这样的,接下来就是对一定的区域内进行清晰处理,因为刚开始的时候,全屏都是模糊的,现在需要体现景深效果,所以就要让特定的区域清晰,那么怎么做呢?一种是高斯模糊,一种是均值模糊,这里我们用后者来做就行,模糊效果一般,足够了。

2024-01-23 14:15:11 357

原创 深度应用之扫描效果

然后我们通过时间来改变扫描的长度,这样的话,效果就能实现了。最后就是如何扫描,那么这就需要对比当前像素的的深度,让当前像素点的深度和扫描仪此时深度进行对比。深度的应用非常的重要,比如景深效果,扫描效果,还有防护罩效果,都有用到它。首先,既然用到了深度,那么很明显我们就需要得到深度相关的信息了。如图所示,绿色的就是扫描的效果,我们通过按键,然后让扫描仪开始扫描。这样就拿到了,然后我们就能使用它了,我们要得到某个像素的深度值的话,就需要使用宏。然后由于深度值不是线性的,我们要让它变成线性的,就需要用。

2024-01-23 14:13:44 380

原创 游戏当中的声音系统

这里我不多说,比如今天我们做的是赛车游戏,大家都应该知道赛车的话,随着车的档位车速的不同,它发动机发出的声音也是不一样的。然后我们就通过速度的变化,给用上不同的音频片段,切换的时候就是音色上场的时候了,正常音色是0.5的值,越大声音越尖锐,然后我们就让它插值变大到最大就切换音频片段,这样就可以了。就比如LOL,如果你对面玩的塞恩,大家都知道它把,改版后是可以大范围开车的,如果你不带耳机,你就听不到塞恩开车的声音,那么很可能上一秒你在美滋滋的补兵,下一秒你就别人杀了。所以,游戏的声音系统是非常重要的。

2024-01-22 17:11:44 398

原创 小地图的制作方法

在游戏当中,小地图的用处那可是相当大的。比如LOL中,我们可以通过小地图来观察敌人的动向,让我们能在敌人的抓捕中化险为夷。Jiance这个函数专门来计算比例,然后显示就是上面的那两个方法,也不是很难。不想LOL的可以点击的地图。但是正常的效果是有的。第二种方法就是需要写脚本了,原理很简单:根据世界坐标下玩家与怪物之间的距离来动态的生成和显示图标即可。这个方法没什么好说的,unityUGUI中的RawImage非常适合做小地图。当然,只是功能简单的小地图。图中可以看出,小地图的基本功能已经有了。

2024-01-22 17:10:27 379

原创 实现像素风格Shader

其实像素Shader的原理很简单,我们就是通过对纹理UV坐标的值进行操作,然后让它丢失精度。同样的,它不就可以适用于做像素效果,像屏幕后处理效果比如马赛克这种,都可以用这个方法来做的。通过滑动条进行操作,修改shader中的像素值,然后应用起来,这样就能方便用户随意操作了。像素风格的游戏在没有智能机的时代还是非常受欢迎的,因为那时候也没啥高质量的游戏了。即使现在也是有这类游戏的,只不过效果比之前要好很多了,但是感觉没有像素的那个味道了。它的贴图本来不是这样的,是用了像素Shader过后的效果。

2024-01-22 17:02:22 371

原创 DOTS Instancing合批:如何针对单个渲染实体修改材质参数

比如位置数据,每次渲染一个实体的时候传递一次。每个物体在渲染的时候,引擎都会把材质中的参数数据传递给渲染管线,然后渲染管线把参数数据进一步的传递给渲染物体的Shader,这样当我们修改材质对象里面的参数后,渲染使用该材质对象的物体时,由于参数都是从材质对象里面获取,所以得到的现象就是修改材质一个的参数,使用该材质的所有的物体都会受到影响。加上以后,每次修改Entity组件里面的数据时,在渲染entity之前,会把对应的数据传递给渲染管线中的uniform变量,而不是去改变材质对象里面的参数数据。

2024-01-17 17:00:05 453

原创 DOTS Unity.Physics物理引擎碰撞事件处理

上面提到的Step1,在PhysicsInitializeGroup阶段完成, step2~step5在PhysicsSimulationGroup中完成, PhysicsSimulationGroup完成后物理引擎的一帧的迭代计算完成,最后通过ExportPhysicsWorld的System把把物理引擎的内部数据同步到Entity的PhysicsVelocity, LocalTransform等ECS组件。Step3: 通过编写Job,来遍历当前所有发生的碰撞事件,然后编写每个碰撞事件的处理逻辑;

2024-01-10 16:51:10 1166

原创 DOTS Unity.Physics物理引擎碰撞事件处理

上面提到的Step1,在PhysicsInitializeGroup阶段完成, step2~step5在PhysicsSimulationGroup中完成, PhysicsSimulationGroup完成后物理引擎的一帧的迭代计算完成,最后通过ExportPhysicsWorld的System把把物理引擎的内部数据同步到Entity的PhysicsVelocity, LocalTransform等ECS组件。Step3: 通过编写Job,来遍历当前所有发生的碰撞事件,然后编写每个碰撞事件的处理逻辑;

2023-12-22 14:32:42 502

原创 Unity DOTS《群体战斗弹幕游戏》核心技术分析之3D角色动画

在DOTS 的baker过程种,不支持常见的动画组件,包括: Animation组件,基于状态机的Animator, 以及人形动画。按照以上的需求,我们在群体战斗的游戏中选择《3D帧动画》模式来做大规模的角色动画。这个方式有几个好处,动画预先被计算生成到纹理里面,这样代替原来的动画采样计算,空间换时间节省了性能,同时面数少,动画简单,这样动画纹理的内存占用可以接受。渲染质量要求不高,这样我们的战斗单元的模型的面数可以尽量的低,这样顶点数不会特别多,同时动画也不会很复杂,帧数也可以比较少。

2023-12-19 14:03:02 1304

原创 Cocos Creator 3.0基于PBR的物理渲染详解

常用的技术就是法线贴图,美术会建一个高精度模型,原来的一个三角面内,在高模下有更多的三角形面,就有更多的顶点的法线,把这些法线数据存到纹理贴图里面,这样低模下三角面的每个点来获取法线的时候,就不用通过插值,而是从高模的法线贴图里面获得法线数据,这样可获得更好的光照细节。一种是反射度与光泽度。什么是环境遮挡,举个例子就明白了,如下图有一个陶瓷瓶,我们从瓶口看下去,由于瓶口小,会遮挡底部的部分反光,我们从上往下看,看底部应该有点看不到底的感觉才更真实(左右图的瓶底对比, 右边看不到底部,比左边更真实)。

2023-11-24 14:39:26 102

原创 3步教你学会creator 物理引擎

contact: 获取碰撞信息对象, self发生碰撞的自己的碰撞器组件实例 , other发生碰撞的别人的碰撞器组件实例,通过碰撞器组件实例,可以获得节点,碰撞的节点 other.node等。注意,一定要把代码写入onLoad函数里面,开启物理引擎,配置调试区域,设置物体重力, 不能在start里面;// 重力加速度是一个向量, 有方向的,2D, Vec重力加速度的大小;gravity: cc.p(0, -320), // 系统默认的。is_debug: false, // 是否显示调试信息;

2023-11-24 14:35:02 78

原创 Cocos Creator如何优化包体大小

业务逻辑代码: 一般我们也没法修改,你的业务逻辑差不多,但是,要注意一个 95%以上的同学,都会忽略的一个事实: setting.js, setting.js 的大小,是由谁决定的?图片的压缩格式: 背景,jpg 体积要小于png, 背景图片jpg, 很多图片格式,导出美术图后,这些图,任然可以压缩。非常简单,你只要把不要的模块去掉就可以了,你要知道哪些模块是占体积多的,比如物理引擎,能不用的模块,就不用。图片的像素格式: 这个也式可以的,argb4444 非常少的,除非, 你不是彩色的。

2023-11-24 09:53:57 144

原创 彻底搞懂Cocos Creator Tween

打开cocos引擎源码actions/tween.js, 你会发现Tween其实是基于Cocos 的Action系统来实现的, Tween容器对象里面放的是一个一个的TweenAction, 这样Tween实际上是Action系统来实现的。Cocos Creator 里面的Tween你可以理解为是一个容器对象, 在这个容器对象里面可以存放很多的”执行过程”,当执行这个Tween的时候,会一个一个过程的触发执行。(3): 执行Tween对象,引擎会一个一个的执行之前添加进来的过程。

2023-11-24 09:53:01 286

原创 创建项目与显示第一个物体

场景创建完成以后,我们创建一个3D物体到游戏场景中,游戏引擎内置了一些标准的几何体,比如立方体(Cube), 球体(Sphere)等,所以我们先创建几何体放场景中显示出来,我们来创建一个Cube吧,在场景编辑器中,鼠标右键”创建/3D对象/Cube立方体”,场景中会创建一个Cube的节点出来,ctrl + s保存以下当前的场景改变,双击以下当前的的”Cube”节点,这样编辑器中央就会对准 刚才创建出来的Cube物体,如下图所示。,这样你编辑的是哪个场景,预览运行的就是哪个场景。

2023-11-23 15:45:33 33

原创 Cocos Creator 3.x 如何动态修改3D物体的透明度

答案是不需要,因为CocosCreator 3.x的标准Shader里面提供了一个mainColor的颜色属性,默认是白色,如果你修改mainColor的透明度,传入到shader后,frag片元着色器会叠加mainColor的颜色值,这样我们要修改物体的透明度,可以通过修改mainColor来实现。很多同学想3D物体上也有一个这样的组件来动态的控制与修改3D物体的透明度。我们大家都知道,当我们给一个材质改变参数的时候,所有使用改材质的物体的参数全部都改变了,有时候我们有1。这里有个很重要的数据成员。

2023-11-23 15:41:42 189

原创 Cocos Creator 常见错误排查方法

的打印代码,但是由于他们是不同组件实例,所以导致数据不同,一个组件实例的数据是正常的,一个是异常的,我们只要找出异常数据的组件实例就可以了,如何找呢?的函数的名字,表示的是这个函数的功能与作用,每个参数的名字,表示的是传入的数据类型等,返回值说明能告诉你这个函数的返回值,通过多阅读A。里面详细的说明了,每次我们学习的时候,对着这些参数与说明看一遍,加深一下基础知识的理解。每个组件的时候,要对着它对应的接口文档,去看去学习,把大部分的接口在脑袋里面都过一遍,对应的接口,我们选中对应的类型,鼠标。

2023-11-23 13:00:42 144

原创 深入浅出 Creator 引擎屏幕适配底层原理

所以在做UI设计的时候,UI图片的设计大小都基于我们的固定的那个维度与大小,如上面宽度固定960, 高度上UI设计时用哪个为参考呢?一个UI布局有两个维度,宽度与高度,各种手机的屏幕的宽度与高度都不一样,可想而知,如果我们做适配的时候,要考虑两个维度的不同来放置物体,这样我们用户处理起来会比较麻烦,所以Cocos Creator的策略就是调整所有的屏幕的分辨率到一种”中间状态”(逻辑分辨率),使得所有的不同分辨率的手机屏幕,在一个维度上是一样的。今天的分享就到这里了,希望大家对这几个参数有深刻的了解。

2023-11-23 12:32:09 81

原创 Unity DOTS系列之System中如何使用SystemAPI.Query迭代数据

当我们要遍历一个World里面的entity数据的时候,我们需要根据数据类型来筛选出对应的组件与Entity。>(),其中t1, t2就是我们需要的component data的类型,查询的时候,会遍历World 里面有这些组件的Entity,获取组件的引用。当我们在System代码里面调用foreach+SystemAPI.Query的时候,我们的自动代码生成器会根据Query调用的时候传递的参数的类型来生成EntityQuery字段到当前的System类里面(正因如此,我们在定义一个S。

2023-11-10 10:27:30 78

原创 Unity DOTS系列之托管/非托管Component的区别与性能分析

它与所在Entity的其它Unmanaged Component基于ArchType排列在一起,这样可以获得很好的性能,因此Unmanaged Component在ECS开发中是最常用的一种组件数据类型。Managed Component的数据不直接存放在Chunk中,World会有一个很大的”数组”,专门来存放Managed Component,而我们Entity的基于ArchType的Component数据块中存放的是Managed Component的在数组中的偏移地址。

2023-11-09 15:08:03 155 1

原创 Unity DOTS系列之Struct Change核心机制分析

Struct Change开销,除了要重新从chunk里面分配内存块,复制数据以外,还有同步点的开销,同步点你可以理解为一个锁,当发生了Strcut Change的时候,为了保证正确性,系统会生成一个同步点,这样其它的要使用这个数据的线程都会被挂起,直到Struct Change操作完成。当删除一个entity的时候,先找到内存块所在的chunk,找到内存块在chunk中的偏移位置,把最后一个entity的component数据复制到刚才释放的内存块中,把最后的那个内存块释放出来,供一下分配。

2023-11-09 15:06:42 53

原创 Cocos Creator 3.x 如何动态修改3D物体的透明度?

答案是不需要,因为CocosCreator 3.x的标准Shader里面提供了一个mainColor的颜色属性,默认是白色,如果你修改mainColor的透明度,传入到shader后,frag片元着色器会叠加mainColor的颜色值,这样我们要修改物体的透明度,可以通过修改mainColor来实现。很多同学想3D物体上也有一个这样的组件来动态的控制与修改3D物体的透明度。我们大家都知道,当我们给一个材质改变参数的时候,所有使用改材质的物体的参数全部都改变了,有时候我们有1。值并同步到材质里面,编写g。

2023-11-07 16:08:09 118

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除