- 博客(80)
- 收藏
- 关注
原创 游戏开放式新手引导框架设计
模块设计:1.新手引导的触发方式应该是挂在logic外的 不应该和代码混在一起 (可以用观察者模式 事件来触发)2.引导有很多不同的表现和行为(不同的object),并且需要处理好每个引导的生命周期(需要有一个引导行为的接口 实现初始化和清空这两个必要的接口)。3.满足引导触发条件后,先加入引导列表判断优先级后决定是否展示4.引导触发后的逻辑大概有:行为对象初始化,当前行为引导是否满足条件能触发,触发后的表现,表现完后的清空 ,执行下一个行为,引导结束。还有各种引导行为跳转、回退、插入,这么多的
2024-08-16 14:25:30 334
原创 unity草体渲染方案 GPU Instaning
有一天看项目里的FrameDebug发现在森林系的场景里草体的drawcall差不多有100多主要是因为灯光贴图,位置等不一样导致的打断合批,导致一个批次只能渲染10个左右的草体之前有了解过unity有接口(Graphics.DrawMeshInstanced)可以把一样的网格,不同的变换一次性绘制出来,这个比较合适草体这种很多相同网格的渲染如果一次性渲染500个草体 那不是就几个drawcall就能搞定,相差几十倍的drawcall还是很有必要处理一下。
2024-08-06 16:27:00 590
原创 Unity Shader unity文档学习笔记(十八):unity雾效原理
看很多文章用近平面远平面组成矩阵后转到裁剪空间下通过Z值来解,实际更简单的方式可以直接通过判断距离来实现。Test_Fog.cginc 库。FogMgr控制远近面。
2024-07-31 10:36:20 351
原创 unity美术资源优化(资源冗余,主界面图集过多)
主界面UI也就几个界面,但通过unity的Memory Profiler去看内存的时候 却发现了30个左右的图集,原因是因为拼接资源的时候没注意导致一个界面依赖了好几个图集,简单解决就是把主界面和其他界面一起用到的图片放到公用图集里去,然后就调整对应的图集,代码,界面。如果纹理的alpha通道全部为0,或者全部为255,可以认为其中不包含有效信息,此时应禁用’Alpha源’标志,否则会浪费这部分的内存。开启纹理资源的读/写标志会导致双倍的内存占用。问题2,3 ,4 方案:定期检查。1.检查纹理读/写标记。
2024-07-25 20:21:27 651 1
原创 unity渲染人物模型透明度问题
问题1:有独立的手和衣服的模型,但最终只渲染出来半透明衣服问题2:透明度贴图是正确的但显示却不正确这上面两个模型的问题都是因为人物模型是一个完整的,为啥有些地方可以正常显示,有些地方透明度却有问题。其中最重要的就是渲染顺序的规则(按照顶点下标的大小来渲染的),打开3dmax可以看到其中透明物体的下标在前面,不透明的在后面问题1和2都是因为这个问题导致的渲染效果不正确,调整完渲染顺序就好了。
2024-07-18 16:40:33 501
原创 读书笔记:改善既有代码的设计
差不多两年都没写过博客了,好学的习惯差不多都落下了,两年里几乎也把学到的很多东西都应用了,但不学习好像就有点停步不前的感觉了,以后给自己定个目标每周写一遍博客。写博客好处:一是加深自己的印象(能够写出来的东西比光光自己理解的东西要理解的深的多),二是督促自己学习,三是也是希望让其他人对我有个认识知道我会什么,四是也是希望自己的分享能够帮助到一些人,两年前因为自己的编码习惯和一些沟通相关的事情不是很好被广州一家大厂的引擎组嫌弃,于是就不断看等等。
2024-07-18 14:23:16 555
原创 unity 曲线可视化图表制作(lineRenderer + 贝塞尔曲线)
unity 曲线可视化图表制作(lineRenderer + 贝塞尔曲线)
2022-11-09 10:48:30 3477
原创 unity 代码热更+资源管理框架总结
一.对于代码热更有两个方案1.用其他语言做热更,需要可以在C#这边创建一个lua虚拟机,于是就要和C#能够和Lua交互,C#执行lua虚拟机执行启动代码 所有逻辑用lua写 打包lua文件进行代码热更相关C#和lua交互的框架:1.xlua 腾讯开源框架 目前算是大家用的最多的框架,商业项目也算是用的比较多2.tolua,slua这些比较老的框架,算不上很了解2.C#用反射模式执行启动代码,C#打dll ,但IOS没有内存访问权限,用不了反射模式,于是有了一些绕过IOS这个机制,做反射的框架相关
2022-04-26 19:10:37 5497
原创 Unity Shader unity文档学习笔记(十九):网格 在Maya的Mel脚本新增顶点信息实现一些特殊shader效果
可以实现模型从下往上消融死亡溶解而不是用噪声图来实现顶点草(和其他植被合批的草地,不用UV来实现)的摇摆效果顶点动画
2022-02-09 15:22:17 1567
原创 unity 渲染相关优化
看一下unity几个比较重要的点 drawcall,Batches,SetPass1.Drawcall:大多数情况可能性能消耗不是drawcall的原因 而是修改材质属性DrawCall 只是 Unity 需要推送到 GPU 命令缓冲区的少量字节2.,Batches合批 优化Drawcall1.静态批处理(优化GPU 增加内存 包体)用法:标记为 Batching Static 使用相同材质球算法:打包的时候会合成为一个mesh优化:setpasscall的数量缺点:打包后体积增加 运行时.
2021-11-22 21:55:16 2933
原创 unity 自定义管线SRP 学习笔记(一)搞懂WHY WHAT HOW
资源都是免费的 哈哈 白嫖党必备门槛:渲染管线 简单点就看unity官方的介绍光栅化 GAME101 前6节课SRP 能用来干嘛(WHY) 到底是什么(WHAT) ?可编程渲染管线 (Scriptable Render Pipeline)简称SRP,是一种在Unity中通过C#脚本配置和执行渲染的方式。通用渲染管线 (URP)和高清渲染管线 (HDRP)都是基于SRP衍生出来的。SRP允许你根据目标平台定制渲染流程,可以优化特定硬件的性能,目前已经有很多知名游戏公司的Unity新项目使用了SRP或U
2021-11-02 16:58:32 2852
原创 lua实现面向对象深度解析
先了解一下原表 __index __newindex__index步骤1.在表中查找,如果找到,返回该元素,找不到则继续步骤2步骤2.判断该表是否有元表,如果没有元表,返回nil,有元表则继续步骤3步骤3.判断元表有没有__index方法,如果__index方法为nil,则返回nil;如果__index方法是一个表,则重复步骤1、2、3;如果__index方法是一个函数,则调用该函数,并返回该函数的返回值__newindex 可以等于一个表 也可以等于一个函数__newindex只会在添加原表
2021-08-02 11:47:00 389
原创 Unity Shader unity文档学习笔记(十七):径向模糊 实现类似冲锋时的速度感
实现思路:离中心点越远的像素 模糊效果越明显 UV偏移的量越大shader// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "3D/ScreenEdgeBlur" {//------------------
2021-07-26 20:11:36 753 3
原创 Unity Shader unity文档学习笔记(十六):模板测试StencilTest UGUI Mask遮罩实现
UGUI的Mask也是通过Stencil实现的Stencil的所有参数如下Stencil{ Ref 1//Reference Value ReadMask 255 WriteMask 255 Comp Always //Comparison Function Pass Replace Fail Keep ZFail Replace}Ref 就是参考值,当参数允许赋值时,会把参考值赋给当前像素ReadMask 对当前参考值和已有值进行ma
2021-06-24 19:59:16 690 3
原创 Unity Shader unity文档学习笔记(十五):纹理映射
每个顶点都存储着 齐次坐标(位置),法线,UV坐标那给一个模型一张贴图它是怎么对应UV坐标的关系的呢简而言之就是对每个光栅化的屏幕坐标算出它的uv坐标(利用三角形顶点重心坐标插值),再利用这个uv坐标去查询texture上的颜色正常的图片纹理映射的两个问题:过大或者过小纹理过小:也能想象到 就是周围几个像素都是对应某个UV坐标这样看起来 肯定是像素一块一块的 不好看可以使用双线性插值(Bilinear Interpolation):简单点理解就是 某个点的颜色不是由纹理映射的颜色决定的
2021-06-24 09:44:21 451
原创 Unity Shader unity文档学习笔记(十四):剔除 深度测试 透明度测试 透明度混合
写了这么久的shader发现自己还不会用这些标签Cull FrontZWrite OffBlend SrcAlpha OneMinusSrcAlpha然后 又有东西可以学了 内卷王 哈哈Cull 如果需要旋转还是关一下 默认是开启的背面剔除剔除如果是不需要背面的话可以不管 就是摄像机看不到的那一面 会被剔除掉ZWrite 深度写入 默认也是开启的但做透明度的时候就需要关闭一下 不然做深度测试的时候发现 这个像素在前面一点 然后就覆盖了这样的话就看不到 透明物体后面的东西了然后讲一下透明度
2021-06-18 20:47:40 480 3
原创 Unity Shader unity文档学习笔记(十三):怎么用shader修改unity自带的胶囊体 改成一个花瓶的形状
一年前遇到的面试题 怎么用shader修改unity自带的胶囊体 改成一个花瓶的形状思路:干预顶点写一个花瓶的曲线模型函数把Y轴放入函数中 乘以XZsin函数类似效果Shader "Unlit/VertexTest"{ SubShader { Pass { Tags { "LightMode"="ForwardBase" } CGPROGRAM #pragma vertex v
2021-06-11 15:08:54 301 2
原创 为什么说 游戏开发使用lua 必须要了解闭包
网上搜了一下 大家的理解是:1.在外部无法获取到func内部的局部变量,但是func内部的func1局部方法却可以获取到,因此返回一个func内部的局部变量的引用 ,这样在外部通过这个返回值就可以获取到func的内部变量。2.虽然是绕了一个圈子,但是在方法外部却通过这样一个手段获取到了内部的值。而这个方法内的局部方法func1就叫做闭包,按照很多书上的概念,这个方法搭建了方法内部与方法外部的桥梁,使得在外部也可以任意的获取到方法内部的资源。3.重点!!!!: 但是闭包会造成变量在内存中持久占用,因此会
2021-03-15 09:48:32 280
原创 lua和C#交互原理 刨根问底
热更新原理:就是C#可以和lua进行交互lua可以重写C#的函数lua和C#是怎么进行交互的?lua与其他语言交互,都是通过操作虚拟栈交流的。而操作虚拟栈最原始的方法就是通过lua与c语言的api那其它语言是怎么访问到这个虚拟栈 怎么能确保访问到的是同一个栈?可以为 一个lua文件单独开一个虚拟栈 不管你C#和Lua怎么交互交互的对象首先是一个文件 文件肯定是单独的lua调用C#:lua_pushstdcallcfunction(L, SayHello),将c#的方法SayHel..
2021-01-22 20:24:20 1453
原创 渲染管线 修改unity渲染管线修改的是什么东西 游戏引擎到底做了什么渲染工作
看过很多渲染管线的介绍 感觉都不怎么理解我做个归纳吧给新手看的渲染流程 可分为3大部分一。应用阶段:输出渲染图元 CPU1.把数据加载到显存中2.设置渲染状态:使用哪个着色器,材质等等3.调用draw call 发送需要被渲染的图元列表 但不会包括任何渲染状态二。几何阶段:输出屏幕空间的顶点信息 GPU顶点数据 -》顶点着色器 -》曲面细分着色器 -》几何着色器 -》裁剪 -》屏幕映射三。光栅化阶段:使用上个阶段传递的数据来产生屏幕上的像素 并最终渲染出图像 GPU三角形设置 -》 三角
2021-01-13 20:09:05 505
原创 Dotween动画使用加入状态机 实现各种动画的切换
最近项目中有一个比较麻烦的需求各种界面都需要用到动画 界面这里延迟一下哪里延迟一下 于是逻辑乱的很写出来后一堆bug主要麻烦的是动画播放的时间不好管理于是主程给了我一个好的思路 用状态机播放动画时就进入一个状态 状态结束切换状态于是逻辑一下就清晰了...
2021-01-06 12:04:38 472
原创 unity开发bug大全(五) 记录UGUI组件Slider的一些坑
一遍来讲 slider我们都会把Interactable取消掉 不然进度条可以拖拽如果是取消掉的话slider节点下面不能放按钮之类的不然射线会被slider组件拦截 导致按钮失常也是找了半天的bug
2020-12-16 19:20:54 1475
原创 unity图片资源规划
美术资源:可能会有很多界面的UI是相同的如果每个界面的美术资源都单独打AB包 相同的资源就多占用了一块内存所以需要做成公用的图集:打图集放:Atlas打图集公用模块分类:动态加载(DynamicLoad常驻内存)和拖拽上去的(Common)单独的模块:自己定义名字 动态加载和拖拽上去的(不常驻内存 切换场景卸载)不打图集(图片太大或者总是会增加的图片)放:Image分类:打AB包,不打AB包打AB包:脱离依赖 同时存在多个图片的时候不会打包多个资源 单独打包出来不打AB包:有依赖 同时
2020-12-15 10:56:21 211
原创 如何通过txt文本查看unity资源
原生的模式是Mixed(混淆) 可以设置为Force Text然后就可以查看prefab 等等unity的资源了 里面有记录资源的所有信息
2020-10-29 10:32:11 230
原创 Unity Shader unity文档学习笔记(十二):shader实现 无限滚动背景
需要滚动的背景图片!!!! 需要设置图片的WrapMode为Repeatshader 比较简单 就是UV坐标做一个偏移 偏移的值保持在1以内就好了Shader "Unlit/UIScrollingBackground"{ Properties { _MainTex ("BaseTexture(RGB)", 2D) = "white" {} _ScrollXBaseSpeed ("BaseSpeed", Float) = 1.0 } S.
2020-10-24 11:12:06 400
原创 Unity Shader unity文档学习笔记(十一):战争迷雾核心算法
核心算法 非常简单 主要就是把一个点的世界坐标转换到贴图的UV坐标给整个场景一个大的plane 加上写的shader摄像机位置调成plane的正上方Shader "Unlit/FogRender"{ Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Tags{ "Queue" = "Transparent+151" "IgnoreProjector" = "True" "RenderType" =
2020-09-30 16:11:16 1197
原创 Unity Shader unity文档学习笔记(十):死亡溶解效果
我们要做的就是让这个溶解的对象一部分消失,另一部分存在,所以,这个时候我们就需要一个Mask图进行控制,我们采样这张Mask图,就可以得到这个像素点当前的Mask值,然后用这个Mask值与我们设定的一个阈值来进行比较,小于阈值的部分discard,大于的部分正常计算。最终,我们将这个阈值从0逐渐增加到1,就可以实现模型的一部分像素先消失,直至整个模型完全消失的效果。mask越细腻 效果就越细腻代码如下Shader "Unlit/DissolveEffect"{ Properties { _
2020-09-19 14:59:02 267
原创 Unity Shader unity文档学习笔记(九):热空气扭曲效果
简单实现 不考虑性能Shader "ApcShader/Distort" { Properties { _DistortStrength("DistortStrength", Range(0,1)) = 0.2 _DistortTimeFactor("DistortTimeFactor", Range(0,1)) = 1 _NoiseTex("NoiseTexture", 2D) = "white" {} } SubShader { ZWrite Off Cull Off
2020-09-18 11:23:18 491
原创 Unity Shader unity文档学习笔记(八):边缘光(RimLight)效果
忘记dot的意思可以点这个 Shader "Unlit/outLine"{ //属性 Properties{ _RimColor("RimColor", Color) = (1,1,1,1) _RimPower("RimPower", Range(1.0, 5.0)) = 1 } //子着色器 SubShader { Pass { //定义Tags Tags{ "RenderType" = "Opaque" } CGPROGRAM //引
2020-09-17 17:42:40 370
原创 UGUI-图文混排 聊天中加入表情
方法1:unity原生的TextMesh方法2:unity收购的TextMeshPro方法3:Layout Group 自动排序方法4:自己写一个图文混排的插件(需要了解UGUI——text的源码)大概思路:可以继承text在text设置顶点脏标记的时候 判断m_text里面是否有表情的字符有的话string.Format("<quad width={0} height={1}>", size.x, size.y);用这个代替掉表情字符 代替完后记得对<quad wid
2020-09-11 11:31:32 637
原创 Unity_UGUI 优化篇
UGUI可优化的性能 总结一下有下面几个吧:1.网格重建2.合批 节省drawcall3.填充率( overDraw像素重新绘制)网格重建(两个网格重建:单个UI,合批完的整体UI网格)网格重建就是ui有修改 需要重新绘制网格如果是单单重新绘制当前UI性能还没什么消耗 但往往为了节省drawcall我们都会搞合批这个东西但搞合批 就是把能合批的UI都做成一个网格 这样就会导致一个ui修改需要重新绘制整个合批网格 性能消耗还是比较大的那这里应该怎么优化呢 这就需要了解合批的一些东西了
2020-09-07 17:13:58 2657
原创 记录Lua的几个坑
1.if … elseif if parentName == "UpLeft" then self:SetChildPosByParam(3,3,107,100,20) elseif parentName == "UpRight" then self:SetChildPosByParam(5,5,-107,-100,-20) elseif pare...
2020-04-24 10:49:27 302
原创 unity游戏优化记录 1.图片资源优化技巧 在完全不影响图片的质量下可以做的优化
1.图片优化技巧图一看到这张图有什么弊端吗?没错中间都是一样的图二这个图可以直接叫美术改成图三然后怎么让效果和图一样呢unity的九宫格模式可以选择拉升中间的这一块像素然后在image里面选择imageType为sliced再设置UI的宽高就能实现和图一的效果了...
2020-04-21 13:13:20 497
原创 Unity Shader unity文档学习笔记(七):后处理之高斯模糊
比起均值模糊 就是效果要好一点 说性能会好也好不到哪里去效果shaderusing UnityEngine;using System.Collections; //编辑状态下也运行[ExecuteInEditMode]//继承自PostEffectBasepublic class GaussianBlur : PostEffectBase{ //模糊半径 ...
2020-04-07 15:07:15 226
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人