解决Timeline暂停时坐标重置问题 网上找了好多答案,基本上都是复制粘贴,然后还没啥卵用…https://blog.csdn.net/weixin_38239050/article/details/79902799这篇文章是有效果的。总结:Animator勾选这里,覆盖掉角色的位移,就不会在继续timeline的时候重置位置了...
优化Lua使用Vector3产生GC Vector3是结构体,在C#中本不会产生GC。但是由于Vector3属于C#的结构体,当Lua使用Vector3时就会产生GC。通常在使用摇杆时,就会生成许多的Vector3对象,用于设置移动的位置与方向。我们可以通过在lua中自定义Vector3以为缓存生成出来的Vector3(因为方向值基本上就那么多个,缓存以避免重复生成),来达到减少GC的目的local Vector3 = {}setmetatable(Vector3, __UnityEngine.Vector3)-- 创建Vector
C# List<T>使用优化 List在我们的开发过程中经常会用到,但其实List的数据插入与删除操作是非常耗时的。关于删除的优化:我们可以先将List中需要删除的元素与最后一个元素置换位置,然后再调用删除操作测试代码如下...
解决UnityUI拼接接缝问题 美术同学给我们出的图经常可能会是长条的,如133450这种。为了优化内存,通常我们会限制UI图集的大小为10241024。那么对于这种图片我们通常会把图片拆成两块,带来的问题就是美术给的图片明明是无缝的,但是到了UI上却能很明显的看到一条缝隙对于这种问题的解决办法,我们可以把UI的FilterMode设置为point对于FilterMode的三种模式的解释:Point单点插值,纹理将变得块状化(blocky up close);Bilinear双线性插值,纹理将变得模糊(blurryup c
TCP三次握手,四次挥手 转载自https://blog.csdn.net/mary19920410/article/details/58030147TCP报文是TCP层传输的数据单元,也叫报文段。第一段32位数据中前16位为源端口号,后16位为目的端口号第二段为随机生成的32位序号,表明客户端发给服务端的报文序号SEQ第三段为确认序号ack,对上一条发送的信息进行确认第四段如此表示,其中缺人序号ACK只有一位0/1,表示SYN是否发起新连接只有一位0/1,FIN结束一个连接只有一位0/1TCP三次握手:第一次客户
C#等待多线程完成(await与async) C#优雅的完成多线程回调(await与async)遇到的问题遇到的问题我在写一个关于从资源服下载网络资源的代码时遇到一个问题,即我们无法在一个方法块中完成我们想要做的所有逻辑,即请求下载,资源加载完成逻辑。我们通常的处理方式为:调用资源下载接口,传递资源加载成功回调方法当资源下载完成后,再去资源加载回调中去做资源处理。当我们完成一个需求,需要下载多个资源时,回调方法将会越来越多。我们的代码也将越来越复杂。将会产生如下的狗屎代码:我们不能够直接得到文件,只能在此处请求资源下载,然后再将逻辑放
Unity让对象看向目标方向 /// <summary> /// 设置对象的前方向 /// </summary> /// <param name="vForward"></param> public void SetForward(Vector3 vForward) { Root.transform.forward = vForward; }/// <summary> /// 获得前置向量 //
Unity在移动端纹理压缩格式选择 Unity在移动端纹理压缩格式选择转载自:https://mp.weixin.qq.com/s/DnjBUqK5MtJyqucHxOL57QUnity几种ETC纹理压缩格式:RGB ETC1 4 bit :4 bits/pixel,对RGB压缩比6:1,不支持Alpha,绝大部分安卓设备都支持。RGB ETC2 4 bit :4 bits/pixel,对RGB压缩比6:1。不支持Alpha,ETC2兼容ETC1,压缩质量可能更高,但对于色度变化大的块误差也更大,需要在OpenGL ES 3.0和Op
优化UI点击事件需要加UI组件问题 一般我们UI点击事件都需要有类似Image,Text这样的控件。如果我们需要做一个底板可以被点击时,一般的做法就是放一个Image控件上去,然后Sprite设置为空。这种做法会给我们的UI增加一次drawcall。在UI的继承关系中我们发现,带点击事件的UI都继承自Graphic。于是我想通过给空物体增加Graphic做点击事件监听以达到优化性能的目的。这里,我发现代码中强行增加Graphic这个组件会报错不能添加脚本行为图形。脚本类不能是抽象的!那么只需要新建一个类继承Graphic,里面什
使用位存储地图信息,优化地图阻挡数据 地图阻挡数据优化思路写入操作读取操作思路一般我们的地图阻挡是否可以行走都以01进行区分,0为可走,1为阻挡。在地图编辑器中,我们会将地图信息存在地图资源文件mapBlock.dat文件中在最开始我们使用的是直接以int类型进行存储,十个场景的阻挡信息内存占用达到了15M。目前,我们已知int占用4个字节,一个字节占用8个位。我们0和1可以用一个位进行存储。那么,原本我们一个int使用了32个字节但是只存储了1个数据,内存占用达到15M,使用位进行存储后,我们可以压缩内存到0.46M。我们最小
设计模式【2】装饰模式 装饰模式思想一般实现给人类增加衣服的写法装饰模式实现思想在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责或者 处理那些可以撤销的职责的时候可以使用。在Unity中的组件就是使用了这种设计模式实现的组件扩展。一般实现给人类增加衣服的写法这样的实现方式当我要再加一顶帽子的时候必须要去修改Persion类,违背了开放-封闭原则public class Persion{ pub...
程序设计三大原则 单一职责原则软件需要做的内容有许多,比如一个在Unity中开发一个俄罗斯方块小游戏。其中将会有UI逻辑,游戏进度逻辑,消除方块逻辑,方块移动逻辑等等。我们在设计软件的时候就是要讲他们的职责相互分离,当你能够想到一个类有多于一个职责时就可以考虑将其分离出来。开放-封闭原则对于扩展是开放的,对于更改是封闭的。将不变的部分作为基类,在更改需求的时候选择增加扩展类而不是修改原有类。依赖倒转原则...
设计模式【1】简单工厂模式 简单工厂设计模式思想代码算法基类加法减法运行总结思想简单工厂设计模式就是为了能够根据不同情况动态获取到需要的类型在本次将会演示一个计算器的功能我们无法知道用户在程序中会输入哪些字符,是±*/或者其他,但是我们能确定的是用户需要通过输入将两个值进行运算,得到一个返回结果。那么在此处我们就可以创建一个算法基类,有设置值并计算后返回值的方法,值1与值2两变量。然后加减乘除类继承该类,在运行程...
Unity内存优化——资源方向 Unity内存优化——资源方向前言资源内存占用纹理纹理尺寸Mipmap功能Read & Write网格Normal、Color和Tangent引擎模块自身占用WebStream和SerializedFile托管堆内存占用总结前言内容转载自博客:https://www.jianshu.com/p/48f1a1b7949e资源内存占用一款游戏项目的资源主要可分为如下几种:纹理(Text...
隐藏界面最佳解决方案 隐藏界面最佳解决方案隐藏界面方案最优解决办法隐藏界面方案1.SetActive优点:方便快捷缺点:第一,Disable掉的物体上面的脚本也不运行了,而很多时候我们需要那个脚本运行。这样就不能用挂在自己身上脚本把自己SetActive(true)或者SetActive(false)。如果把自己的引用给另外一个脚本来对自己SetActive(true)或者SetActive(false),...
Unity三种加载方式详解 Unity三种加载方式详解前言有三种资源加载方式:资源的加载与卸载一般的加载流程:一般的释放流程:一个容易出错的例子:前言感谢转载自博客主周小菲的博客,原贴地址:http://www.cnblogs.com/zhoujiangyue/articles/7066070.html有三种资源加载方式:1.静态引用。具体操作:创建public变量,把文件挂到物体上,在Inspector里把相应资源...
Unity内存优化 —— GC详解 Unity内存优化 —— GC详解前言简介Unity内存管理机制简介堆栈内存分配和回收机制堆内存分配和回收机制垃圾回收时的操作何时会触发垃圾回收GC操作带来的问题分析GC带来的问题分析堆内存的分配接下来用两个简单案例阐述值类型和引用类型的回收机制利用profiler window 来检测堆内存分配:降低GC的影响的方法减少内存垃圾的数量清除链表对象池定时执行GC操作前言感谢博客主提供思路,内容...
XLua运行时热更新原理与实现 Lua热更新原理前言基本知识最基本的热更新的方式(不可用)__G完整热更新的方法前言感谢提供思路两个博客主以下是博客地址:https://gameinstitute.qq.com/community/detail/120538https://www.jianshu.com/p/7b8ae23ecd81基本知识我们在require一个Lua文件的时候是将Lua文件加载到package.l...