2025
04-22
04-22
Unity创建艺术字体
首先创建艺术字体文件。 接着将sprite拖入FontList, 并且输入它对应的unicode字符,可以是中文也可以是数字,主要就是把字符和Sprite进行绑定。 点击生成字体,会创建3个文件,字体文件、材质文件、图集文件。 创建Text对象,拖入刚刚生成的字体文件到Font上,输入绑定的字符即可.... Read More >
专注移动互联网,专注Unity3D游戏开发
首先创建艺术字体文件。 接着将sprite拖入FontList, 并且输入它对应的unicode字符,可以是中文也可以是数字,主要就是把字符和Sprite进行绑定。 点击生成字体,会创建3个文件,字体文件、材质文件、图集文件。 创建Text对象,拖入刚刚生成的字体文件到Font上,输入绑定的字符即可.... Read More >
手机中可以通过 Application.logMessageReceivedThreaded来监听日志的信息,在通过File.AppendAllText来将日志写在手机的Application.persistentDataPath目录中。日志可以按天写入,这样即使游戏闪退也可以把当天产生的日志取出来.... Read More >
材质上可以通过material.shaderKeywords来获取使用到的宏,接着使用ShaderVariantCollection就可以动态创建变种收集器了。 这里面有个巨大的坑就是passtype,比如这里有两个宏A和B同时开启时,因为他俩在不同的LightMode中,所以对应的passType.... Read More >
Unity提供了DownloadHandlerFile类来进行文件的下载,如果是那种网络比较好的宽带每秒下载速度可以达到20M以上,这样导致IO容易卡住。如果是进游戏前那种提前下载肯定没问题,但是边玩边下这种如果不限制下载速度那么游戏就不会那么流畅了。 Unity提供了DownloadHandler.... Read More >
我们游戏是回合制卡牌,场景并不会像MMO那样人物在屏幕上可以自由移动,这里产生的一个优化的可能就是将场景先渲染到一张图上,然后在Blit到屏幕上,然后在绘制后面的人物。前提是相机不能移动和旋转,这样在低端机上可以从设计上锁了镜头的旋转移动。如果对效果要求不那么高其实RT用ARGB32就够了。.... Read More >
在URP中Input.hlsl中定义了主光的全局变量,C#管线这边需要每帧将主光的位置和颜色传递到Shader中。 如下图所示,在FrameDebugger中可以看到,这里显示的数值是localToWorldMatrix后的结果,做了归一化它和面板中显示主光的世界坐标是不同的。 美术同学可能会添加多.... Read More >
DXT1 compressed textures are not supported when publishing to iPhone Resources/unity_builtin_extra 真是坑啊,原来是美术同学使用了一张内置贴图"Default-Checker-Gray",关键是这个贴图.... Read More >
Overrid Material就是在原本材质的基础上在覆盖一个新的,如果覆盖了这个材质就会绘制2次。如下图所示一般会添加一个层,在Filtering中不包含Actor层,这样渲染时就会过滤它。 如下图所示,添加一个新的渲染器,设置LayerMask为Actor层,下面在设置一个可覆盖的materi.... Read More >
今天看源码无意间发现了renderingLayerMask属性,真是解决了一个大问题啊。 比如我有多个角色,希望其中某几个拥有描边效果,此时又不希望写多个Layer层。就可以添加一个RenderMaskLayer。如下图所示。 可以自己扩展一个RenderObjects类。 RenderObject.... Read More >
在URP中PBR的材质是Lit.shader,由于项目组需要拓展不得不仿照它的写法在写一堆C#的代码来配合面板的显示,一方面容易出BUG另一方面非常麻烦。 首先复制一个Lit.shader改成MyLit.shader放到Asset目录下,Properties属性面板中下面写入 [ext.... Read More >
美术制作场景的时候习惯放置一些参照物,由于每次他们都会忘记删除,所以我们制作了一个脚本根据源场景自动生成一份新场景,以节点命名,生成的时候自动删除这些参照物。如下图所示,场景烘焙过,只保留Scene节点,导出新场景其他节点都删除掉。 如下图所示,拷贝场景后只保留了Scene节点,其他都删除了。 然后.... Read More >
Unity的Shader绝对是个黑盒,困扰了很多开发者,我也陆陆续续被困扰了好久。首先我们需要知道Unity的Shader从编写到最终被GPU执行经历了什么? 编写Shader的时候我们用的是HLSL语言,在打包的时候会根据目标平台生成对应的着色器语言,如Android平台是GLSL,iOS平台则是.... Read More >
UIToolkit使用了uxml来描述界面的布局,使用uss来制作不同样式,参考了web开发的xml和css方案。Unity2021已经将UIToolkit内置在引擎中,具有和UGUI同等地位。 比如要画一个按钮,对应的uxml 按钮的样式uss如下 在C#代码可以将名字和样式名绑定在一起添加点击事.... Read More >
有段时间没写东西了,最近有点小累啊。最近美术在K动画反映的问题,如果Image组件挂了新材质后,无法在Image上K材质中的效果。 使用MeshRenderer组件是可以K的,这里简单的给Image材质拓展了一个置灰的效果。如下图所示,MeshRenderer组件就可K材质动画。 所以我觉得,如果给.... Read More >
在URP下默认只有不透明才会有阴影,其实可以使用alpha test给shadowmap上画阴影, 物体本身则使用alpha blend这样也更加合理。 首先拷贝一下默认的Lit.shader,在Properties中添加一个Toggle变量来控制是否开启半透明阴影。 在写一个shader面板,继承.... Read More >
在前面的文章中 Unity3D研究院之实时获取手机电流、电压、计算功率发热(一百一十八) 我们可以给自己的游戏添加电流功耗显示,但是有时需要对比其他游戏,看看到底是它发热还是自己的游戏发热。如果只是统计别人游戏帧率那么可以很方便使用腾通讯性能狗这样的工具,但是如果帧率在相等情况下就只能根据电流来确认.... Read More >
Game视图同步Scene视图比较容易,直接获取Scene的摄像机坐标和旋转然后同步给Camera就可以。但是我想做的是Game视图运行时修改摄像机的位置,Scene视图来同步。 Unity给的一个解决方案是SceneView.AlignViewToObject但是会有延迟,无法做到每帧同步,后来翻.... Read More >
Unity的材质有个隐患,当美术同学在切换shader的时候会造成上一个shader里的宏或者属性(如贴图)造成残留,未来在打assetbundle的时候就会造成冗余浪费,Unity这种设计可以更好的解决运行期进行shader的切换,但大部分材质是不需要这种需求的,所以需要一个方法来一键删除残留。.... Read More >
项目中已经全面采用3D与2D结合的方式来制作UI,3D界面的透视感会更强。但是有一部分UI还必须是不带透视的,所以需要采取正交与非正交摄像机结合的方式。3D界面有两种方式,第一种是需要进行屏幕自适应的,另一种不需要与屏幕自适应,我姑且把第一种称假3D界面,第二种称真3D界面。 假3D界面的效果是,I.... Read More >
如果是自定义shader的通用面板可以看我之前的文章 Unity3D研究院之材质Shader通用面板(一百二十一) 这篇文章和它的原理是一样的。 首先shader graph有个很麻烦的问题就是自定义的keyword始终在面板的最下面不能和普通的属性进行排序,而且也无法展开分组的功能。为了实现通用面.... Read More >