自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Unity性能优化篇(十四) 其他优化细节以及UPR优化分析器

2. **使用AssetBundle或者Addressables加载的资源,如果不使用,要记得卸载它们,否则会造成内存泄漏。** 不用的资源要释放掉,不用的引用类型的变量也要赋值为null,不要让它们一直占着内存中。 3. **加载资源时尽量使用异步加载。** 4. **频繁创建和销毁对象,可以使用对象池。** 5. **切换场景时,旧的场景要释放掉**,不用的资源也可以考虑释放掉,也可以考虑用System.GC.Collect来进行一次垃圾回收

2024-04-03 14:36:20 1466

原创 Unity性能优化篇(十三) 物理优化

Edit——Project Settings——Player——勾选Optimization下方的Prebake Collision Meshes,可以提高碰撞的效率,但是构建游戏的时间会增长。1.尽量使用简单的碰撞器进行碰撞检测,如球体碰撞器、盒子碰撞器、胶囊体碰撞器,少用网格碰撞器等复杂的碰撞器(如下图)。Edit——Project Settings——Time——稍微调大Fixed Timestep,这样可以稍微提升游戏性能,但是物体的运动可能会出现问题。使用代码创建复合碰撞器。

2024-04-03 14:09:53 787 1

原创 Unity性能优化篇(十二) 音频优化之导入音频后的属性设置

**Unity支持后缀为.wav、.ogg、.mp3的音频文件,但建议使用.wav,因为Unity对它的支持特别好。注意:Unity在构建项目时总是会自动重新压缩音频文件,因此无需刻意提前压缩一个音频文件再导入Unity,因为这样只会降低该音频文件最终的质量。**

2024-03-07 17:36:24 952

原创 Unity性能优化篇(十一) 动画优化

Cull Update Transformations表示如果该动画不可见,则不会渲染该动画,但是依然会根据该动画的播放来改变游戏对象的位置、旋转、缩放,这样是常用的选项。Cull Completely表示完全不会播放该动画,不但不会渲染该动画,而且也不会改变游戏对象的位置、旋转、缩放。3.对于Animator组件,可以使用Animator.StringToHash方法获得指定字符串的哈希值,再把它作为参数传入Animator型对象.GetXXX方法和Animator型对象.SetXXX方法中进行使用。

2024-03-07 17:14:12 629

原创 Unity性能优化篇(十) 模型优化之网格合并 Easy Mesh Combine Tool插件使用以及代码实现网格合并

把多个模型的网格合并为一个网格。可以使用自己写代码,使用Unity自带的CombineMeshes方法,也可以使用资源商店的插件,在资源商店搜Mesh Combine可以搜索到相关的插件,例如Easy Mesh Combine Tool等插件。5.打开插件 Window–>Easy Mesh Combine Tool 选中需要合并的物体点击插件面板的Make Group and Combine进行网格合并。1.打开unity资源商店 搜索Mesh Combine 添加插件到我的资源。3.下载完毕点击导入。

2024-03-06 18:30:10 903 1

原创 Unity性能优化篇(九) 模型优化之LOD技术概述以及操作方法

PS:如果这个物体需要用到碰撞体 那么可以把三个物体上的碰撞器删除 在父物体上添加碰撞体(并设置好碰撞范围) 这样能大幅度减少多余碰撞器带来的消耗。可使用Unity自带的LOD Group组件,并根据项目的情况来调整该组件的属性。1.LOD技术可以根据摄像头远近来显示不同精度的模型(例如吃鸡游戏 随着跳伞高度 来显示下面树木以及建筑的模型精度)1.首先创建一个空物体 在空物体下面放三个不同精度的模型(例如三颗不同精度的树木)3.点击LOD0设置摄像机距离最近需要显示的模型(距离最近显示最高精度的)

2024-03-06 10:58:10 930 1

原创 Unity性能优化篇(八) 导入的模型网格优化设置

2.设置Anim.Compression可以调整动画的压缩方式,Off表示不压缩动画,这样动画文件可能会占用较大的空间,但是在运行时不会有任何信息损失,Keyframe Reduction表示使用关键帧算法来压缩动画,这样会显著减小动画文件的大小,同时保持相对较高的动画质量,Optimal表示会尽可能高地压缩网格,但是这样也会导致压缩时间增加。1.在Model选项卡,启用Mesh Compression可以压缩模型,压缩程度越高,模型精度越低,但是模型也会节省一些空间。

2024-03-06 10:31:32 1157

原创 Unity性能优化篇(七) UI优化注意事项以及使用Sprite Atlas打包精灵图集

如果UI中一定要用到很多张完全透明的图片,则建议把这些完全透明的图片由单独的摄像机进行渲染,且这些UI不要叠加到场景摄像机的渲染范围内。如果多个UI有重叠的部分,则会稍微增加一些额外的计算和渲染的开销。**注意事项:**参加打包图集的图片需要进行初略压缩 可以自己使用压缩工具 或者去图片压缩网站https://tinypng.com/5.UI的文字使用TextMeshPro比使用Text的性能更好。1.尽量避免使用IMGUI(OnGUI)来做游戏时的UI,因为IMGUI的开销比较大。

2024-03-05 11:42:45 936

原创 Unity性能优化篇(六) 光照优化以及点光源的烘焙步骤

5.确保Baked Globai Illumination勾选状态 再取消Auto Generate 就可以点击旁边Generate Lighting进行点光源烘焙。3.打开Window–>Rendering–>Lighting 如果Lighting Settings里的文件为空就New一个新的出来。4.给需要参与烘焙的物体设置状态(勾选Contribute GI) 设置后这个物体就是静态物体(无法移动旋转缩放)烘焙后(可以看到Batcges和SetPass Calls 都有很明显的优化效果)

2024-03-05 09:54:51 302

原创 Unity性能优化篇(五) 遮挡剔除

启用后,可以在Scene窗口看到黄色区域,当摄像机在这个黄色区域内,遮挡剔除才可能会生效,摄像机离开这个区域,则遮挡剔除就会失效。我们还可以看到灰线,这些灰线指示摄像机当前位置所对应的遮挡剔除数据中的单元格以及当前单元格中的细分。1.在物体的Static里勾选 (遮挡物体)Occluder Static 和 (可被遮挡物体)Occludee Static选项。在Occlusion Culling——Bake里进行烘焙遮挡剔除范围(烘焙后才会生效, 每次修改场景后需要重新进行烘焙)耐心等待烘焙进度完成…

2024-03-04 10:33:47 761

原创 Unity性能优化篇(四) GPU Instancing

一般来说,当场景中有大量重复的网格实例时,可以尝试启用GPU Instancing。例如场景中有大量树木、草地、石块等,这些实例具有相同的网格和材质,只是位置、颜色等属性稍有差异,那么启用GPU Instancing或许能够显著提高性能。启用GPU Instancing,我们可以选中一个材质,然后在Inspector窗口勾选Enable GPU Instancing。使用GPU Instancing往往能减少CPU和GPU的开销,提升游戏性能,但同时也会占用一定的内存。3、网格的顶点布局和着色器必须相同。

2024-03-01 11:28:45 716

原创 Unity性能优化篇(三) SRP/URP动态合批开启与注意事项

然而,如果你的着色器使用顶点位置、顶点法线、UV0、UV1和顶点切线,那么Unity只能批处理180个顶点。动态合批也叫动态批处理,对移动的物体使用动态合批后,则Unity不会一个个绘制它们,而是把它们合并为一个批次(Batch),再由CPU把它们一次性提交给GPU进行处理,这样可以减少Draw Call带来的性能消耗,从而提高性能。2、如果GameObjects使用不同的材质实例,Unity就不能将它们批处理在一起,即使它们本质上是相同的。3、带有光贴图的游戏对象有额外的渲染参数。

2024-03-01 11:21:37 1047

原创 Unity性能优化篇(二) 静态合批步骤与所有注意事项\游戏运行时使用代码启动静态合批

9、要批处理在一起的网格使用相同的顶点属性。例如,Unity可以将使用顶点位置、顶点法线和一个UV的网格与另一个UV进行批处理,但不能将使用顶点定位、顶点法线、UV0、UV1和顶点切线的网格进行批处理。2.勾选需要合批的静态物体上的Batching Static项,勾选后此物体下的所有子物体都默认参与静态合批(勾选后物体不能进行移动/旋转/缩放操作, 脚本也控制不了这些操作)即使静态合批成功,合出来的每个批次可以包含的网格顶点数是有限的,最多是64000个顶点。对指定的根物体的所有子孙物体进行静态合批。

2024-03-01 10:53:30 659

原创 Unity性能优化篇(一) Profiler.BeginSample和Profiler.EndSample的作用

Profiler.BeginSample和Profiler.EndSample的作用。在性能分析器Profiler的CPU Usage里面查看占用和消耗。

2024-03-01 09:11:48 353

原创 unity Socket(局域网内才能连接上的)

需要自己写服务端的局域网内使用的Socket。

2022-09-15 16:21:11 541 1

原创 unity 连接WebSocket

unity 连接WebSocket

2022-09-15 16:11:22 3448

原创 unity里现实摄像头运镜并LookAt到物体前方 基于Dotween

1.基于Dotween 为了避免使用Update或循环带来的每帧多余消耗2.这里控制的是主相机到一个物体的运镜

2022-06-17 11:55:57 2122

原创 unity 加载本地资源的几种方式

1.Resources:Resources.Load<T>(path);2.AssetDatabase:AssetDatabase.LoadAssetAtPath<T>(path);3.WWW:public static IEnumerator WWWLoad(string url){ WWW www = new WWW(url); yield return www;}4.UnityWebRequest: public static IEn

2022-03-17 10:43:07 5006

原创 unity 保存数据到本地的方法

保存到本地 离线可拿取PlayerPrefs.SetInt();//保存整型数据PlayerPrefs.SetFloat();//保存浮点型数据PlayerPrefs.SetString();//保存字符串型数据PlayerPrefs.GetInt();//读取整型数据PlayerPrefs.GetFloat();//读取浮点型数据PlayerPrefs.GetString();//读取字符串型数据...

2022-03-17 10:36:57 6405

原创 unity里的截图方式

1.使用Application类下的CaptureScreenshot方法。全屏截图Application.CaptureScreenshot(“Screenshot.png”, 0);2.使用Texture2d 范围截图/// <summary> /// Captures the screenshot2. /// </summary> /// <returns>The screenshot2.</returns> /// <par

2022-03-17 10:35:12 3500

原创 C#类的拷贝

/// <summary>/// 深拷贝接口/// </summary>interface IDeepCopy{ object DeepCopy();}/// <summary>/// 浅拷贝接口/// </summary>interface IShallowCopy{ object ShallowCopy();}class A : IDeepCopy, IShallowCopy{ struct Str

2022-03-17 10:32:52 1101

原创 unity的消息收发机制(观察者模式)

using SpatialMap_SparseSpatialMap;using System;using System.Collections;using System.Collections.Generic;using System.Linq;using UnityEngine;using UnityEngine.UI;public static class EventMsgMgr{ public delegate void EventFunc(params object[].

2022-03-17 10:29:29 2488

原创 C#获取一个时间区间

最近需要用到这个功能 所以简单记录一下 拿到开始时间 var startTime = (double)Time.time; //await *********;等待过程 //最后结果 startTime = (double)Time.time - startTime;

2022-03-17 10:25:36 351

原创 unity C#解析本地.json文件

本地路径+文件名称加后缀 StreamReader streamReader = new StreamReader(Path + JsonName.json); string str = streamReader.ReadToEnd();

2022-03-17 10:20:49 2951 1

原创 unity的简化型EventTrigger

using System;using UnityEngine;using UnityEngine.EventSystems;using UnityEngine.UI;/// <summary>/// 简化型EventTrigger/// </summary>public class EventTriggerListener : EventTrigger{ public Action onClick = null; public Action onD

2022-03-11 18:29:52 965

原创 unity 实现一个视频播放暂停 slider滑动进度 的播放视频模块

上代码using System;using System.Collections;using System.Collections.Generic;using System.Threading.Tasks;using UnityEngine;using UnityEngine.EventSystems;using UnityEngine.UI;using UnityEngine.Video;public class VideoView : MonoBehaviour{ p...

2022-03-11 18:17:42 2843 2

原创 unity里实现 GET POST PUT DELETE 请求服务器方法

最近需要 独立开发一个项目 并且这个项目用到了GET POST PUT DELETE 这四种请求服务器方法,经过研究之后得出了下面代码using Newtonsoft.Json.Linq;using System;using System.Collections;using System.Collections.Generic;using System.IO;using System.Text;using System.Threading.Tasks;using UnityEngine;

2022-03-11 18:04:54 2122

原创 重写Slider监听开始拖动跟拖动结束功能

using UnityEngine.UI;using UnityEngine.EventSystems;using System;public class MySlider : Slider, IBeginDragHandler, IEndDragHandler{ public Action beiginDrag = null; public Action endDrag = null; public void OnBeginDrag(PointerEventData .

2022-03-11 17:50:28 680

原创 unity创建文件夹/文件 删除路径下所有文件

//判断路径/文件夹是否存在 if (!Directory.Exists(path)) Directory.CreateDirectory(path);//不存在则创建//创建文件var fs = File.Create(path + "/" + downloadVideoName + ".mp4"); //path为你想保存文件的路径。downloadVideoName 为文件名 fs.Write(www.bytes, 0, www...

2022-03-11 17:45:51 3324

原创 unity 获取本地视频/下载网络视频

using System.Collections;using System.IO;using UnityEngine; public class DownVideo : MonoBehaviour{ FileStream fs; string path = null; public VideoPlayer video; void Awake() { StartCoroutine(DownOrLoadVideo("视频名字", "http

2022-02-24 11:12:44 5430

原创 让进度条颜色渐变的shader

让进度条颜色渐变的shader1.先看效果 我做的是根据蓝色2.先写shader代码Shader "Unlit/TheGradientShader"{ Properties { _MainTex ("Texture", 2D) = "white" {} _TexTintColor("Texture Tint Color", Color) = (1,1,1,1) _PlaneColor("Plane Color", Color) = (

2022-01-14 14:05:41 2741

原创 补充一个基于UI Button滑动模型+缩放的方法

1.首先需要先定义一个继承于EventTrigger的简化类 用于挂载在需要使用的button按钮之上2.这个类可以全局通用的 主要是重写了EventTrigger里的各种事件 方便外面监听 这个类同时也有监听滑动/按下/抬起/自己写的长按等等一些事件using System;using UnityEngine;using UnityEngine.EventSystems;using UnityEngine.UI;/// <summary>/// 简化型EventTrigge

2021-12-29 11:02:26 702

原创 shader入门篇 渲染流程概念(二)

1.什么是流水线?一种工业上的生产方式, 指一个生产单位只专注某一部分的工作, 以提高工作效率与产量2.什么是渲染流水线?应用程序阶段—>几何阶段{顶点着色[1.模型变换2.视图变换3.定点着色]—>几何曲面细分着色—>裁剪[1.投影变换(观察空间:近裁剪面/远裁剪面)–2.剪裁(齐次裁剪空间)]—>屏幕映射[视角变换]}—>光栅化阶段{三角形设置: 拼成三角形面片—>三角形遍历—>片段着色—>混合[1.alpha测试2.模板测试3.深度测试4.混合]

2021-09-26 15:53:39 284

原创 shader入门篇 图形学发展历史 (一)

今天开始学习shader 首先推荐一个很好的 学习网站 ShaderToy祝学习shader之路马到成功.计算机图形学的背景知识:计算机研究图形方面的学科/CG电/CG动画—>使用数学算法将二维或者三维图形转化为计算机显示器的栅格(像素)形式的学科计算机图形学: 从结构特征转换为图像信号计算机视觉学: 从图像信号转换为结构特征建模: 传统3D建模–雕刻软件—扫描建模—程序化建模渲染: 离线渲染(通常渲染一帧时间较长, 为了追求真实感而不计渲染成本) – –实时渲染(实时渲染的本质就是图

2021-09-26 15:37:52 292

原创 C# 根据出生日期解析 对应星座

日期的格式 2021-9-26//获取日期方式 一般写在需要的类里string test=GetConstellation("2021-9-26"); string GetConstellation(string times) { string[] sArray = times.Split('-');//由于日期格式有 - 所以切割一下 int month = int.Parse(sArray[1]);//拿到月

2021-09-26 12:20:34 1086

原创 C#反射类读取配置表 PropertyInfo

类似这样很复杂的配置表 解析起来需要很长篇的代码, 但是作为一个程序肯定不能让自己的代码这么长篇大论 所以我们需要用很短的代码来解析 读取里面全部数据 var cfgProperty = ConfigMgr.Ins.GetTreasureTableConfigMap () [id];//这是拿到了这个表 List<TreasureTable> lists = new List<TreasureTable> ();//用来存取新的结构 的类 .

2021-06-16 15:24:29 234 1

原创 unity C# 打乱列表

list = jlist.OrderBy(c => Guid.NewGuid()).ToList();

2021-06-07 16:46:41 481 1

原创 unity 按钮监听长按

/// <summary> /// 检测长按 /// </summary> private async ETVoid AsyncMouseDown() { m_timer = 0; isDrag = false; cTime = TimeHelper.ClientNowSeconds(); oldPosition = Inp.

2021-06-07 14:56:31 878

原创 unity C# 拿到 年月日 星期几

//部分设备 星期几会是英文descriptionText.text = descriptionText.text.Replace("X",$"{DateTime.Now.ToLongDateString().ToString()},{System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetDayName(DateTime.Now.DayOfWeek)}");//保证英文descriptionText.text = descr

2021-06-07 14:36:29 375

原创 unity c#获取字符串所占字节

private void SetLimit (string str) { char [] chars = str.ToCharArray (); int num = 0; if ( str != null ) { for ( int i = 0 ; i < chars.Length ; i++ ) {

2021-04-21 14:39:45 372

空空如也

空空如也

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

TA关注的人

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