Unity
文章平均质量分 53
常城
系统架构师,游戏编程十余年。写过多套游戏框架,技术涉及端游、页游、手游。热爱技术、热爱游戏、热爱生活、热爱一切美好事物。因为热爱,所以投入!
展开
-
Unity2023, Unity2022, Unity2021的性能对比(帧率)
最近由于需要用到Unity最新版的一些功能,比如Spline,比如Foward+渲染,新项目用了Unity2022.3.5版本,但是出包之后,感觉帧率很低。我并没有找到影响帧率的具体原因。在Google上也没有找到对应的解释。如何能在Unity新版本上,跑出老版本的帧率。基于性能和帧率考虑,只好放弃新功能,准备回退到2021版本上。Unity 2021.3.14 -- 180 帧左右(高!Unity 2023.1.15 -- 97 帧左右。Unity 2022.3.5 -- 99 帧左右。原创 2023-10-17 16:33:04 · 4019 阅读 · 4 评论 -
Unity-- Gfx.WaitForPresentOnGfxThread占用CPU过高导致帧率低
一个新建的URP项目,里面只有几个测试模型,结果在3070的笔记本电脑上,只能运行到20帧!Gfx.WaitForPresentOnGfxThread 这个东西,是CPU已经准备好绘制下一帧,但是GPU还没准备好,应用程序等待 GPU 所花费的时间。那就说明,卡在GPU的性能上了。(6) 笔记本电脑的系统设置。有些笔记本电脑,是有系统设置的,可以直接影响GPU的渲染能力。切换为【性能】设置,释放GPU能力。关闭了所有URP耗性能相关的设置,情况未有好转。死磕了一下午,终于找到原因,解决了。原创 2022-09-24 19:26:04 · 8508 阅读 · 1 评论 -
Unity性能优化-降低功耗,发热量,耗电量之OnDemandRendering篇
公司游戏项目,手机运行严重发烫,耗电量飞快。在暂时无法做其他美术性和技术性优化的情况下,我写了这个公司内部文档,并做了个实验,今天干脆公布出来,希望对大家有用。--官方文档:Unity - Scripting API: OnDemandRendering--Youtube讲解:https://www.youtube.com/watch?v=RYgWn6jbteYyoutube上的极端实验结果: 好,现在我们来做一下实验,看把渲染帧率从60,动态降低到12左右,手机耗电量会降低多少,温度是否能降低。我们把如下原创 2022-06-02 21:37:10 · 6244 阅读 · 1 评论 -
Arm Mobile Studio(二)使用Graphics Analyzer(配合unity)分析手机端OpenGL API调用和Shader
这一篇,让我们更近一步,去分析图形API的调用情况。注意,依旧是分析基于ARM的Mali系列GPU的。上一篇文章,已经安装好了Graphics Analyzer。所以我们打开它,打开后界面是这样的:假设你手机已经安装好了,unity打出的测试包(注意,测试包要在build settings里原创 2022-04-25 20:22:33 · 5210 阅读 · 2 评论 -
Unity Color对比Color32、对应PS的通道解释
1,先说Unity Color与Color32:官网文档:Unity - Scripting API: ColorUnity - Scripting API: Color32Color和Color32可互转。Unity默认貌似用的是Color。那区别是什么呢?Color: 使用Float (4字节,32位!) 对应一个通道。那么RGBA=4个*4字节*8=128 bit !大有大的好处。能表示的色彩数量也越高。甚至可以跟HDR直接做结合(float,当然可以表示1以上的数据啊)。..原创 2022-04-19 22:51:30 · 6852 阅读 · 0 评论 -
Arm Mobile Studio(一)Streamline使用(配合unity)分析手机GPU和CPU性能
本文目的是解决2个问题:1,Unity的profiler,在真机上无法取得GPU数据,尤其是在Graphics APIs设置为Vulkan时,如下图(其实OpenGL ES3,我测试了下,也不行)。2,ARM的Mali系列GPU,有一些和高通GPU、苹果GPU不一样的地方,比如shader里的精度问题等等,这些BUG就变成的黑盒。我们就很想知道,在异常渲染的时候,Mali GPU到底发生了什么。...原创 2022-03-31 16:55:47 · 9392 阅读 · 4 评论 -
Unity Hub 3 登录无响应(无法登录)解决方式
早上Unity Hub 3 点击登录没反应(关键没反应还没提示!),如下:然后,尝试了网上的各种方式:删除cache文件夹、重装HUB、重设默认浏览器等等。结果都不行。然后平心静气,开始分析HUB的日志,最终好使了。解决办法: 分析HUB日志。看看到底哪一步报错了。右键点击任务栏的HnityHub,打开log日志文件夹,如图:打开日志文件,我的默认打开方式是vs code,可以动态载入日志的变化:打开log文件后,再操作unity hub,点击【登录】,可以看到点击后..原创 2022-03-16 14:08:22 · 22174 阅读 · 10 评论 -
自由旋转天空盒-- Rotate skybox XYZ
最近写独立游戏,需要旋转天空盒。有两种办法:方法A,通过shader传参数,旋转天空盒。方法B,多相机,分层渲染。专门一个相机去渲染天空盒,然后旋转相机。这里先讲方法1。方法2在URP下,最好是用相机堆栈(Camera Stack)处理,具体就不讲了。步骤1: 更改原始的skyboxshader更改默认的天空盒shader,去官网下载对应的内置shader,然后更改如下(我做了标记,如果实在不清楚改哪行,可以用对比工具对比一下):// Unity built-in shad..原创 2022-03-15 17:08:16 · 6091 阅读 · 0 评论 -
Unity录音并保存成wav文件或者byte[]字节数组
需要去商店下载【Open WAV Parser】这个插件,目前是免费的!ps. 用这个插件之前,用Unity原生的Microphone折腾了快两天。最终觉得还是这个插件好用啊!推荐!原创 2022-01-18 19:32:56 · 2515 阅读 · 1 评论 -
Unity 2021 Package Manager变化以及安装Memory Profiler
使用Unity 2021.1,Package Manager有了比较大的变化,整整浪费了我几个小时的时间才弄明白,并且安装好Memory Profiler。下面记录一下:全新的Package Manager,三种类型的包:Release:(直接能在Package Manager窗口里看到的)直接能在Package Manager窗口里看到的这些包,它们的发布是经过测试、验证的。可以安全的用于项目。Pre-release:(预发布包,需要开启设置才能看到)预发布包由 Unity 官原创 2021-08-19 17:10:50 · 6137 阅读 · 2 评论 -
unity程序员转Laya入门(6) UI屏幕适配(类似九宫格)
UI适配,看了半天官网文档,挨个实验,效果也不好,直到搜到这篇文章:https://www.cnblogs.com/gamedaybyday/p/11523432.html里面的办法实验后,感觉很好用!这里我再总结一下:1,页面设置,必须为 view2,这个view页面,上下左右全设置为03,UI元素,也设置好,对应上下左右的相对位置例如,底部居中的按钮...原创 2021-02-20 12:01:39 · 583 阅读 · 0 评论 -
unity程序员转Laya入门(5) 纯手写一个摇杆joystick
laya目前没发现像unity那么多好用的插件,或者代码库。所以很多基础功能都要手写。昨天琢磨一天,写了一个摇杆算法,分享给大家。原创不易,写代码不易,转载请注明出处!写摇杆之前,先说一下理论:摇杆三要素:1,响应区域(一般不可见,但是会有一个范围,是摇杆操作的响应区域。一般都不会全屏都能搓摇杆)2,摇杆底盘(也就是摇杆的那个大圈)3,摇杆控制杆(就是摇杆中间那个小圈)用Laya制作摇杆1,分别制作上面说的摇杆三要素,如下:显示如下:这里我把响应区域,调了..原创 2021-02-20 10:25:11 · 827 阅读 · 0 评论 -
unity程序员转Laya入门(4) 运行期查看与调试 LayaTree
laya在运行期查看数据是不太方便的。我同事王锐同学找了一个插件,还算比较好用,推荐一下:chrome浏览器的插件:layaTree,运行的时候如下图所示:具体安装方法也很简单:1,在chrome商店,搜索layatree,然后安装。2,设置一下,如图:然后就可以用了!...原创 2021-02-20 10:02:19 · 633 阅读 · 0 评论 -
unity程序员转Laya入门(3) unity导出资源到laya
好,我们继续。把Unity资源导入到Laya,在laya里开发。官网文档位置:https://ldc2.layabox.com/doc/?language=zh&nav=zh-ts-4-2-0Unity端:1,打开unity 2018.4.7,新建一个工程。然后导入laya的unity导出插件。导入后是这样的:2,在Unity里准备好场景和资源。这个大家自行准备吧。不多叙述。这里我新建了一个材质,使用laya支持的shader(当然也可以直接将材质改为Lay.原创 2021-01-29 16:22:30 · 3493 阅读 · 0 评论 -
unity程序员转Laya入门(1) 安装和Hello world
写在前面:作为一名unity程序的来说,不能导出微信小游戏,抖音游戏,很痛苦。那就只剩下三种办法:1,等unity发布新版,支持国内这一系列平台的。但是,生命可贵,等了这么久,我是实在等不下去了。2,用cocos。自学两周后放弃:确认过精神,不是对的人。3,用laya。研究了几天,发现,可行!尤其适合unity程序转过去!起码我是这样。安装laya:1,laya本体。去官网下载。laya是绿色版的,解压即可用。2,node.js。 去node官网下载,没啥特殊需求,一路ne.原创 2021-01-26 10:05:35 · 1193 阅读 · 1 评论 -
unity程序员转Laya入门(2) UI-Button绑定事件
接上一篇,打印hello world之后,得开始做实际的东西了。button是最常用的。创建工程,创建场景,不再复述。创建按钮第一种方法,用代码创建Button。用python写过图形化按钮的人,可能会会心一笑。具体写法可以看官方文档。文档位置如下图:第二种方法,用IDE创建Button。推荐用这种方法。拖拽button到场景里,然后把name属性改为:btn_protecting 顺便把var也改了,我们下面代码做个试验。如下图ps. 这里要说的是,laya..原创 2021-01-26 10:05:58 · 1222 阅读 · 0 评论 -
Unity里使用C#获取时间戳
时间戳是个常用的东西。由于C# 没有直接获得时间戳的方法,所以每次都上网随便找个算法贴上。但是今天发现网上流行的两种算法,得出的时间戳居然不一致。哪一种更靠谱呢?放到unity里测试一下: // Start is called before the first frame update void Start() { Int64 time_stamp = GetTimeStamp(); Debug.Log("time_stamp 10: " +原创 2020-11-26 10:25:32 · 4145 阅读 · 0 评论 -
Unity UGUI 背包或商店的制作_快速上手
今天有人问我怎么做背包。我说:亲,百度呀。他说:度了,但还是觉得问你好。于是有了这篇文章。思路先行!背包需要的东西:1,背包背景:一般来讲,使用Image或者Panel。2,元素容器(可视区域):就是背包里的那些元素,滚动的时候不能超出的UI范围,一般使用panal,添加mask组件,或者3,元素:一般是Button,或者Image。4,元素排布:这个unity已经有现成组件了,5,下拉滚动条:用Scrollbar。...原创 2020-07-29 20:47:38 · 2228 阅读 · 1 评论 -
Unity 抛物线运动脚本(弓箭轨迹)
首先声明,脚本代码大部分来自:http://blog.csdn.net/pengdongwei/article/details/50373041我把这个脚本做了一些改动。需要注意的是:关于箭(炮弹)的制作:1, 资源原点, 在箭头上(一般是箭头产生攻击力)2, 箭头朝向, 是z轴的增长方向,以便LookAt脚本如下:using System.Collections;using System.Collections.Generic;using UnityEngine;..原创 2020-05-12 12:39:19 · 5657 阅读 · 2 评论 -
Unity动态加载与内存关系3:AssetBundle (Addressable Assets)篇
接着前两篇,我们继续测试 AssetBundle 方式的资源加载,然后再销毁与卸载,观察对应的内存变化。这里不讲解AssetBundle的基本原理了,不了解的同学可以看官方手册:https://docs.unity3d.com/Manual/AssetBundlesIntro.htmlAddressable Assets说明文档:https://docs.unity3d.com/Packages/com.unity.addressables@1.8/manual/AddressableAss原创 2020-05-09 19:24:39 · 3056 阅读 · 0 评论 -
Unity动态加载与内存关系2:Resources.Load 篇
接着上一篇,我们继续测试Resources.Load 资源加载,然后再销毁与卸载,观察对应的内存变化。先说结论:1,不触发时,不占用什么资源(请对比上一篇prefab模式,那个要占, 其实就相当于Resources.Load() )2,Resources.Load() 的时候,会载入Mesh。3,Instantiate()生成游戏体的时候,会载入对应的Texture,占用内存。4,Destroy() 会马上释放小部分显存。Unity等待GC时机,再释放部分mesh和texture资源。但原创 2020-05-08 19:01:33 · 2847 阅读 · 0 评论 -
Unity动态加载与内存关系1:prefab篇
网上得来终觉浅,绝知程序要亲测。好不容易有点闲暇时间,打算把unity动态加载的几种方式,以及对应的内存占用/释放,测试一遍。这是第一篇,最简单的prefab的生成与销毁:本文使用unity2019.3测试。这里分为编辑器的【冷运行】和【热运行】。编辑器的冷运行:就是编辑器完全退出后,再启动编辑器,再运行程序。编辑器的热运行:就是在编辑器里,直接运行程序。冷热运行,profile的...原创 2020-05-08 13:21:00 · 1985 阅读 · 0 评论 -
Unity-UGUI 血条制作-缓动效果(HP Slider)-多层血条
今天尝试用一个新方法做血条缓动效果:新建一个Slider,[隐藏]或者[删去]滑动按钮 Handle Slide Area,变成血条的样子:多层缓慢掉血的重点:加入一个新的Fill层,也就是相当于增加一个血条的上层表现。直接ctrl+d复制一个Fill就好,如图调整这个Fill的参数:...原创 2020-04-14 11:22:22 · 3989 阅读 · 2 评论 -
Unity向量打印精度问题
今早测试一段代码,又忘记了Unity的向量打印,有精度问题,貌似是只取到小数点后1位。比如0.286,Debug.Log会显示为0.3如果想打印精确的数值,最好直接打印数值,如下: Vector3 the_vec3 = new Vector3(rnd_x, rnd_y, rnd_z); Debug.Log(the_vec3.ToString()); ...原创 2020-03-31 11:13:40 · 2000 阅读 · 0 评论 -
Unity 碰撞位置
获取碰撞位置的方法1:使用 Collider.ClosestPointReturns a point on the collider that is closest to a given location.返回碰撞器上最接近给定位置的点。下方是子弹打到物体上,生成撞击火星的代码: // 碰撞体的检测 private void OnCollisionEnter(Co...原创 2020-01-03 16:10:33 · 10389 阅读 · 0 评论 -
unity 远处模糊(贴图变模糊)
今天新做了一个场景,导入后发现,场景贴图越远越模糊,如图:第一反应是设置了LOD了,或者是渲染选项做了设置。仔细检查发现并没有。只好开始Google。最后确定,是【贴图设置】中的【Generate Mip Maps】选项被勾选了。取消勾选,问题解决:抄来的解释:Mipmap技术有点类似于LOD技术,但是不同的是,LOD针对的是模型资源,而Mipmap针对的纹理贴图资源,...原创 2019-11-21 10:49:17 · 6162 阅读 · 1 评论 -
Unity VideoPlayer Andriod卡顿/卡死
Unity VideoPlayer是个好东西,可以方便直接的在游戏里播放视频。简单的几下设置即可,如:但是,导出apk,到安卓机上测试时,播放发现了卡顿,之后干脆卡死!之后,发现视频的导入设置中,有安卓这么一项,尝试改了一下:之后,在手机上运行,发现不卡了。...原创 2019-11-15 15:13:52 · 9643 阅读 · 1 评论 -
Reached the maximum polygons limit (256). Consider simplifying your mesh.
升级unity 2019.3.0b8后,模型出现了一个新的报错:Failed to create Convex Mesh from source mesh "Car_1A". Reached the maximum polygons limit (256). Consider simplifying your mesh.根据报错提示,用建模软件,重新导出模型,都按照三角面去导出。之后问...原创 2019-10-31 15:55:23 · 1705 阅读 · 0 评论 -
Unity使用Mesh Simplify 减面(网格简化)
基于性能的考虑,有些模型需要减面,然而做独立游戏的我,又找不到美术去做。只能想办法用程序减。然后,发现了Mesh Simplify这个插件:导入模型,进行试验:如下图,默认场景默认光,10.7k 三角面添加 Mesh Simplify 组件,之后选择想减到原来的百分之几。比如这里减掉40%,按优化后是原来的60%来算:之后点击【Compute mesh】,生成...原创 2019-10-31 15:49:18 · 16652 阅读 · 2 评论 -
Cinemachine 镜头异常抖动(画面抽搐twitch)
用Cinemachine做镜头跟随,结果发现有异常抖动,画面时不时会抽搐一下:各种查资料,没有发现解决办法。最后开始笨方法,一项一项设置做实验。最后发现,是cinemachine的 CinemachineBrain上的 update method 的问题,使用默认的 smart update 就不行,需要使用 late update。之后,抖动抽搐的BUG,解决。...原创 2019-10-29 16:33:52 · 6195 阅读 · 3 评论 -
CharacterController爬坡和台阶问题
现在做的一款游戏,需求是不能让角色爬坡,不能让角色登上任何台阶。简单说就是不能离地。然后使用CharacterController就出现怎么设置都不行的尴尬境地(并且充满疑惑)。如图:爬坡高度Slope Limit 和 台阶高度 Step Offset 都已经设置为0了,可是依旧能上小坡度,小台阶。想了半天为什么。脑补是这样:胶囊形状的弧度碰撞导致很可惜,我们不能改变角色控制器...原创 2019-10-23 11:05:09 · 2898 阅读 · 0 评论 -
Unity安卓导出的色彩空间(Color Space)设置
关于色彩空间(Color Space)本文不再过多描述,简单来说,就是Linear(线性) 比Gamma(伽马) 渲染效果更好。但是需要注意的是,截止到2016年(新的统计资料我没有找到),有40%的移动设备(主要是旧设备),不支持Linear渲染。也就是说,你选择了更好的渲染效果,就意味着要放弃一批低端移动设备用户。游戏开发,趋势肯定还是更好的效果,所以我选择了Linear渲染。需要在Playe...原创 2018-03-12 16:26:50 · 7529 阅读 · 0 评论 -
(Android Stdio 3)Unable to list target platforms. Please make sure the android sdk path is correct.
Unity 2017.3 + Android Studio 3.1 打包报错:Unable to list target platforms. Please make sure the android sdk path is correct. See the Console for more details.原因是:新版的SDK tools里面,删除了一些打包命令,恰好是unity需要使用的。可...原创 2018-04-01 18:38:01 · 2584 阅读 · 0 评论 -
Unity面数显示不一致
同事的机器使用的MacOS,我这边主要使用Windows。同样使用Unity2017.3版本,使用SVN管理。但是,出现了面数显示不一致的问题,差了10万面,如图: 反复尝试,几经排查,最后确定,同事的Mac机器,没有安装Unity的安卓开发环境。导致ProjectSettings虽然是同步的,但是他那台机器,依然是默认PC平台为目标平台。结论:统一项目的目标平台,就可以了。比如:都统一为PC,...原创 2018-03-28 14:57:40 · 3058 阅读 · 1 评论 -
Hinge Joint 铰链关节
Unity铰链关节的文档并不易懂。所以用白话文写一个说明,以门为例:门由门框、门板组成。门框不动,门板绕着门框(门轴)运动。铰链关节,是门板上的组件。门框:刚体Rigidbody门板:刚体Rigidbody、铰链关节Hinge JointConnected Body:连接到哪个刚体。(比如门框)Anchor:锚点,也就是连接点。连接点位置是从自身原点出发,向X,Y,Z轴偏移多少...原创 2018-08-15 15:32:07 · 7501 阅读 · 0 评论 -
Unity高性能网络通信研究(一) 延迟
■ 写在前面:最近做的项目,都是需要极低延迟的游戏。所以,哪怕是10毫秒的延迟,我都耗费了十几天的时间,努力降低下来。最终研发出一套极低延迟的网络通信框架。下面把一些研究结果,和心得写下来,与大家分享。原创不易,研究更不易,转载请注明出处。 ■ 发数据首先, 调用发送数据代码, 例如在update里进行数据发送,并不延迟。多次测试,从打印日志可以看到,从发送,到确认已经发送完数...原创 2018-12-09 12:30:42 · 3008 阅读 · 4 评论 -
Unity Asset Store资源下载路径 资源保存路径
花美刀下载的资源,想保存一下package,结果找不到路径了。由于用的win系统,所以在C盘搜索了一下unity,找到了,在:C:\Users\用户名\AppData\Roaming\Unity\Asset Store原创 2016-05-16 15:25:44 · 25354 阅读 · 0 评论 -
NGUI 3.5教程(四)Atlas和Sprite(制作图片按钮)
写在前面: 本文将创建NGUI的第一个例子。按照编程传统,第一个例子,就是做一个Hello world 显示出来。NGUI,我们用Label来实现 。 欢迎大家纠错、拍砖!原创很辛苦,如有转载,请注明出处。啊原创 2014-05-12 11:33:38 · 33801 阅读 · 4 评论 -
NGUI 3.5教程(三)Button 按钮
写在前面: 本文将创建一个基本的Button。并且编写脚本,响应点击事件。 欢迎大家纠错、拍砖!原创很辛苦,如有转载,请注明出处。 Button -- 按钮 在NGUI 3.5 里,Button这个控件,经过了整理。比如更改了创建方式(搜索、拖拽);比如合并了 2.x里的Button和Image Button。个人觉得这样是合理的,w原创 2014-05-10 21:04:21 · 52877 阅读 · 11 评论 -
Unity标准着色器(Standard Shader)参数讲解(三)
接上文。6,遮挡图Occlusion Map简单来说,这个贴图是用来处理间接光照的(比如环境光)。遮挡图是灰度图像,白色指示区域应接收完全间接照明,黑色表示不间接照明。很多软件可以直接生成。下面是官网的说明图。左边,没有应用遮挡图,可以看到,在脖子上的织物褶皱处,被照亮得太亮了。右边,在分配环境遮挡图之后,这些区域不再被来自周围树木环原创 2017-09-17 19:52:01 · 6783 阅读 · 0 评论