Unity
文章平均质量分 81
王王王渣渣
这个作者很懒,什么都没留下…
展开
-
Unity中ComputeShader入门
前言ComputeShader是如今比较流行的一种技术,例如之前的《天刀手游》,还有最近大火的《永劫无间》,在分享技术的时候都有提到它。本着不学习就可能失业的压力,就来学一下,虽然好像已经晚了好几年了=。=。Unity官方对ComputeShader的介绍如下:https://docs.unity3d.com/Manual/class-ComputeShader.htmlComputeShader和其他Shader一样是运行在GPU上的,但是它是独立于渲染管线之外的。我们可以利用它实现大量且原创 2021-04-30 16:45:54 · 3763 阅读 · 5 评论 -
【腾讯开发者大会】天刀手游开发历程(笔记)
【腾讯开发者大会】天刀手游开发历程(笔记)链接:https://gameinstitute.qq.com/tgdc/2020/画质,帧率,功耗(pc可以不考虑),三者协调,互相不断的优化协调。使用各种技术栈,来获得更好的优化效果对多线程渲染引擎,进行优化,把大部分可以并行的工作,比如动画、布料,放到其他的线程去运行。使用ISPC,来自动生成NeonSIMD的代码,这部分代码可以更好地提升CPU的执行效率。在GPU和CPU的遮挡剔除中,使用不同粒度的遮挡剔除算法,首..原创 2021-01-07 14:10:37 · 4143 阅读 · 5 评论 -
Cinemachine(四)在路径/轨道上移动的摄像头(Cinemachine Dolly Camera,Path And Cart)
22原创 2020-10-22 18:10:42 · 10273 阅读 · 3 评论 -
Cinemachine(三)自动选择/切换最适合的摄像头(Cinemachine Clear Shot Camera)
在很多的解谜类游戏中,原创 2020-10-15 16:45:07 · 3390 阅读 · 7 评论 -
Cinemachine(二)制作不会穿墙(会避开障碍物)的摄像头(Cinemachine Collider)
在许多的第三人称游戏中,我们的摄像机往往保持着一定的偏移,跟随着我们的角色。但是常常会出现的一种情况就是,当我们的角色走进室内或者靠近墙边或障碍物的时候,如果这个偏移保持不变的话,我们的摄像机就可能会跑到墙体里,或者看向角色时被墙体或障碍物所挡住。因此这种情况下我们的相机往往需要一些特殊的处理,例如修改偏移量来拉近相机与角色的距离等,来防止上述情况的出现。在以往我们可能需要通过射线检测或者碰撞检测等,然后编写一大堆的代码做一堆复杂的判断来修改我们的摄像机的位置。视频链接:https://www.bi原创 2020-10-13 14:12:49 · 9112 阅读 · 7 评论 -
Cinemachine(一)VirtualCamera和Brain的简单介绍
https://zhuanlan.zhihu.com/p/103584975简介Cinemachine是Unity在2017版本推出的一套处理Camera的组件。利用Cinemachine我们可以不通过敲代码就实现很多摄像机功能,例如目标跟随,镜头切换等等。官方文档:https://docs.unity3d.com/Packages/com.unity.cinemachine@2.6/manual/index.html我们可以通过Package Manager来安装C...原创 2020-09-30 18:26:40 · 12902 阅读 · 4 评论 -
Unity内存管理
https://www.bilibili.com/video/BV1aJ411t7N6https://www.bilibili.com/read/cv3260881?spm_id_from=333.788.b_636f6d6d656e74.38原创 2020-09-17 17:37:18 · 3131 阅读 · 0 评论 -
Unity性能优化技巧
Profiler堆栈(Stack)和堆积(Heap)堆栈是内存中存储函数区域变量的地方,还有函数收到的参数与函数本身。不会遇到碎片化的问题,或是垃圾收集的问题。但是可能会碰见堆栈溢出的问题,比如调用了太多的函数导致一直push东西进堆栈,占据越来越多的内存空间,导致堆栈溢出。堆积是内存中另一个区域,要比堆栈大。我们将所有的类别、实体和对象(引用类型)存放在这。通常我们每创建一个新的对象,会在堆积中找到下个空的位置。我们销毁对象后,内存空间不会马上释放出来,而是标记成未使用,之后垃圾收集.原创 2020-09-11 17:57:46 · 4483 阅读 · 1 评论 -
UGUI 自定义滚动选择列表 ListView
列表在游戏的UI中是非常常见的,例如选服页面,商城页面,奖励页面等等都会有列表的存在。文中我们将这些列表称为ListView(类似于fgui的GList),而列表中的每项称作Item。首先我们来分析下,我们的ListView需要实现哪些功能,以及如何实现功能 解决思路 可以通过滑动来显示ListView中的Item 可以使用UGUI的ScrollView(ScrollRect)来实现,Item放在Content当中 ListView中的Item可以是单选或者多选 UGUI的原创 2020-09-08 16:54:37 · 3059 阅读 · 0 评论 -
Unity Graphic功能,实现UGUI上三角形,四边形,圆环的绘制
前言原创 2020-08-12 14:48:43 · 5326 阅读 · 0 评论 -
PureMVC
官网:http://puremvc.org/下载:https://github.com/PureMVC/puremvc-csharp-standard-framework(注意官网点击C#按钮跳转的是multicore版本,这个版本用的是.netcore的库,导入unity编译会报错,因为有很多API不一样,例如Lazy等)参考文章:PureMVC框架在Unity中的应用(一)PureMVC框架在Unity中的应用(二)Model 与 ProxyModel 保存对 Pr...原创 2020-08-20 09:50:09 · 4342 阅读 · 2 评论 -
ECS的简单入门(六):传统GameObject模式转换到ECS模式
参考文章:https://zhuanlan.zhihu.com/p/109943463在前面的介绍中,我们都是通过代码来实现物体在场景中的显示,例如我们要显示一个Cube,通过创建Entity,添加RenderMesh等Component,设置相应的Material和Mesh值即可。这样就会产生一个新的问题,...原创 2020-07-22 18:27:00 · 4472 阅读 · 1 评论 -
ECS的简单入门(五):Entity Command Buffer
Entity Command Buffer (ECB)在前面的例子中,我们都是通过EntityManager来创建或销毁Entity,或者给Entity添加删除Component。但是在实际的情况中,我们可能需要在System中来做这些操作,比如一个Entity有一个存活时长的属性,我们会用一个System来计算已存活的时间,当时间到了后销毁该Entity。根据前面的知识,我们需要一个Component来存储这个存活时长的属性,例如:struct Lifetime : IComponentDa原创 2020-07-16 16:08:22 · 3003 阅读 · 0 评论 -
ECS的简单入门(四):System
概念原创 2020-07-10 17:17:14 · 3351 阅读 · 1 评论 -
ECS的简单入门(二):Entity
介绍完ECS的大致理念之后,我们接着单独来了解下Entity,Component和System的概念以及使用,首先我们先从Entity开始入手。Entity概念我们来看下Entity的组成,代码如下,只有Index和Version两个字段。public struct Entity{ /// <summary> /// The ID of an entity. /// </summary> public int Index; .原创 2020-07-02 11:24:05 · 2914 阅读 · 2 评论 -
ECS的简单入门(三):Component
通过上一篇文章我们已经大致了解了ECS的整体概念,这篇文章我们就先来深入的了解下Component。原创 2020-07-06 17:04:00 · 3866 阅读 · 5 评论 -
Unity C# Job System
首先在学习ECS之前,我们先来了解了解ECS所依赖的Job System,这样方便我们可以更轻松的读懂ECS的一些代码。简介利用Job System,我们可以编写简单并且安全的多线程代码,来提高游戏性能。官方文档:https://docs.unity3d.com/Manual/JobSystem.htmlNativeContainer在Job System中我们会使用到一种新的类型NativeContainer。它是一种托管值类型,为本机内存提供了一个相对安全的 C# 封装器..原创 2020-06-29 18:48:52 · 2585 阅读 · 2 评论 -
ECS的简单入门(一):概念
引言首先我们先来看一个神奇现象,在下图中,我们可以看见场景中创建了多个Cube,然而在我们的Hierarchy面板中却没有这些Cube对应的信息,同时在Scene面板中也无法选中这些Cube。那么,这些Cube是哪来的呢?接下来要介绍的ECS会为我们揭晓答案。ECS官方文档:https://docs.unity3d.com/Packages/com.unity.entities@0.9/manual/ecs_core.html当前版本:Unity2019.3.0,需要在Pack.原创 2020-06-19 18:23:56 · 14428 阅读 · 3 评论 -
URP 渲染顺序设置 RenderObjects
如下图,URP默认Shader的设置中,已经没有了以往的Render Queue的设置。 那么我们要如何来控制渲染顺序呢?我们先简单的搭建一个测试场景,在场景中创建两个Cube,使其位置重叠,将其中一个命名为RedCube。然后新建一个默认的Material(即shader为URP/Lit),设置Base Map的颜色为红色,将该material挂到RedCube上即可。如上图,按照默认的渲染顺序我们只能看见灰色的方块。Priority属性在Material中有一个名为...原创 2020-05-18 10:43:00 · 8046 阅读 · 1 评论 -
Playable API:定制你的动画系统 简单使用
https://connect.unity.com/p/playable-api-ding-zhi-ni-de-dong-hua-xi-tonghttps://github.com/Unity-Technologies/SimpleAnimation/wiki原创 2020-04-27 19:19:26 · 8894 阅读 · 3 评论 -
SRP Batcher,Draw Call优化,Shader SRP Batcher compatible
当我们使用SRP(Scriptable Render Pipeline)之后,例如HDRP,URP或者LWRP,在SPR的asset文件中有一个选项叫做SRP Batcher(如图)。这篇文章就让我们来了解了解这个好东西。作用简单的说,如果当你的场景中有很多的物体分别使用到了不同的Material,但是这些Material使用的Shader却都是同一个时,SRP Batche...原创 2020-04-15 14:45:40 · 6529 阅读 · 1 评论 -
Shader Graph学习(二)
https://www.bilibili.com/video/BV1Db411e7Ag原创 2020-04-10 18:20:56 · 4403 阅读 · 0 评论 -
Shader Graph学习(一)
前言在Unity2018.1之后新增了Shader Graph功能。(emmm,现在都2020了,只怪自己平时关注新知识太少了)Shader Graph可以在一个可视化的面板中完成shader功能的实现,一句代码都不需要写,大大降低了shader的开发难度。官方文档:https://docs.unity3d.com/Packages/com.unity.shadergraph@7.2/ma...原创 2020-04-09 19:20:09 · 18745 阅读 · 3 评论 -
Spine学习
最近学习了一下Spine在Unity里的应用,利用SpineDemo里的资源结合其内容简单的做了两个测试场景(见下图)。工程的github地址为:https://github.com/luckyWjr/SpineTest,有兴趣的小伙伴可以一起学习学习。介绍个人的环境是:Unity2019.3.0 和 spine-unity 3.8,同时在例子中还使用到了Input System...原创 2020-04-02 18:36:54 · 2988 阅读 · 2 评论 -
Unity 2D光照(2D Light)和阴影(Shadow Caster 2D)
2d animationhttps://docs.unity3d.com/Packages/com.unity.2d.animation@3.1/manual/index.html2d场景的光照效果https://www.youtube.com/watch?v=F5l8vP90EvU原创 2020-03-25 18:11:21 · 20598 阅读 · 10 评论 -
Unity 2D Animation(2D动画)学习
引言2D Animation是Unity2018版本之后出来的新功能,我们可以用其在2D图片上制作骨骼动画。例如我们可以将下面这张2D图片添加一个动画。 由于是简单的一张图片,所以效果不是特别好,我们也可以在PhotoShop中一张完整的图片切割成好几个部分(图层),然后导出一个PSB文件(PSD文件暂时不支持)来单独处理每个图层的动画效果。接着跟着一起,让图片动起...原创 2020-03-24 11:15:31 · 11446 阅读 · 1 评论 -
关于Color Space是Gamma还是Linear的一些问题
这个问题源自于我们的UI发现自己在FGUI下制作的东西,在Unity中显示的效果不对。例如90%透明度的黑底图片导出到Unity中的效果非常的透,可能只有70%左右的效果。然后我们绞尽脑汁的找了半天不同,才发现是由于我们工程Color Space设置成为Linear的问题。而且相对的UGUI也存在这样的问题,我们做个简单的测试,在Gamma环境下,UGUI Image为黑色90%透明度的遮挡效...原创 2020-03-09 16:43:48 · 2572 阅读 · 0 评论 -
Input System的简单应用
通过前面两篇我们简单的了解了一下Input System,接着就是要学以致用,这样才能了解的更加透彻。原创 2020-02-27 19:16:32 · 3529 阅读 · 3 评论 -
Unity 新的输入系统Input System(二)
前面一篇大致简单的介绍了下Input System,并且通过官方的 SimpleDemo_UsingPlayerInput 来了解了PlayerInput组件的使用。接下来让我们通过其他几个Demo来了解下Input System的其他几种使用方法。首先我们先来看看SimpleDemo_UsingActionAsset这个Demo,相比SimpleDemo_UsingPlayerInput,会...原创 2020-02-18 13:46:14 · 10373 阅读 · 0 评论 -
Unity 新的输入系统Input System(一)
最近看见Unity出了新的输入系统Input System,本着喜新厌旧的原则,就让我们来学习学习这个新系统。官方文档:https://docs.unity3d.com/Packages/com.unity.inputsystem@1.0/manual/Installation.html安装运行环境:Unity 2019.1+ 和 .NET 4 runtime官方的文档中已经...原创 2020-01-19 17:30:41 · 54390 阅读 · 9 评论 -
在 ILRuntime 的基础上,搭建一个简单的UI系统(二)UIView
上一篇主要处理了一些UIPanel相关的逻辑,这一篇我们主要来讲讲UIView部分的理解。目前个人理解下来UIView主要有两种情况1.例如商城界面,会有很多的物品卡,每一个物品卡就是一个UIView,然后我们在UIView中进行物品的详情显示等逻辑。(这种情况一般是动态加载物品卡的prefab)2.在一些组件较多的复杂界面,例如个人信息界面可能会有好几个标签页,如果这些组件逻辑全...原创 2020-01-13 17:26:32 · 1097 阅读 · 0 评论 -
Unity自定义Hierarchy面板案例(显示GameObject的InstanceID),以及通过InstanceID找到场景中的对应GameObject
需求由于之前给服务器导出过.obj文件(类似于导出游戏地图中每个GameObject的某些信息),其中会遇到一个问题,就是如果这些文件中有一些文件有错误,我们如何定位到游戏地图中对应的GameObject。最简单的就是导出的时候带name信息,然后在Hierarchy面板中搜索对应的name。但是由于一个大地图,可能有成千上万个GameObject,然后美术在制作的时候可能很多都是重复的,...原创 2019-12-31 18:43:19 · 6413 阅读 · 1 评论 -
场景中旋转摄像头,被观察的物体始终在界面的一侧
前言现在很多游戏都会在主页中显示一个场景,然后玩家的人物会在场景当中。这个时候往往会需要一些旋转功能,来方便玩家查看人物的各个角度。一般的做法就是人物自身转动,摄像机不动,这样用户无法用其他视角观察到整个场景。另一种是人物不动,相机围绕人物,或者某个点转动,这种做法的缺点在于要么人物在屏幕中央(看向人物),要么会在屏幕左右乱跑(看向人物边上某个点),会局限UI的设计。因此最好的方法便是...原创 2019-12-03 14:49:00 · 1120 阅读 · 1 评论 -
unity .obj文件的导出
.obj文件后缀,是一种3D模型文件格式,一种文本文件。支持多边形模型(三个点以上的面),纪录法线和贴图坐标。并不记录动画、材质特性、贴图路径、动力学及粒子等信息。主要的用途在于将场景的Mesh信息导出给服务器做碰撞检测(服务器拿到.obj文件后具体如何实现的就暂时不是很懂啦),unity也可以识别出.obj文件,我们将导出的.obj文件放入unity中,效果如下首先来看一下一个简单的...原创 2019-08-23 11:31:27 · 3444 阅读 · 0 评论 -
自动追踪导弹功能实现
依旧先上效果图,小球模拟被追踪的目标,小方块为发射器,小长条这模拟追踪导弹,会跟着小球的位置而转向。思路由于是追踪导弹,所以导弹的朝向一定是会最终朝向目标点的。假设导弹为missile,目标为target,即最终missile.transform.forward = (target.transform.position - missile.transform.positio...原创 2019-10-18 17:43:43 · 5829 阅读 · 0 评论 -
Unity 利用 Stencil(模版测试) 实现mask的遮挡效果 可遮挡粒子和自定义遮挡形状
先看最终的效果图:美术提了一个在按钮上加粒子特效的需求,因此需要做下裁剪的功能,防止粒子特效超框(如上图)。一开始想的是用之前的方法,给shader一个按钮位置以及长宽的Vector,计算按钮区域来计算遮挡。但是发现那个按钮的图片是一个梯形的(如图),空白的部分也不能出现粒子,这就麻烦了。后来查了下发现shader有一个Stencil的功能,叫做模板缓存,可以实现我们想要的需求(不过似...原创 2019-10-17 19:05:26 · 12087 阅读 · 2 评论 -
Unity 自动寻路入门 NavMeshComponents
自动寻路是很多游戏必备的功能之一(虽然以前玩网游很多人都吐槽国产网游的自动寻路和挂机是很蠢的功能233)。这个功能可以帮助我们在各式各样的场景中实现点击屏幕就控制角色到达指定的地点。如图NavMeshComponents是Unity官方提供的一款插件,可以用来实现我们所需要的自动寻路功能,github地址。大家下载好后,里面有很多的demo供大家学习,今天就和小伙伴们一起入门。百看不如...原创 2019-03-27 14:01:22 · 3182 阅读 · 0 评论 -
Unity GC垃圾回收
今天记录一些GC相关的知识点,加上一些自己的理解。英文原文:https://unity3d.com/de/learn/tutorials/topics/performance-optimization/optimizing-garbage-collection-unity-games?playlist=44069翻译参考:http://www.cnblogs.com/zblade/p/64...原创 2019-04-04 15:27:40 · 12736 阅读 · 10 评论 -
Unity 自动寻路 NavMeshBuilder
在官方的Demo2(drop_plank)中主要演示的是动态加载NavMesh。首先还是一样,我们需要布置好场景,然后设置好NavMeshAgent。和之前不一样的是,这次不在场景中设置NavMeshSurface进行烘托(Bake),因为NavMeshSurface适用于场景不在改变的情况,提前烘托好寻路的网格。但是在demo2中,场景的都是一块块分开的。只有在游戏运行的时候,通过添加平板来...原创 2019-04-08 15:36:03 · 3151 阅读 · 4 评论 -
Shader 笔记一 表面着色器 Surface Shader
参考猫都能学会的Unity3D Shader入门指南(一)猫都能学会的Unity3D Shader入门指南(二)https://docs.unity3d.com/Manual/SL-SurfaceShaders.html概念Shader和Material:Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作...原创 2019-04-15 16:52:38 · 2085 阅读 · 0 评论