- 试试把gameobject 一个一个禁用,确定下什么最影响性能
- stats 里面有多少个 Draw calls & 三角形
- 合并网格物体
- 合并材质张数
- 不要用网格碰撞.
- Unity对带动作的模型渲染消耗比较大,如果是静态的不带动作文件的模型渲染不会出现效率问题,但是要确保只绘制屏幕内的东西
1. 尽量避免每帧处理
比如:
function Update() { DoSomeThing(); }
可改为每5帧处理一次:
function Update() { if(Time.frameCount % 5 == 0) { DoSomeThing(); } }
2. 定时重复处理用 InvokeRepeating 函数实现
比如,启动0.5秒后每隔1秒执行一次 DoSomeThing 函数:
function Start() { InvokeRepeating("DoSomeThing", 0.5, 1.0); }
3. 优化 Update, FixedUpdate, LateUpdate 等每帧处理的函数
函数里面的变量尽量在头部声明。
比如:
function Update() { var pos: Vector3 = transform.position; }
可改为
private var pos: Vector3; function Update(){ pos = transform.position; }
4. 主动回收垃圾
给某个 GameObject 绑上以下的代码:
function Update() { if(Time.frameCount % 50 == 0) { System.GC.Collect(); } }
5. 运行时尽量减少 Tris 和 Draw Calls
预览的时候,可点开 Stats,查看图形渲染的开销情况。特别注意 Tris 和 Draw Calls 这两个参数。
一般来说,要做到:
Tris 保持在 7.5k 以下
Draw Calls 保持在 20 以下
6. 压缩 Mesh
导入 3D 模型之后,在不影响显示效果的前提下,最好打开 Mesh Compression。
Off, Low, Medium, High 这几个选项,可酌情选取。
7. 避免大量使用 Unity 自带的 Sphere 等内建 Mesh
Unity 内建的 Mesh,多边形的数量比较大,如果物体不要求特别圆滑,可导入其他的简单3D模型代替。
8. 优化数学计算
比如,如果可以避免使用浮点型(float),尽量使用整形(int),尽量少用复杂的数学函数比如 Sin 和 Cos 等等。
1、 ArrayList的对象在使用时应该注意以下事项
使用
arraylen = myarray. length;
for (i=0; i< arraylen; i++)
{
}
避免
for (i=0; i<myarray.length; i++) {
}
2、 少用临时变量
使用
var touch:Vector2;
function Update(){
if (count==0) { touch=iPhone.GeTouch(0).position;}
}
避免
function Update(){
if (count==0) {
var touch:Vector2=iPhone.GeTouch(0).position;
}
}
3、 少用算数符号/,改为乘以相应小数
使用
x * 0.5f
避免
x/2
4、 动作和AI不需要每帧都执行
if (GLO.count%3){
// execute the enemy aim at your player every 3 Update
}
if (GLO.count%5){
// execute player IA every 5 Update
}
5、 Mesh部分
原文:
- do not use several materials for one mesh. I got the problem with a little model that had 2 materials. It was taking 2 time more polys! When i removed one material, it was showing at half his the size. I don't know why. Usually each material = 1 draw call, so use texture atlas!
个人译文:
-对于一个mesh不要使用多张materials。我遇到过这样的问题是一个小模型拥有2张materials导致了2倍甚至更多的时间!而当我减少一个material的时候,时间减少了一半。
原文
- Use polygon cruncher to lower your mesh polys but even if your mesh look a little square, you can compensate this by tweaking "smoothing angle" in the importer inspector. For a highly optimized mesh, change the smoothing angle to 80 or even 120 and you mesh will look more smooth even with just a few polygons.
个人译文:
使用多边形粉碎机降低你mesh的面熟,但是虽然你的mesh看起来像一个正方形。你可以通过调整在导入区的” smoothing angle”选项来进行补偿。对于一个高优化的mesh,调整平滑角度到80甚至120度,你的mesh将看起来很配合虽然只是一点点的数量(???)
原文
- try not to use any expensive arithmetic like sin() or cos(). instead fill an array with precalculated values with x=0 to 360) sin(x) and cos(x) and use the values of this table. Of course it is in the case of you don't need precision.
个人译文
不要尝试使用任何昂贵消耗的数学公式,例如sin() 或 cos(),用预定义好的0到360度的sin(x)和cos(x)的值组成链表来替代。当然了前提是你不需要太精确。
原文
- force integer when possible. If you have a counter or check the position on the screen, declare the variable as INT, they are faster.
个人译文
尽可能的使用整形。如果你有一个检测屏幕位置的变量或者一个计数器,定义成整形会更快。
Unity3d的一些小窍门
1、防止黑屏
In script change iPhoneSettings.screenCanDarken to false. This basically does the same as:
//Objective-C call [UIApplication sharedApplication].idleTimerDisabled = YES;
It prevents the auto lock on iPhone to kick-in.
分享到:
相关推荐
在Unity3D进行iPhone游戏开发时,场景优化是提升游戏性能、确保流畅体验的关键环节。由于移动设备的硬件限制,特别是在早期的iPhone上,未经优化的游戏可能会遇到运行效率低下、卡顿等问题。以下是对给定内容中提到...
《Unity3D与iPhone开发深度探索》 Unity3D是一款强大的跨平台游戏开发引擎,它以其易用性、高效性和广泛的平台支持而受到广大开发者喜爱。在本篇中,我们将深入探讨Unity3D用于iPhone应用开发的相关知识,涵盖从...
Unity3D游戏不能直接在iPhone模拟器上运行,因为模拟器无法完全模拟iPhone的所有交互方式,且性能表现与真实设备不同。推荐使用Unity的Unity Remote功能,在真实设备上进行远程测试。 3. **使用Unity Remote**: ...
《Creating 3D Game Art for the iPhone with Unity》是一本全面介绍如何使用Unity3D、modo、Blender等工具为iPhone开发3D游戏的指南。书中不仅涵盖了从概念设计到最终发布的整个流程,还深入讲解了具体的技术细节和...
对于希望为iPhone开发高质量3D游戏的开发者来说,Unity3D提供了一个完整的解决方案。本节将详细介绍如何使用Unity3D进行iPhone 3D游戏的艺术设计和编程工作。 ##### 1. **Unity3D基础** - **界面介绍**:Unity3D的...
在使用Unity3D进行iOS开发时,可能会遇到各种问题,特别是在尝试在iPhone设备上运行和测试游戏时。本文将汇总并解决这些问题,帮助开发者更好地适应iOS环境。 首先,关于【标题】提到的问题,"史上最全的Unity3D ...
在使用Unity3D进行iOS iPhone开发时,开发者可能会遇到一系列的问题,这些问题涵盖了项目设置、设备兼容性、测试工具使用、性能优化等多个方面。以下是一些关键知识点的详细说明: 1. **初步准备**: - 如果你是...
Unity3D是一款强大的跨平台游戏开发引擎,以其高效、易用和丰富的功能深受开发者喜爱。在游戏制作过程中,视觉效果是提升游戏体验的关键因素之一,而粒子特效正是实现这一目标的重要工具。本资源"unity3d游戏粒子...
### Unity3D开发2D游戏教程 #### 一、引言 随着游戏开发技术的不断进步,Unity3D因其强大的跨平台能力和丰富的功能支持而成为众多开发者的选择之一。特别是对于2D游戏而言,Unity3D提供了诸多便利工具及插件,帮助...
这本书详细阐述了如何使用Unity3D引擎开发适用于iOS平台的游戏,包括iPhone、iPod和iPad。 Unity3D是一个非常流行的3D游戏引擎,在3D游戏开发行业中几乎已经成为了一种标准工具。本书旨在指导读者全面地了解Unity3D...
Unity以其跨平台能力、丰富的资源库和强大的物理引擎而著名,支持2D和3D游戏开发。Cocos2d-x则是一个开源的2D游戏引擎,适合开发轻量级游戏,其性能优秀且易于上手。选择哪个引擎取决于游戏的需求和开发团队的技能集...
在这个“一个简单的3D游戏小例子”中,我们探索的是3D游戏开发的基础,这是一个非常适合初学者和希望深入了解游戏编程的IT爱好者的学习资源。通过提供的源代码,我们可以深入理解3D游戏开发的关键技术和流程。 首先...
本篇将详细解析"unity3d 源代码 Bottle Shot (iPhone.Android) 移动版 酒吧砸瓶子"这一项目,旨在帮助开发者理解如何利用Unity3D开发一款适用于iPhone和Android的休闲游戏。 首先,"Bottle Shot"是一款酒吧砸瓶子...
**Unity3D**是一款跨平台的游戏开发引擎,因其易用性和强大的功能而受到开发者们的青睐。 Unity3D通过支持AR技术,使得开发者能够更加便捷地创建出具有AR特性的游戏或应用。Unity3D通过提供一系列API接口和工具集,...
在本教程中,我们将深入探讨如何利用Unity3D实现平面小球的重力感应功能,尤其针对iPhone、iPad等iOS设备进行优化。这一特性使得游戏体验更加真实,增强了玩家的沉浸感。 首先,我们需要理解Unity3D中的物理系统。...
在Unity3D游戏开发中,创建自定义路径是常见的需求,比如用于角色移动、相机跟随或者粒子系统轨迹等。"unity3d自定义路径—曲线编辑器"这一主题聚焦于如何利用Unity3D来实现这样的功能。在这个项目中,开发者可能会...
Unity3D是由Unity Technologies开发的一款强大的游戏开发工具,它整合了多种功能,使得开发者能够便捷地创建各种类型的三维内容,包括视频游戏、建筑可视化、实时三维动画等。这个跨平台的游戏引擎支持Windows、Mac...