首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Unity3D性能优化总结[通俗易懂]

一、程序方面   01、务必删除脚本中为空或不须要的默认方法;   02、仅仅在一个脚本中使用OnGUI方法。   03、避免在OnGUI中对变量、方法进行更新、赋值,输出变量建议在Update内。   04、同一脚本中频繁使用的变量建议声明其为全局变量,脚本之间频繁调用的变量或方法建议声明为全局静态变量或方法;   05、不要去频繁获取组件,将其声明为全局变量。   06、数组、集合类元素优先使用Array,其次是List;   07、脚本在不使用时脚本禁用之,须要时再启用;   08、能够使用Ray来取代OnMouseXXX类方法。   09、须要隐藏/显示或实例化来回切换的对象,尽量不要使用SetActiveRecursively或active,而使用将对象远远移出相机范围和移回原位的做法。   10、尽量少用模运算和除法运算,比方a/5f,一定要写成a*0.2f。   11、对于不常常调用或更改的变量或方法建议使用Coroutines & Yield;   12、尽量直接声明脚本变量。而不使用GetComponent来获取脚本; iPhone   13、尽量使用整数数字。由于iPhone的浮点数计算能力非常差;   14、不要使用原生的GUI方法。   15、不要实例化(Instantiate)对象,事先建好对象池。并使用Translate“生成”对象; 二、模型方面   01、合并使用同贴图的材质球。合并使用同样材质球的Mesh;   02、角色的贴图和材质球仅仅要一个。若必须多个则将模型离分离为多个部分。   02、骨骼系统不要使用太多。   03、当使用多角色时,将动画单独分离出来;   04、使用层距离来控制模型的显示距离。   05、阴影事实上包括双方面阴暗和影子,建议使用实时影子时把阴暗效果烘焙出来。不要使用灯光来调节光线阴暗。   06、少用像素灯和使用像素灯的Shader;   08、假设硬阴影能够解决这个问题就不要用软阴影。而且使用不影响效果的低分辨率阴影;   08、实时阴影非常耗性能,尽量减小产生阴影的距离;   09、同意的话在大场景中使用线性雾,这样能够使远距离对象或阴影不易察觉,因此能够通过减小相机和阴影距离来提高性能。   10、使用圆滑组来尽量降低模型的面数;   11、项目中假设没有灯光或对象在移动那么就不要使用实时灯光;   12、水面、镜子等实时反射/折射的效果单独放在Water图层中,而且依据事实上时反射/折射的范围来调整。   13、碰撞对效率的影响非常小,但碰撞还是建议使用Box、Sphere碰撞体。   14、建材质球时尽量考虑使用Substance;   15、尽量将全部的实时反射/折射(如水面、镜子、地板等等)都集合成一个面;   16、假反射/折射没有必要使用过大分辨率,一般64*64就能够,不建议超过256*256;   17、须要更改的材质球。建议实例化一个,而不是使用公共的材质球;   18、将不须射线或碰撞事件的对象置于IgnoreRaycast图层;   19、将水面或类似效果置于Water图层   20、将透明通道的对象置于TransparentFX图层;   21、养成良好的标签(Tags)、层次(Hieratchy)和图层(Layer)的条理化习惯,将不同的对象置于不同的标签或图层,三者有效的结合将非常方便的按名称、类别和属性来查找;   22、通过Stats和Profile查看对效率影响最大的方面或对象。或者使用禁用部分模型的方式查看问题究竟在哪儿;   23、使用遮挡剔除(Occlusion Culling)处理大场景。一种较原生的类LOD技术。而且可以“切割”作为总体的一个模型。 三、其他   场景中假设没有使用灯光和像素灯,就不要使使用方法线贴图。由于法线效果仅仅有在有光源(Direct Light/Point Light/Angle Light/Pixel Light)的情况下才有效果。

02

Android开发笔记(八)神奇的shape

shape意即形状,是Android中描述规则几何图形的定义,ShapeDrawable其实就是Drawable的一个子类。用好shape,可以让APP页面不再呆板;用好shape,可以节省不小的美工工作量。 shape的定义文件是xml,以shape元素为根节点。根节点下定义了六个节点:corners(圆角)、gradien(渐变)、padding(间隔)、size(尺寸)、solid(填充)、stroke(描边),各节点的属性值主要是各种长宽、半径、角度,以及颜色。这些定义很简单,多用几遍就记住了,不过网上的介绍大多不全,所以博主在下面就详细介绍各节点的属性用法。   shape(根节点) android:shape: 字符串类型,图形的形状。为rectangle表示矩形(默认),为oval表示椭圆(此时corners节点将失效),为line表示直线(此时必须设置stroke节点,不然会报错),为ring表示圆环。 下面的属性只有在android:shape="ring"时可用: android:innerRadius: 像素类型,内圆的半径。 android:innerRadiusRatio: 浮点型,以环的宽度比率来表示内圆的半径。例如,如果android:innerRadiusRatio="3",表示内圆半径等于环的宽度(即外圆直径)除以3。如已设置android:innerRadius则不需设置本属性 android:thickness: 像素类型,环的厚度 android:thicknessRatio: 浮点型,以环的宽度比率来表示环的厚度。例如,如果android:thicknessRatio="2",那么环的厚度就等于环的宽度除以2。如已设置android:thickness则不需设置本属性 android:useLevel: 布尔类型,如果当做是LevelListDrawable使用时值为true,否则为false(一般情况必须设置为false,不然ring无法显示)。   corners(圆角) android:bottomLeftRadius: 像素类型,左下圆角的半径 android:bottomRightRadius: 像素类型,右下圆角的半径 android:topLeftRadius: 像素类型,左上圆角的半径 android:topRightRadius: 像素类型,右上圆角的半径 android:radius: 像素类型,圆角半径(若有上面四个圆角半径的定义,则不需要radius定义)   无corners节点表示没有圆角   gradien(渐变) android:angle: 整型,渐变的起始角度。0值时表示时钟的九点位置,其值增大表示往逆时针方向旋转。例如值为90表示时钟六点位置,值为180表示时钟三点位置,值为270表示时钟零点/十二点位置 android:centerX: 浮点型,圆心的X坐标。当android:type="linear"时不可用 android:centerY: 浮点型,圆心的Y坐标。当android:type="linear"时不可用 android:gradientRadius: 整型,渐变的半径。当android:type="radial"时才需要设置该属性 android:centerColor: 颜色类型,渐变的中间颜色 android:startColor: 颜色类型,渐变的起始颜色 android:endColor: 颜色类型,渐变的终止颜色 android:type: 字符串类型,渐变类型。为linear表示线性渐变(默认值),为radial表示放射渐变(起始颜色就是圆心颜色),为sweep表示滚动渐变(即一个线段以某个端点为圆心做360度旋转) android:useLevel: 布尔类型,设置为true无渐变,false有渐变色。如果要使用LevelListDrawable对象,就要设置为true   无gradien节点表示没有渐变效果   padding(间隔) android:bottom: 像素类型,与下边的间隔 android:left: 像素类型,与左边的间隔 android:right: 像素类型,与右边的间隔 android:top: 像素类型,与上边的间隔   无padding节点表示四周不设间隔   size(尺寸) android:height: 像素类型,图形高度 android:width: 像素类型,图形宽度   无size节点表示长宽自适应   solid(填充) android:color: 颜色类型,内部填充的颜色   无solid节点表示无填充颜色

03
领券