自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 Unity 自定义编辑器,根据枚举显示Inspector属性

2.通过EditorGUILayout.ObjectField将自定义类的数据显示到右侧界面中。3.通过EditorGUILayout.EnumPopup获取枚举的值。1.先通过target获取到当前物体的自定义类。4.根据枚举的值绘制不同的显示窗口。

2023-03-14 11:11:09 771

原创 Unity性能优化 - GPU

CPU的优化主要是要减少计算的次数,GPU的优化主要是优化渲染的数量与复杂度,同时降低显存的压力,一般的优化手段有下面几种。2)使用烘焙技术代替游戏中的实时灯光,减少同一像素位置的渲染复杂度。1)优化模型的复杂度,降低场景中模型的总体顶点数和面数。3)使用LOD技术,对于离着摄像机比较远的物体进行优化。5)使用Mipmap,用内存换显存。6)降低图片的质量和清晰度。

2022-10-12 16:18:43 1705

原创 解决Unity中不显示阴影的问题

4.如果发现直射光不能产生阴影,其他都正确,并且报了下面的错误,则设置Graphics中如下的选项至Built-in Shader即可解决。1.检查游戏的Quality设置,在某些质量下,可能会将阴影关闭以提升性能。3. 检查场景中的物体是否开启了=投射阴影的功能。2.检查光线是否开启了投射阴影的功能。

2022-10-12 15:15:51 7148

原创 Unity 删除物体

今天写了一段删除一个对象子物体的代码,发现当物体被删除的时候,如果在删除代码的下一行获取被删除的物体,仍然可以调用被删除物体的数据,但是父物体的childCount已经变成0了,网络上说换成DestroyImmediately就可以直接在调用代码的时候删除,试了一下并没有什么作用。就是说,Unity在执行删除操作的时候,可能是把准备删除的物体放到一个暂存区,在当前帧结束之前,会插入一个清除暂存区物体的功能,所以如果我们延迟一帧,就会发现删除的物体变成null了。不知道理解的对不对,欢迎指正~...

2022-07-19 14:15:29 3159

原创 Unity物体拖拽系统(二)

我们现在讲一下OnDragItem的使用,这个类的使用很简单,你只需要在需要拖拽的物体上添加这个脚本,并且在使用拖拽的位置对Item进行回调配置就行,我们看一下OnDragItem中定义的几个函数。 Config这个函数是给当前物体赋值拖拽回调的,有一些通用的方法需要补充进函数里,比如当拖拽开始时,需要将当前拖拽物体设置为自己,在拖拽结束时,需要将拖拽物体置空,是否置空拖拽类型需要根据项目的需求而定。 在OnBeginDrag函数中,我们首先判断了是否是左键拖拽,并且是否已经配置过当前类的回调。如果

2022-07-05 19:27:51 1605 1

原创 Unity物体拖拽系统(一)

在游戏制作的过程中,我们经常会遇到拖拽物体到某个位置并做其他操作的需求,比如我们会把装备拖动到装备栏来使用这个装备,为了方便的解决这个问题,我制作了一套耦合性比较低的拖拽系统,这套拖拽会适配我们之前制作的按键系统,很简单的就可以添加上手柄的拖拽,先上代码。 首先我们应该有一个类,我们叫它DragManager,他存储着一些公用的操作和参数,我们看一下他的代码。 在这个类中,我们定义了一些基础的变量,并在Update中根据需求更新鼠标的显示,在我们的项目中,如

2022-07-05 19:06:53 2982

原创 Unity 按键输入系统(一)

这段时间制作了游戏内的操作系统,主要制作的原因是,在游戏内很多按键是公用的,但是不同位置的处理逻辑不同,比如在最外层界面上,可以使用ESC打开菜单,但是在二级界面里,使用ESC是返回上个界面,如果要使用判断制作的话,会产生很强的耦合性,要在很多位置加入判断逻辑,所以制作了这套按键,先写出代码,下一篇会介绍怎么使用。.........

2022-06-23 15:36:22 1505

原创 Unity判断一个物体是不是实现了某个接口

近期遇到一个问题,就是要检测所有实现了某个接口的类,并执行接口函数,这个功能在制作手柄操作的虚拟光标时会用到,以后在分享按键系统的时候会写到这个问题。这个功能没有太大的难度,只是网络上没有找到对应的写法,所以分享一下。具体逻辑就是查询物体上挂载的所有的MonoBehaviour类,然后判定这个类是否能转换成我们需要的接口类型,代码如下,我们查询的是IPointerClickHandler接口,所以也强行转换成了这个类型。再附上一张as和强行转换的区别,帮助大家理解as这个操作...

2022-06-23 15:33:48 622

原创 Unity检测物体是否在摄像机内

在Unity制作游戏的过程中,我们通常会有这样的需求,比如将屏幕外的人隐藏,提升游戏性能,或者是如果某些物体不在屏幕内,就提示玩家。对于这些需求,我们使用到了Unity内置的一套函数,也就是下面两个挂载当前脚本的物体,需要拥有MeshRenderer或其他功能相似的Renderer组件。有时候,我们发现虽然物体没有在摄像机视野内,但是OnBecameVisible函数也被触发了,那这是为什么呢。经过测试,我发现,如果物体会投射阴影,那么如果阴影被投射到屏幕之内,也是算作物体进入摄像机视野的,所以大家一定要注

2022-06-08 15:15:19 1569

原创 UGUI中为Text增加下划线

今天遇到一个需要给UIText添加删除线的功能,以前博主一般是制作一个同样宽度的Image,盖在Text上,但是这次需要动态换行,所以就重写了Text的功能,具体代码如下。using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;public class DeleteLineText : Text{ public float distance ..

2022-05-24 14:21:34 1282

原创 霜狼老师TA学习笔记 - 渲染流程(光栅化阶段、逐片元操作)

对于一个图元,比如一个三角形,我们通过进行三角形设置获得图元的便捷信息,从而获得顶点所覆盖的像素。三角形遍历就是遍历三角形内所有像素的过程,我们通过应用阶段获取的数据,知道了三个顶点的位置,并通过三角形设置知道了三角形的边界,通过这些数据,我们要筛选出所有片元内的像素点。在光栅化的最后,我们还会进行抗锯齿的操作,因为对于每个像素点,他不是只属于一个片元,所以我们在每个像素点内取几个采样点,通过判断采样点是不是在三角形内,来确定当前像素需要混合多少片元的颜色。上一步我们获得了...

2022-05-15 22:48:07 452

原创 PostProcess报错解决方案

先看一下PostProcess报的错报错显示是AO的问题,我并没有使用AO,报错却一直在打印。这个问题困扰了我两个月,经过对文档的分析和外网资料的查找,我找到了原因,发现是有一个叫PostProcessResources的文件,如果这个PostProcess初始化这个文件失败,就会报上面的错误,所以我的解决方案是通过Resources.Load来加载这个文件,最终解决了这个问题。先看一下这个文件的位置再看一下赋值的代码using UnityEngine;using UnityE.

2022-05-13 19:42:36 1802

原创 Unity Android 烘焙贴图和场景变暗的问题

我们烘焙完之后,电脑上显示正常,放到手机上就会变得很暗,大体就是下图这样,大家先看一下效果经过两天的资料查阅,我在Unity的官网找到了这样一篇文章,大家可以看一下Unity - Manual: Lightmaps: Technical information (unity3d.com)里面有这样一段话,就是说在手机上光照贴图的编码格式是dLDR,dLDR格式会把关照贴图的强度范围从(0,2)映射到(0,1),并且将大于2的光照强度截取变为2,所以手机上使用了dLDR后就会发现有颜色损失。.

2022-05-11 17:41:29 2583 8

原创 Unity性能优化 - CPU

优化CPU主要是从优化Draw Call入手什么是Drawcall?  Drawcall是CPU向GPU发送绘制命令的接口调用。理论上每一个不同材质的物件需要渲染在屏幕上时,CPU都会调用图形API ( openGLorDiract3D )的Draw接口触发显卡进行绘制。为什么优化Drawcall?  Drawcall对硬件和驱动而言,要求大量设置状态(使用哪些顶点、哪些shader等)和状态转换。而Drawcall最大的消耗在于:如果每次drawcall只提交少量的数据将导致CPU瓶...

2022-05-10 19:23:53 1567

原创 NavMesh技术相关问题及解决方案

1.动态生成NavMeshAgent可能无法吸附到NavMesh上默认关闭NavMeshAgent,启用重力和碰撞盒,在FixedUpdate中打射线判定是否接触到地面,如果接触到地面就取消重力,并启用NavMeshAgent,NavMeshAgent在启用时isStopped会重置为false,需要手动变为true private void FixedUpdate() { // 射线判断是否落地,关闭重力 if (selfRigid.useGravi

2022-05-09 21:36:46 1711

原创 霜狼老师TA学习笔记 - 渲染流程(应用阶段、几何阶段)

先上一下视频连接【技术美术百人计划】图形 1.1 渲染流水线_哔哩哔哩_bilibili在看了霜狼老师的百人计划之后,我对渲染流程的细节又有了一些新的理解,下图就是霜狼老师整理的渲染流程应用阶段1)首先准备相应的的场景数据,比如模型的顶点,法线,摄像机的位置,灯光的位置阴影等。2)使用加速算法对渲染的流程进行加速。通过进行粗粒度剔除 ,把不可见的物体剔除出去,这些不可见的物体被剔除之后,就不会进入到几何阶段,也不会进行对应的计算。3)设置渲染的状态,比如使用前向渲染还是延

2022-05-09 07:58:50 473

原创 庄懂老师TA学习笔记 - 玉石效果

我们先来看一下玉石效果是什么样子的它的制作原理大体分为两个部分1)先通过半兰伯特光照模型,将一张玉石贴图映射到模型上,这张贴图的特点是半兰伯特的亮部用暗色,暗部用亮色,这样就可以制作出受光面比较暗,其他面亮的效果,贴图如下图所示(PS:由于Up是程序员,所以这张图没有做好,以后做的更好了再来更新)2)通过添加菲涅尔反射,实现玉石周围泛光效果ShaderForge版代码版Shader "Unlit/JadeCode"{ Properties {

2022-05-09 07:02:45 1152

原创 庄懂老师TA学习笔记 - 卡通渲染

我们可以看到,这个卡通渲染有三个颜色,并且调子与半兰伯特类似,所以我们只需要创建一张有三种颜色的纹理,使用半兰伯特返回的结果作为UV的U值进行RampTex的取值,并把得到的颜色赋值到模型上,最后再加上一个描边即可。RampTex制作方法Shader Forge版...

2022-05-06 21:15:49 607

原创 Unity性能优化 - 内存

检查图片设置

2022-05-05 14:25:13 3493

原创 光影学习 - 三点光照

定义三点布光是一个应用于较小范围的环境照明方法,一般需要三盏灯,分别是主体光,辅助光和轮廓光。主体光主要用来照亮场景中的主要对象,主体光的任务根据需要也可以用几盏灯光来共同完成。如主光灯在15度到30度的位置上,称顺光;在45度到90度的位置上,称为侧光;在90度到120度的位置上成为侧逆光。主体光常用聚光灯来完成。辅助也称为补光,使用聚光灯填充阴影区以及被主体光遗漏的场景区域,调和敏感区域之间的反差,形成景深和层次,通过这个光线,我们可以在模型中间产生中心阴影,由于要达到柔和照明的效果,通..

2022-05-05 09:23:03 1004

原创 庄懂老师TA学习笔记 - 调子映射

调子映射就是由美术提供一张渐变的纹理,我们通过Shader将纹理显示到模型上,通过上面的图片我们可以看到,渐变调子的图片状态是和半兰伯特光照模型相似的,所以我们可以通过半兰伯特光照模型和一张图片将图片颜色映射到模型上。由于半兰伯特光照模型的范围值是(0,1),所以我们可以把这个返回值作为UV的U坐标,固定一个V值,去取渐变调子图片上的颜色,赋值到模型上,我们下面看一下实现方式Shader Forge版代码版Shader "Unlit/ColorRemapCode"{ Pro...

2022-05-04 21:51:50 248

原创 庄懂老师TA学习笔记 - 半兰伯特光照模型

先看一下兰伯特光照模型的公式Max(0, nDir ·lDir)通过公式我们知道,当法线方向和光照方向的反方向的角度大于90度时,点乘就会出现负数的结果,所以我们使用与0取最大值来排除掉这些没有实际意义的负数值,但是也导致了一个新的问题,就是只有一半的模型有光照变化,另一边全都是黑色,这样的显示效果在物理上是正确的,但是在视觉上却不是很好,所以诞生了半兰伯特光照模型,我们看一下半兰伯特光照模型的公式0.5 + nDir ·lDir * 0.5由于nDir和lDir点乘的结果在(-..

2022-05-04 21:03:43 706

原创 庄懂老师TA学习笔记 - 兰伯特光照模型

兰伯特模型公式// nDir为法线方向 lDir为光的方向的反方向Max(0, nDir ·lDir)Lanbert模型中,我们要是用光的方向的反方向,也就是光照在模型上之后反弹的方向与受光点的法线方向进行点乘,点乘的定义和公式为所以如果光的方向的反方向与法线方向相同,则返回结果为1,我们看到的光也就最亮,如果光的方向的反方向与法线方向相反,则返回结果为-1,看到的光也就最弱,但是对于光照模型来说,只有大于0才是有意义的,所以我们通过一个max的操作,将小于0的部分也变为0....

2022-05-04 20:51:23 753

原创 庄懂老师TA学习笔记 - 渲染流程

视频链接庄懂的技术美术入门课(美术向)-直播录屏-第1课_哔哩哔哩_bilibili首先我们用一张图来看一下基础的渲染流程第一步:读取模型的结构大家都知道,在建模软件中,我们是通过创建一个一个顶点,来完成模型的创建的,我们通过连接这一个一个的顶点,就可以得到一些三角面,我们看一下Blender导出的一个正方体的模型结构我们可以看到,这个正方体有8行是v开头,也就是他的顶点vertex,后面的三个数字也就是他的坐标,下方的f一共有12个,他指的的三角面fragment,..

2022-05-03 22:47:49 1147

原创 Unity 颜色空间(Color Space)转换

很多小伙伴会遇到下面的问题,就是把UI切好的图片放到Unity中,会发现有些颜色的差异,尤其是透明度混合方面会有很大的变化,这些都是由于Unity中颜色空间的设置问题,先给大家看一下Unity中的效果。可以看到,在Gamma空间下,我是用PS输出的70%透明度的纯黑色的图片,和使用windows自带应用打开的图片没有任何区别,我们打开图片的设置,有一个sRGB选项(下文会详解sRGB选项),不管开启还是关闭这个选项,图片都不会有变。由于PS是使用Gamma空间进行图片制作和输出的,所...

2022-04-26 15:51:50 5539 2

原创 Unity 学习网站

Post Processing【Unity】Post-process后处理参数详情记录_Mediary的博客-CSDN博客_unitypostprocessUnity PostProcess简要分析与总结 - oayx - 博客园Bloom是什么 - 知乎 (zhihu.com)曝光补偿_百度百科 (baidu.com)Home · Unity-Technologies/PostProcessing Wiki (github.com)色调映射(Tone Mapping)_沧海一升..

2022-04-25 16:56:09 1453 1

原创 Unity世界坐标转换屏幕坐标(测试)

下面展示一下上一篇说的两种实现方式打包文件在不同分辨率下的效果1.WorldToScreenPoint1920 * 1080800 * 6002.WorldToViewportPoint1920 * 1080800 * 600总结可以看到四种情况全部都显示正确,我们再看一下原来的代码 public Vector3 GetScreenPosition(GameObject target) { Vector3 viewp

2022-04-25 09:15:26 4230

原创 Unity世界坐标转换屏幕坐标(详解)

我们先通过简单的操作实现一下基础的UI跟随物体移动的功能,首先我们在场景中建立一个Canvas并且添加一个图片作为按钮,之后我们添加一个3d物体作为跟随目标,效果如下图所示我们配置一下UICanvas的属性,书写对应的自定义类并添加至UI物体 接下来我们书写对应的代码using UnityEngine;public class ClickItem : MonoBehaviour{ ...

2022-04-19 19:45:33 9430 3

原创 Unity世界坐标转换屏幕坐标(概览)

这些天做的项目中,有一个世界坐标转换屏幕坐标的功能,具体需求如下在3d场景中,部分物体可以进行点击交互,如果某个物体可以点击,就在屏幕上对应位置,添加一个Button,也就是把场景中物体的坐标转换到屏幕上,并添加对应的UI元素。经过多次测试,我发现影响坐标转换的无非是以下几点:1.游戏中的Canvas的模式通常我们可能会选用两种模式(1)如果一个Canvas只需要显示UI,不需要屏幕后处理效果,那么我们就会选用Overlay(2...

2022-04-15 12:10:56 14956 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除