- 博客(41)
- 收藏
- 关注
原创 移动游戏性能优化通用技法
纹理部分:控制在2的N次方,方便真机压缩(android的ETC,ios的ASTC)。对于游戏性不是那么敏感的游戏,可以高端机可以使用高帧率,低端机不让其使用高帧率。高效使用字节:如一个Int为32位,可以让其前8位代表人物状态,次8位代表人物血量,中8位代表人物攻击力,末8位为人物防御力等。算法优化:比如使用快速排序代替冒泡排序,使用JPS寻路代替A*寻路,简单的战斗碰撞使用AABB进行模拟。使用功能包或者CDN下载:把必要的资源放到包内,其他玩法上的功能或者资源可以在游戏运行时,边玩边下载。
2025-07-18 10:34:23
1195
原创 深入GPU硬件架构及运行机制
GPU 处理if elseSIMT 架构要求线程束内线程同步执行相同指令,而分支语句导致线程束分歧,迫使分支代码序列化执行,导致其组内大量线程被闲置,算力利用率大幅降低。
2025-07-17 11:49:16
1826
原创 UnityDots学习(五)
游戏不必100%使用Dots完全实现。因为面向组件开发一个功能复杂度和调试都比面向对象要更难。对于某些模块,比如UI,事件管理系统,网络等,使用传统对象模式来实现更有效率。只有核心逻辑需要大量单位同屏运行或者很复杂的算法模型可采用Dots进行。比如RTS同时10000个单位同时移动。Unity对于托管和非托管的System有二种类型,托管是SystemBase非托管是ISystem。那问题来了,除了如下图这种简单的类型外。我其他的什么都没法用了吗?测试使用其他的值类型数据定义。
2025-05-09 17:52:42
624
原创 UnityDots学习(四)
然后每个System会根据实体添加的Component运行不同的System逻辑。EntityCommandBuffer:是每个实体管理的控制器,类似GameObjectManager。该案例是把System里执行的逻辑换成Job,这样程序的运行可以利用多核在不用非在主线程里运行。这样会提升CPU的使用率。在使用时直接查询就可以正确去找到对应拥有Component组件的实体进行遍历。RW是即可读又可写,RO是只可读,在system里不可改变其属性。这个Job实现的Schedule可以实现在代码里顺序执行。
2025-04-22 14:22:48
1484
原创 UnityDots学习(三)
1000个搜索者会对1000被搜索的目标进行遍历查找到哪个目标离他最近,并且画出连线。2.这点提升最多,数据的获取是从3级缓存里提取非堆内存提取。因为数据是连续非离散的,这提高了访问效率。1.Update从原来的每个Seeker里调用改成到只在Spawner里调。次数从1000次变为1次。1000个是搜索,1000是被搜索的目标。此段代码没有介入Dots任何优化,在我的电脑里跑帧率每秒4.3帧。既然这个能单线程跑,那么一定也能多线程跑起来从而进一步提升效率。并且在Profiler能看到该job的运行情况。
2025-01-12 14:14:06
759
原创 URP学习四
第三个pass就把相机的颜色贴图和第二个pass得到的纹理进行Lerp得到的结果输出到相机颜色贴图中。缓存这一帧的颜色,给下面的DrawOldFrame在下一帧使用。只有个飞机却有很多太空场景。因为设置了其他pass来渲染背景。最后加个featrue把飞机渲染出来。最后贴个官方教程加feature链接。四.OcclusionEffect。第一个Pass把颜色图进行输出。三.Glitch Effect。运行时,渲染材质整体进行了替换。第二个Pass:创建了个纹理。加了个扰动,把纹理进行输出。
2024-10-19 22:06:25
583
原创 基于HybridCLR做的一个FlyBird Demo
周末学习了下HybridCLR的原理和用法做了个FlyBrid小demo。记录一下官网里写的原理:对于这个我的理解是:Unity引擎的代码使用还是AOT方式。对于项目业务这块打成多个程序集。运行时使用了解释器,解释执行。从而完成热更新。
2024-09-02 21:42:12
1004
原创 Unity Dots学习 (一)
先学习怎么使用,再研究底层代码。Dots大家都有所耳闻。一直没时间研究,最近研究一下。看上图可知,哪怕是CPU的第三级缓存也比内存要快2-5倍。
2024-08-18 21:59:50
608
原创 Unity热更新扫盲篇
当项目上线后发现有代码级别的bug或者新的功能模块上线,可以通过某些手段,在玩家某些时机(一般登录之前),更新某些文件把这个bug改了或者新功能上线。这个过程是热更新。对于玩家而言,他只需等待很小的时间去下载热更新包就可以体验最新效果,无需重新游戏,这个体验就比较好。反之有可能导致用户流失。
2024-03-14 22:00:34
1699
原创 浅谈游戏开发常用的设计模式
游戏开发中经常出现一些业务变更。如果是一个好的框架,重构起来很容易,如果是一个不好维护的框架,那基本上就要炸了,且为了完成这个功能会写很多“屎山”代码。为了避免这种情况频繁发生,就需要框架制定者有很好的设计模式基础。说通俗点,就是多套几层了,或者多抽象几个类出来等。现把个人在工作以及业务自己做的小型游戏中一些常用的设计模式贴出来,浅谈一下。
2024-03-03 18:29:06
2807
原创 点乘叉乘基础推导
注意一点是 cos(-a)=cos(a)。所以点乘的前后顺序不影响cos值。但实际游戏使用其判断夹角时要注意,只能0-180度。181-360 判断不出来,得配合叉乘算二个向量的顺逆时针方向。大家都知道 二个向量 a和b 二者相乘是 |a|x|b|x cosθ。叉乘是 |a| x |b| x sinθ。但为什么结果是这样的呢?简单贴一下推导过程,方便查阅。根据cos(a-b)=cos(a)cos(b)+sin(a)sin(b);再算叉乘:(图不画了用上面的图)
2024-01-28 21:46:03
1640
原创 2024年展望
当初进来也是觉得既然每个月流水还不错,应该平时工作压力啊,福利啥的也都挺不错的。因为框架已经定型,能接触的都是需求,一般需求也就那样,纯堆逻辑。当然还是有一些的,比如我在这个项目里偶尔也会写一些服务器的业务,C++开发的 ^_^。Unity,2023年的骚操作,也让我对这个引擎的未来产生了一定的顾虑。2024年写点新东西吧(大概率也是慢更),也顺便把之前已经过的比较花时间的技术也贴一下。csdn是个好东西,自己费好大劲研究的技术代码啥的,这里一贴,可能帮助了他人,但更多的是自己回忆某个点时会很快。
2024-01-24 12:55:20
499
原创 UGUI 空Button实现
项目中想对UGUI触发事件拦截可使用空Button,这样减少overdraw。很多文章都记录了,这里就自己记录一下,方便查阅using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;public class EmptyButton : MaskableGraphic{ protected override void OnPopulateMesh(Vert
2022-02-21 21:48:14
216
原创 UGUI技巧学习之自定义形状
众所周知,UGUI的图片是用Image进行显示的,他在项目中大多数满足基本需求。但如果我想做类似:这样形状的显示或者这样的显示UGUI目前不支持。传统做法是让美术出个遮罩,然后遮罩Mask下再挂这些图片。不是不可以,但这增加了。1.美术需要做个遮罩,这个到可以忽略2.游戏多了2个DrawCall一个是加遮罩的,一个是还原的。如果游戏想做到更好的优化,这个不可取。所以研究下UGUI的Image源码。Image的OnPopulateMesh方法代表着这个Image的mesh应
2022-02-21 21:34:29
2676
原创 Asset的小知识点
1.波浪线当文件夹的结尾是~。他在工程里会不进行显示。2.DisableWriteTypeTree 的使用Unity为了能让新版本可以兼容老版本的Assetbundle,会打包的时候做完整的设置。比如上一个版本记录了很多数据到新版本并没有使用。。当新版本打包的时候默认还是会把这些数据写进来,让老版本也可以使用。所以bundle打出来会稍微大一些是用一个很简单的Cube进行打包,用第一种生成的Bundle是39KB。使用第二种是26KB。他们在运行时内存占用也是很明显的差别。.
2022-02-19 20:42:37
3204
原创 U3D记腾讯面试经历
首先大厂的面试都是很漫长的,腾讯也不例外。腾讯正常面试是技术3轮,hr 1轮。我这边是4次技术面试,hr 1轮。。最终通知面试已通过。。但因北京没有U3D岗位,只能去深圳的原因,需要跟老婆分开,机会是挺好,但只好放弃了。今年打算把虚幻搞起来,来年在试试腾讯。。加油!第一轮:面试官素质很高,让我对大厂有更好的印象。首先是自我介绍,然后说了点过往经历,因为他们是虚幻开发所以问了些C++的知识。。之前是一点没用过。但面试官看我经历觉得就这么挂了太可惜了然后就说推荐给Unity项目组了。第二轮:同样
2022-01-25 20:22:46
4271
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅