`

unity基础开发----切换场景、游戏视图(Game View)、iphone优化

 
阅读更多

这个函数按照索引加载关卡。在Unity中使用File->BuildSettings.....菜单可以看到所有关卡的索引列表。在你能过加载关卡之前你必须将它添加到游戏使用关卡列表中。在Unity中使用File->BuildSettings.....并添加你需要的关卡到关卡列表中。

//加载索引为0的关卡

Application.LoadLevel(0);

当加载新的关卡时,所有已经加载的游戏物体都将被销毁。如果你想让物体在被加载新关卡时不被销毁,使用Object.DontDestroyOnLoad

staticfunctionLoadLevel(name:string):void

http://game.ceeger.com/Script/Application/Application.LoadLevel.html

游戏视图(GameView)右上方状态(Stats)按钮。这个状态按钮按下时,显示一个重叠视窗与实时渲染统计数据。帮助优化你的游戏,这是非常有用的。统计数据取决于你的构建目标显示不同的内容。

Statistics:统计数值

TimeperframeandFPS
每帧的时间和FPS处理和渲染一个游戏框架(以及由此产生的FPS)的需要多少时间。请注意,这个数量只包括游戏视图更新和渲染的帧,不包括在编辑器中绘制场景视图,检视窗口和其他仅编辑器进程的时间。

DrawCalls
描绘调用批处理后网格绘制的总数。请注意其中有对象被多次渲染(例如,被像素灯光照亮的物体),每次渲染结果都会导致一个单独的描绘调用。drawCalls上限35(具体怎么降低DrawCalls,请自己搜搜)

Batched(DrawCalls)
批处理(描绘调用)最初单独描绘调用被添加到批处理的数量。批处理是引擎试图结合多个物体渲染进行一次描绘调用,以降低CPU开销。为了确保良好的批处理,你应该尽可能多的在不同物体之间共享材质。Batched越高越好,整合渲染,

TrisandVerts三角面与顶点数绘制三角形和顶点的数目。为低端硬件的优化时,这多是重要的。

UsedTextures使用的纹理绘制该帧使用的纹理数和它们使用的内存。

RenderTextures
渲染纹理渲染纹理的数量和它们使用的内存。每帧切换激活纹理的次数也显示。

Screen屏幕屏幕的大小,连同其抗锯齿级别和内存的使用率。

VRAMusage显存使用当前显存(VRAM)的使用情况的大约范围,同时显示你的显卡有多少显存。

VBOtotal
顶点缓冲区对象总数上传到图形卡的唯一网格(顶点缓冲区)的数量。各种不同的模式,将导致要创建新的VBO。在某些情况下缩放对象会导致要创建额外的VBO。在静态批处理的情况下,然而对象数量可以共享相同的VBO

VisibleSkinnedMeshes
可见蒙皮网格渲染蒙皮网格的数量.

Animations动画正在播放动画的数量。

Form:http://game.ceeger.com/Manual/RenderingStatistics.html

Unity3diphone游戏开发优化

-试试把gameobject一个一个禁用,确定下什么最影响性能

-stats里面有多少个Drawcalls&三角形

-合并网格物体

-合并材质张数

-不要用网格碰撞.

-Unity对带动作的模型渲染消耗比较大,如果是静态的不带动作文件的模型渲染不会出现效率问题,但是要确保只绘制屏幕内的东西

1.尽量避免每帧处理

比如:

functionUpdate(){DoSomeThing();}

可改为每5帧处理一次:

functionUpdate(){if(Time.frameCount%5==0){DoSomeThing();}}

2.定时重复处理用InvokeRepeating函数实现
比如,启动0.5秒后每隔1秒执行一次DoSomeThing函数:

functionStart(){InvokeRepeating("DoSomeThing",0.5,1.0);}

3.优化Update,FixedUpdate,LateUpdate等每帧处理的函数
函数里面的变量尽量在头部声明。
比如:

functionUpdate(){varpos:Vector3=transform.position;}

可改为

privatevarpos:Vector3;functionUpdate(){pos=transform.position;}

4.主动回收垃圾
给某个GameObject绑上以下的代码:

functionUpdate(){if(Time.frameCount%50==0){System.GC.Collect();}}

5.运行时尽量减少TrisDrawCalls
预览的时候,可点开Stats,查看图形渲染的开销情况。特别注意TrisDrawCalls这两个参数。
一般来说,要做到:
Tris保持在7.5k以下
DrawCalls保持在20以下

6.压缩Mesh
导入3D模型之后,在不影响显示效果的前提下,最好打开MeshCompression
Off,Low,Medium,High这几个选项,可酌情选取。

7.避免大量使用Unity自带的Sphere等内建Mesh
Unity内建的Mesh,多边形的数量比较大,如果物体不要求特别圆滑,可导入其他的简单3D模型代替。

8.优化数学计算
比如,如果可以避免使用浮点型(float),尽量使用整形(int),尽量少用复杂的数学函数比如SinCos等等。

1ArrayList的对象在使用时应该注意以下事项
使用
arraylen=myarray.length;
for(i=0;i<arraylen;i++)
{
}
避免
for(i=0;i<myarray.length;i++){
}

2、少用临时变量
使用
vartouch:Vector2;

functionUpdate(){
if(count==0){touch=iPhone.GeTouch(0).position;}
}
避免
functionUpdate(){
if(count==0){
vartouch:Vector2=iPhone.GeTouch(0).position;
}
}

3、少用算数符号/,改为乘以相应小数
使用
x*0.5f
避免
x/2

4、动作和AI不需要每帧都执行
if(GLO.count%3){
//executetheenemyaimatyourplayerevery3Update
}
if(GLO.count%5){
//executeplayerIAevery5Update
}

5Mesh部分
-对于一个mesh不要使用多张materials。我遇到过这样的问题是一个小模型拥有2materials导致了2倍甚至更多的时间!而当我减少一个material的时候,时间减少了一半。
使用多边形粉碎机降低你mesh的面熟,但是虽然你的mesh看起来像一个正方形。你可以通过调整在导入区的smoothingangle选项来进行补偿。对于一个高优化的mesh,调整平滑角度到80甚至120度,你的mesh将看起来很配合虽然只是一点点的数量(???)
不要尝试使用任何昂贵消耗的数学公式,例如sin()cos(),用预定义好的0360度的sin(x)cos(x)的值组成链表来替代。当然了前提是你不需要太精确。
尽可能的使用整形。如果你有一个检测屏幕位置的变量或者一个计数器,定义成整形会更快。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics