(转载)Unity 优化总结
Unity 优化总结
2017-03-10 | 发布 大海明月 zengfeng75@qq.com | 分类 Unity | 标签 Unity 优化
相关文档
UGUI需要注意的点
1.UI叠加问题
如果叠加层有另外的calldraw夹着,会使本来该合并的calldraw独立。从而让calldraw上升
2.UI Mask遮罩
(1)mask先往缓存里画一个区域,产生一个calldraw
(2)mask里面的物体与外面的calldraw独立,越复杂产生的calldraw越多
3.UI布局时,尽量吧Text放一个层里去
原理同1,Text可能会分割其他图片的calldraw。 好处是可以把相同字体的text合并calldraw
4.UI的 overdraw
(1)叠加层数越多,overdraw显示的颜色越红。同一个像素在同一帧绘制的次数越多
(2)如果Image是Sliced类型,中间区域是完全透明(相当于9宫格的边框),那么尽量将 Fill Center的勾去掉
(3)如果是只要点击区域,不要显示内容的。可以把空白透明Image替换成qiankanglai提供的Empty4Raycast (http://blog.uwa4d.com/archives/fillrate.htmlhttp://blog.uwa4d.com/archives/fillrate.html)。只接收事件,清空顶点绘制。
01.
using
UnityEngine;
02.
using
System.Collections;
03.
04.
namespace
UnityEngine.UI
05.
{
06.
public
class
Empty4Raycast : MaskableGraphic
07.
{
08.
protected
Empty4Raycast()
09.
{
10.
useLegacyMeshGeneration =
false
;
11.
}
12.
13.
protected
override
void
OnPopulateMesh(VertexHelper toFill)
14.
{
15.
toFill.Clear();
16.
}
17.
}
18.
}
(4)和第(2)类似,如果一张图片有很多区域是空白的,默认情况下fill rate是矩形区域。用下下面qiankanglai提供的PolygonImage。可以减少透明区域的fill。
01.
using
System.Collections.Generic;
02.
03.
namespace
UnityEngine.UI
04.
{
05.
[AddComponentMenu(
"UI/Effects/PolygonImage"
, 16)]
06.
[RequireComponent(
typeof
(Image))]
07.
public
class
PolygonImage : BaseMeshEffect
08.
{
09.
protected
PolygonImage()
10.
{ }
11.
12.
// GC Friendly
13.
private
static
Vector3[] fourCorners =
new
Vector3[4];
14.
private
static
UIVertex vertice =
new
UIVertex();
15.
private
RectTransform rectTransform =
null
;
16.
private
Image image =
null
;
17.
public
override
void
ModifyMesh(VertexHelper vh)
18.
{
19.
if
(!isActiveAndEnabled)
return
;
20.
21.
if
(rectTransform ==
null
)
22.
{
23.
rectTransform = GetComponent<RectTransform>();
24.
}
25.
if
(image ==
null
)
26.
{
27.
image = GetComponent<Image>();
28.
}
29.
if
(image.type != Image.Type.Simple)
30.
{
31.
return
;
32.
}
33.
Sprite sprite = image.overrideSprite;
34.
if
(sprite ==
null
|| sprite.triangles.Length == 6)
35.
{
36.
// only 2 triangles
37.
return
;
38.
}
39.
40.
// Kanglai: at first I copy codes from Image.GetDrawingDimensions
41.
// to calculate Image's dimensions. But now for easy to read, I just take usage of corners.
42.
if
(vh.currentVertCount != 4)
43.
{
44.
return
;
45.
}
46.
47.
rectTransform.GetLocalCorners(fourCorners);
48.
49.
// Kanglai: recalculate vertices from Sprite!
50.
int
len = sprite.vertices.Length;
51.
var vertices =
new
List<UIVertex>(len);
52.
Vector2 Center = sprite.bounds.center;
53.
Vector2 invExtend =
new
Vector2(1 / sprite.bounds.size.x, 1 / sprite.bounds.size.y);
54.
for
(
int
i = 0; i < len; i++)
55.
{
56.
// normalize
57.
float
x = (sprite.vertices[i].x - Center.x) * invExtend.x + 0.5f;
58.
float
y = (sprite.vertices[i].y - Center.y) * invExtend.y + 0.5f;
59.
// lerp to position
60.
vertice.position =
new
Vector2(Mathf.Lerp(fourCorners[0].x, fourCorners[2].x, x), Mathf.Lerp(fourCorners[0].y, fourCorners[2].y, y));
61.
vertice.color = image.color;
62.
vertice.uv0 = sprite.uv[i];
63.
vertices.Add(vertice);
64.
}
65.
66.
len = sprite.triangles.Length;
67.
var triangles =
new
List<
int
>(len);
68.
for
(
int
i = 0; i < len; i++)
69.
{
70.
triangles.Add(sprite.triangles[i]);
71.
}
72.
73.
vh.Clear();
74.
vh.AddUIVertexStream(vertices, triangles);
75.
}
76.
}
77.
}
5.UI的 没必要的Raycast Target勾去掉
UGUI的 Text、Image两个组件有这个参数,主要用来事件监听的。如果不需要接受事件监听就去掉。因为在触摸屏幕的时候,Raycast Target勾选的会参与检测。数量多了就会耗时。
6.UI的 Mesh重建,动静分离
(1)先看看界面中不操作情况下,有哪些元素是会变化的。如果层级不是很耦合,那么可以把这些动的元素放到新的Canvas。如果大多数变化的在一个层级下,就在变化的最上游节点添加一个Canvas组件。
(2)如个是选中状态有变化的元素。可以用代码动态给他添加Canvas组件。
(3)如果Image、Text在动态改变Color的,做渐变动画之类的。也可以单独设置材质球用脚本修改材质球颜色。多1个calldraw。减少整体Mesh重建。直接修改Color是在修改他们的顶点颜色,所以Mesh会重建。
7.Text描边
Text调用Outline等组件会多加很多的Mesh(三角数翻5倍)。可以自己创建字体,字体里的文字描好边。
(转载)Unity 优化总结的更多相关文章
- [转载]unity优化1
官方优化文档--优化图像性能http://docs.unity3d.com/Documentation/Manual/OptimizingGraphicsPerformance.html Unity3 ...
- 【Unity优化】构建一个拒绝GC的List
版权声明:本文为博主原创文章,欢迎转载.请保留博主链接:http://blog.csdn.net/andrewfan 上篇文章<[Unity优化]Unity中究竟能不能使用foreach?> ...
- [Unity优化] Unity CPU性能优化
前段时间本人转战unity手游,由于作者(Chwen)之前参与端游开发,有些端游的经验可以直接移植到手游,比如项目框架架构.代码设计.部分性能分析,而对于移动终端而言,CPU.内存.显卡甚至电池等硬件 ...
- 再议Unity优化
0x00 前言 在很长一段时间里,Unity项目的开发者的优化指南上基本都会有一条关于使用GetCompnent方法获取组件的条目(例如14年我的这篇博客<深入浅出聊Unity3D项目优化:从D ...
- UNITY 优化之带Animator的Go.SetActive耗时问题,在手机上,这个问题似乎并不存在,因为优化了后手机上运行帧率并未明显提升
UNITY 优化之带Animator的Go.SetActive耗时问题,在手机上,这个问题似乎并不存在,因为优化了后手机上运行帧率并未明显提升 经确认,这个问题在手机上依然存在,不过占的比例非常小.因 ...
- 面向英特尔® x86 平台的 Unity* 优化指南: 第 1 部分
原文地址 目录 工具 Unity 分析器 GPA 系统分析器 GPA 帧分析器 如要充分发挥 x86 平台的作用,您可以在项目中进行多种性能优化,以最大限度地提升性能. 在本指南中,我们将展示 Uni ...
- [转载]机器学习优化方法总结:SGD,Momentum,AdaGrad,RMSProp,Adam
[转载]机器学习优化方法总结:SGD,Momentum,AdaGrad,RMSProp,Adam https://blog.csdn.net/u010089444/article/details/76 ...
- 【Unity优化】Unity优化技巧进阶开篇
版权声明:本文为博主原创文章,欢迎转载.请保留博主链接:http://blog.csdn.net/andrewfan 做游戏好多年了,关于游戏优化一直是令开发者头疼的一个问题.因为优化牵扯的内容很多, ...
- 【Unity优化】如何实现Unity编辑器中的协程
Unity编辑器中何时需要协程 当我们定制Unity编辑器的时候,往往需要启动额外的协程或者线程进行处理.比如当执行一些界面更新的时候,需要大量计算,如果用户在不断修正一个参数,比如从1变化到2,这种 ...
随机推荐
- html5--6-1 引入外部样式表
html5--6-1 引入外部样式表 实例 学习要点 掌握引入外部样式表方法 插入样式的三种方法 内联样式表(行内) 内部样式表(style中) 外部样式表 创建一个外部样式表 在head中使用lin ...
- 腾讯Hermes设计概要——数据分析用的是列存储,词典文件前缀压缩,倒排文件递增id、变长压缩、依然是跳表-本质是lucene啊
转自:http://data.qq.com/article?id=817 三.Hermes设计概要 架构描述 系统核心进程均采用分散化设计,根据业务发展需求,可随意扩缩容机器; 周期性数据直接通过td ...
- 001 - 配置Pycharm的字体大小
本文记录的是Pycharm2017年1月版本 1 配置代码区的字体大小 位置在 File -> setting -> Editor -> Color&Fonts -> ...
- POJ1236 Network of Schools (强连通分量,注意边界)
A number of schools are connected to a computer network. Agreements have been developed among those ...
- win10 下安装linux子系统
一.开发人员选项 打开控制面板->程序与功能->启用或关闭windows功能 勾选 [适用于linux的windows子系统] 选项 打开win10设置 找到更新与安全 启动开 ...
- 全民nib
1.为任何组件创建nib文件 那么如何通过XIB来创建自己的个性化的class呢. 1.Add----New Filss---Cocoa Touch Classes---Object-C Class ...
- 注册页面Page的内置属性以及函数 路由 模块化
Page.prototype.route route字段可以获取到当前页面的路径 Page.prototype.setData() setData函数用于将数据从逻辑层发送到视图层,同时改变对应的t ...
- Firebug的安装与使用
第一步,点击 Firefox 浏览器上的“工具”选项,然后点击“附加软件”,在弹出的小窗口中,点击右下角的“获取扩展”选项,如图 4 所示. 图 4. 获取扩展 第二步,在点击“获取扩展”选项后,打开 ...
- sublime配置java环境
今天突然不想用eclipse编写java了,觉得sublime挺好用,就想用sublime配置java环境,以下是过程以及出现的问题. 一.配置Java环境 1.打开我的电脑–属性–高级–环境变量 2 ...
- HDU 2586 How far away ? (LCA,Tarjan, spfa)
题意:给定N个节点一棵树,现在要求询问任意两点之间的简单路径的距离,其实也就是最短路径距离. 析:用LCA问题的Tarjan算法,利用并查集的优越性,产生把所有的点都储存下来,然后把所有的询问也储存下 ...