- 博客(37)
- 资源 (5)
- 收藏
- 关注
原创 Unity中使用AssetPostprocessor对模型动画处理
在游戏开发的过程中,会遇到模型动作同事频繁的修改模型动画,比如可能某个动作不对了等等。而程序使用的动画clip是从模型中拷贝一份出来的,而在AssetPostprocessor中就可以做一些处理这样模型同事频繁修改动画的话,只需要重新导入一下就可以了。
2024-03-25 16:26:26
388
原创 Unity中UGUI中的PSD导入工具的原理和作用
先说一下PSD导入工具的作用,比如在和美术同事合作开发一个背包UI业务系统时,美术做好效果图后,程序在UGUI中制作好界面,美术说这个图差了2像素,那个图位置不对差了1像素,另外一个图大小不对等等一系列零碎的小问题,程序每次去改都会浪费大量的时间和精力,而PSD导入工具作用就可以解决这块问题,把美术在PhotoShop制作好的界面效果图复刻到Unity中。实现项目中可能会有更复杂的情况,一般是根据项目的规则去改动工具。
2024-03-17 10:13:43
927
1
原创 Unity使用Addressable热更新
Addressable是Unity推出的打ab包方案。不需要手动写AB打包脚手架了,不需要关心依赖,这也简化了ab热更新的流程。Addressable打包需要先将资源放入group中,按group来打包,每个group对应一个ScriptableObject的配置文件。bundle的粒度:同一Group可选择一起打包,完全分开打包和按标签打包;注意:实际项目中会更复杂,根据项目设定可能会有一些差异。-> 下载Catalogs文件;->获取更新资源大小;
2024-03-10 23:04:11
882
原创 Unity中关于继承ScriptableObject的类
在游戏中我们会经常看到一些.asset的配置文件,而这些文件就是用一个自定义的类去继承ScriptableObject来生成的。比如当前有一些零散特效需要预加载,这个时候我们可以声明一个类去保存这些零散特效对象的信息,然后统一读取加载。右击Create创建asset就好了。然后在游戏中加载读取就好了。
2024-03-06 19:29:51
572
原创 Unity游戏项目中的优化之摄像机视锥体剔除优化
在项目中一个完成的游戏场景一般都会有成千上百的物体,假如都去让GPU全部渲染一遍,那带来的消耗其实是挺大的,很多不在摄像机范围内的物体其实没有必要去渲染,尽管GPU自带剔除,但是如果从CPU阶段就提交给GPU指令——哪些物体出现在摄像机中,哪些不在,那场景的负担也会小很多,视锥体剔除就是处理这样的问题。说明一下,在这里只是简单实现,说一下大致思路,实际大型项目开发中会更复杂。
2024-03-01 22:47:09
1187
原创 Shader基础的简单实现(基于URP渲染)
URP(Universal Render Pipeline)通用渲染管线,是Unity在2019.3版本之后推出的一种新的渲染管线。传统的渲染管线在渲染多光源的情况,是把每一个主要光源都使用一个Pass来计算,然后再叠加,所以在计算多光源实时光时,消耗会比较大。URP中主光源只能是平行光、限定附加光源数量,然后在一个pass内处理完所有光源和光照的计算。对于Unity来说,cg和hlsl的语法基本上是一致的,URP中把使用的CGPROGRAM改为HLSLPROGRAM了。
2024-02-21 14:42:54
861
原创 UGUI中Text和TextMeshPro实现图文混排方式
两种方式各有各的好处,TMP功能挺强大的,但是DrawCall和堆内存仍然是一个令人头痛的问题。而自定义的实现方式还是可控的。
2024-02-01 22:34:25
753
原创 Unity中UGUI在Mask剪裁粒子特效的实现
在Unity使用Mask是剪裁不了粒子特效的,之前有想过RenderTexture来实现,不过使用RenderTexture不适合用于很多个特效,因为RenderTexture依赖Camera的照射,如果在背包中每种道具都有不同的特效,那使用RenderTexture则需要不同特效都用一个Camera。解决办法在粒子特效的shader中添加剪裁的代码。先看下剪裁不了的显示。
2024-01-23 19:22:18
1383
1
原创 Unity中图片合成图集Editor工具
一般图片合成图集用的是Unity自带的SpriteAtlas类添加一个Sprite集合,而所有图片保存在Sprite集合中,然后把Sprite通过Add方法添加到SpriteAtlas类,通过AssetDatabase.CreateAsset()方法来创建图集。
2024-01-14 21:18:49
955
原创 Unity AssetBundles资源管理和热更新
我这里是在打bundle的时候把对应的每个bundle对应的MD5值也给生成出来,MD5值有两个作用,第一个是确定文件被下载后是否下载完整(跟服务器进行比对),第二个就是跟本地的进行比对然后判断有哪些bundle是需要更新,哪些是新增需要下载的。一般会分为几个类型,比如把单个文件夹下的每个资源进行打bundle,把单个文件夹下的所有资源打成bundle,还有自定义bundle名字的类型啥的,具体根据实际项目类确定。只有跟服务器的版本号不一样才会进入下载和更新。
2024-01-13 17:17:20
603
原创 Unity关于动画混合树(Blend Tree)的使用
2D Simple Directional:最好在运动表示不同方向(例如“向前走”、“向后退”、“向左走”和“向右走”或者“向上瞄准”、“向下瞄准”、“向左瞄准”和“向右瞄准”)时使用。2D Freeform Directional:运动表示不同方向时,也使用此混合类型,但是您可以在同一方向上有多个运动,例如“向前走”和“向前跑”。使用混合树可以将多个动画混合在一起,例如在处理角色的移动中,走动画与跑动画切换的时候,在走动画与跑动画中生成多个过渡用的插值动画以达到平滑得切换的功能。
2023-12-30 21:55:27
1912
原创 Unity关于导入资源预处理设置
在Unity中导入大量的资源时,需要用代码把对应的设置给设置好,避免导入后再频繁的设置,提升一些开发效率吧。相关脚本需要继承AssetPostprocessor类进,在方法OnPreprocess进行设置就可以识别了。
2023-12-27 16:17:31
718
原创 Unity自带的NavMesh寻路组件
给移动物体添加对应的Nav MeshAgent组件,然后给玩家设置对应的目标就可以让移动物体寻路过去。给场景地图添加上NavMeshSurface组件,然后进行烘焙,烘焙出对应的场景地图文件。首先先把AI Navgation的package包给安装上。
2023-12-22 19:30:16
964
原创 Unity中使用FSM状态机处理AI敌人追击玩家的功能
实现的功能:AI在固定的路径上巡逻,当玩家靠近AI的视野范围时,AI会追击玩家。当玩家跑出AI的视野范围时,AI则会放弃追击继续回到原来的地方进行巡逻。参考资料:http://wiki.unity3d.com/index.php/Finite_State_Machine.效果:FSM基类:using System.Collections;using System.Collections.Generic;using UnityEngine;//状态转化的条件枚举public enum Tra
2020-07-28 10:38:24
1304
原创 游戏设计三大原则和常用设计模式
三大原则:单一职责原则游戏需要做的内容有很多,比如一个在Unity中开发一个塔防射击小游戏,其中将会有UI逻辑,游戏进度逻辑,消灭怪物逻辑,玩家逻辑等等。我们在设计软件的时候就是要讲他们的职责相互分离,当你能够想到一个类有多于一个职责时就可以考虑将其分离出来。封闭开放原则对于扩展是开放的,对于更改是封闭的。将不变的部分作为基类,在更改需求的时候选择增加扩展类而不是修改原有类。里式替换原则子类替换掉父类软件单位的功能不收到影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。抽象类
2020-07-28 01:16:29
1376
原创 Unity中大场景的优化技巧
最近在做项目的时候,可能美术模型不标准,加上只关心好看,不关心性能,因此到最后整个场景运行特别费劲,特别卡。而在没做任何优化处理的情况下,场景中的Batches已经达到了恐怖的地步。1.首先想到的是对场景进行批处理,批处理分为动态批处理和静态批处理,不了解批处理的可以看这个文章: 点击这里.做完批处理后,Batches的数量直接降到了4901个2.场景中有很多相同的物体,比如大量的树,草,山等…用GPU Instancing去处理。做完GPU Instancing处理的Batches的数量是38
2020-07-12 14:40:57
7659
原创 Unity中的监听事件消息的写法
在项目中用事件消息有许多好处,比如解耦合,结构清晰,一条消息对应多个事件等等…事件类型用枚举来区分。没有参数:添加事件监听代码: public static void AddListener(EventType type,CallBack callback) { if (!m_EventControl.ContainsKey(type)) { m_EventControl.Add(type, null); }
2020-07-05 17:06:08
2239
原创 Unity用Scoket进行服务端与客户端的连接(中控功能)
最近项目中用到了中控的连接,说下功能,以Unity的主场景为服务端,另外一个场景为客户端,服务端与客户端的连接用Socket进行连接。实现客户端发送效果给服务端, 当然服务端也可以发送消息给客户端。Server(服务端):得到本机的IP: public string GetIP(ADDRESSFAM Addfam) { if (Addfam == ADDRESSFAM.IPv6 && !Socket.OSSupportsIPv6) {
2020-06-29 15:59:22
1066
1
原创 Unity打包Android和配置Android SDK遇到的坑
SDK下载地址:https://developer.android.google.cn/studio1.开始安装完成弹出设置镜像 --------点Cancel 之后再安装。空工程设置:2.关于gradle文件报错:从这个网站下载,关闭Android Studio,然后替换C盘用户下的文件夹。...
2020-06-25 01:53:22
1029
原创 经纬度转化成Unity中的世界坐标
最近项目中用到了把现实中的经纬度转化成Unity中的地图上的经纬度。下面是代码:public class GisPointTo3DPoint : MonoBehaviour{ public static GisPointTo3DPoint Instance = null; public Transform BottomRightPoint; //Unity中右下点 (X正方向和Z轴的负方向之间) public Transform TopLeftPoint;//Unity中左
2020-06-20 14:54:14
4116
原创 Unity接入大量服务端数据的优化方法
前言在我们开发项目,有时会遇到要从服务端接入大量的数据,链接都是服务端处理出来的JSON数据,请求下来的数据放在字典中:由于要请求大量的数据,但是请求方法是一样的,而且多条数据刷新时间有可能会一样,所有数据用一个方法去请求是行不通的,会出现上一条数据没请求完,下一条数据就开始请求了,倒置数据错乱。错误请求方式:IEnumerator LoadData(string url,Dictionary<string, object> lampDic) { UnityWeb
2020-06-01 18:06:17
1095
转载 Unity中的三种资源加载和卸载
前言内容转载自: https://www.cnblogs.com/zhoujiangyue/articles/7066070.html.Unity中三种资源加载方式:1.静态引用。具体操作:创建public变量,把文件挂到物体上,在Inspector里把相应资源给public变量,用的时候instantiate或者直接用。2.Resources.Load。加载Resources文件夹下的资源,加载后instantiate.3.AssetBundle.Load。加载打包后的资源。前两种资源加载方式
2020-05-24 16:20:54
2754
转载 Unity内存优化-------GC优化
**Unity内存优化---------------GC优化**介绍:在游戏运行的时候,数据主要存储在内存中,当游戏的数据在不需要的时候,存储当前数据的内存就可以被回收以再次使用。内存垃圾是指当前废弃数据所占用的内存,垃圾回收(GC)是指将废弃的内存重新回收再次使用的过程。Unity中将垃圾回收当作内存管理的一部分,如果游戏中废弃数据占用内存较大,则游戏的性能会受到极大影响,此时垃圾回收会成为游戏性能的一大障碍点。 前言感谢博客主提供思路,内容修...
2020-05-23 10:20:43
588
原创 Unity中UGUI轮播Image
思想:把一组图片放到Scroll View下,把超出屏幕的Image塞到最后,然后继续续播放。找的Gif制作软件有水印,将就着看…看下去掉mask后的效果:废话不多说,放代码:public abstract class PictureRotationUI<T> : MonoBehaviour where T:MonoBehaviour{ private Transform content1; private Transform startPos; priva
2020-05-21 14:35:23
1034
原创 利用XLua写前端逻辑
思路:新建一个通用的LuaCustomCommon类挂在需要用lua实现逻辑的prefab上。通过这个组件关联名为Panel的lua脚本,生成对应的LuaTable,通过这个组件为lua赋值对应prefab的属性,并在Start(),Update()等生命周期方法中通过LuaTable.Get(“MethodName”);调用lua中对应的方法。在lua中使用transform:Find(“name”)来关联prefab中的组件,通过这个LuaCustomCommon类就可以把前端的逻辑放在Lua脚本中。
2020-05-17 10:39:31
636
原创 Unity中多个对象池使用与管理
单例版本类:using System;using UnityEngine;using System.Collections;using System.Text; //单例模板public abstract class SingleTemplate<T> : MonoBehaviour where T:MonoBehaviour//T泛型继承单例模板的类最终继承哪,...
2020-04-23 19:35:18
1028
原创 Unity中的签到系统
实现功能:正常在游戏中签到,并把剩下的倒计时给显示出来。时间是变化的,没有用gif是显示,将就着看… 废话不多说,上代码:public class SignPanelUI : MonoBehaviour{ public const string SignNumPrefs = "SignNum";//领取次数的字符串 public const string Si...
2020-04-08 15:30:37
3097
6
原创 Xlua的基础案例学习
xlua的官网:https://github.com/Tencent/xLua.xlua的说明:http://gad.qq.com/article/detail/42303.自定义加载Lua文件:public byte[] Loader(ref string filePath) { string path = Application.streamingAssetsPa...
2020-04-07 17:21:52
348
原创 Unity2018中iOS集成FaceBook打点和Google中的Abs广告一起接入
先说一下实现的功能,iOS集成的FaceBook主要用于计算游戏的在FaceBook中的下载量、推广量等等。facebook的IOS集成官网网址(需要翻墙): https://developers.facebook.com/docs/app-events/getting-started-app-events-ios.1.首先去申请Facebook的ID(这个后面会用到!)下面这里进去。...
2020-01-10 12:10:32
1345
原创 iOS打包钥匙串下载到本地和配置证书生成
钥匙串在控制台打开钥匙串。电子邮件可以填一样的。点继续然后把文件导出到桌面上去。打开itunes connect官网,点击左上角+号,如果没有文件就点击创建,有就会进到下一个页面。选择圈中的点continue。(我这边是已经创建了,所以不可选)点进去后选择ChooseFile---->选择我们钥匙串中保存在桌面的文件。然后选择右上角continue,然后下载保存到桌...
2020-01-04 16:24:05
1098
1
原创 Unity中生成实现热力图
网上搜了一下生成热力图的方法,发现说的比较复杂,这里提供一个拥shader+C#生成热力图的方法,效果如下:工程源码:https://download.youkuaiyun.com/download/qq_38139885/12065961....
2020-01-02 12:20:39
4170
原创 Unity2018中的ShaderGraph基础
链接:https://blog.youkuaiyun.com/yangxuan0261/article/details/89842033
2019-12-28 11:57:10
704
原创 Unity中安卓和IOS读取Excel表
**#Unity快速读取Excel表**项目开发过程中,策划们可能会配置很多的数据放在不同的Excel当中,如商城物品等,那么我们程序就需要通过读取Excel的内容,已供程序使用。下面是读取的Excel表内容:首先在Unity中导入以下dll文件:dll下载地址:链接:https://pan.baidu.com/s/1iCmAn1sHpdzeaZY1u1x4Sw提取码:njvm...
2019-12-16 11:13:27
3142
12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人