Unity开发安卓游戏:基于安卓游戏的优化方案总结

基于Unity3d 引擎的Android游戏优化

之前对项目做了很多优化,mesh合并 ,减少DrawCall和模型骨骼以及物理计算,合并材质球,优化代码等等,在IOS上还好,但是Android上,试过几款手机,从低端到高端,发现性能还是很差,所以又花了几天来研究摸索,终于把游戏性能搞定。记录下来,留作以后参考。

1. 更新不透明贴图的压缩格式为ETC 4bit,因为android市场的手机中的GPU有多种,每家的GPU支持不同的压缩格式,但他们都兼容ETC格式,

2. 对于透明贴图,我们只能选择RGBA 16bit 或者RGBA 32bit。

3. 减少FPS,在ProjectSetting-> Quality中的VSync Count 参数会影响你的FPS,EveryVBlank相当于FPS=60,EverySecondVBlank = 30;

这两种情况都不符合游戏的FPS的话,我们需要手动调整FPS,首先关闭垂直同步这个功能,然后在代码的Awake方法里手动设置FPS(Application.targetFrameRate = 45;)

   降低FPS的好处:

 1)省电,减少手机发热的情况;

 2)能都稳定游戏FPS,减少出现卡顿的情况。

4. 当我们设置了FPS后,再调整下Fixed timestep这个参数,这个参数在ProjectSetting->Time中,目的是减少物理计算的次数,来提高游戏性能。

5. 尽量少使用Update LateUpdate FixedUpdate,这样也可以提升性能和节省电量。多使用事件(不是SendMessage,使用自己写的,或者C#中的事件委托)。

6. 待机时,调整游戏的FPS为1,节省电量。

误区1:性能优化只是程序员的责任,与美术和策划无关。

-技术美术和关卡设计师对于游戏性能承担着非常重要的责任

-程序员往往无法补救由于滥用美术资源而造成的性能问题

误区2:在制定了严格的美术规范之后,美术师就应该对一切美术问题负责,程序员不再与此有关

-程序员应该为美术师实现完整的美术资源合法性检查工具

误区3:对于程序而言,性能优化应该从GPU/Shader的执行效率入手

-针对CPU端/游戏逻辑的性能优化往往能够取得更大的作用

-GPU/Shader的性能优化应该放在最后进行

***这里推荐使用一个优化工具BulidReqort,会显示很详细的资源所占大小

下面说说对于一些资源的优化

一般采用自动压缩要是大小还不满足要求那么就把纹理max size 设置小一些;

png图片:一般不是要求特别高清的可以使用rgba 16这个完全满足要求 比rgba32小一般 内存开销也是小一半的

音乐:音乐一般采用修改采样率的办法来压缩 修改采样率为128就够了,然后作为 2d游戏吧所有音乐都改为单声道小一半

模型的话一半都是图片比较大把图片按照上面的改下就好

最后附上一个修改unity导入后图片格式的代码

using UnityEngine;
using System.Collections;
using UnityEditor;

public class SetAssetPostprocessor : AssetPostprocessor
{
     void OnPostprocessTexture(Texture2D texture)
     {
         string path = assetPath.ToLower();
         if (path == null||path == "" )
         {
             return ;
         }
         TextureImporter textureImporter = AssetImporter.GetAtPath(path) as TextureImporter;

         if (textureImporter == null )
         {
             return ;
         }

         textureImporter.textureType = TextureImporterType.Advanced;
         textureImporter.isReadable = true ;
         textureImporter.mipmapEnabled = false ;

         if(path.EndsWith( ".jpg" ))
         {
              textureImporter.npotScale = TextureImporterNPOTScale.ToNearest;
              textureImporter.maxTextureSize = 2048;
              textureImporter.textureFormat = TextureImporterFormat.AutomaticCompressed;
         }
         else
         {
              textureImporter.maxTextureSize = 2048;
              textureImporter.npotScale = TextureImporterNPOTScale.ToNearest;
              textureImporter.textureFormat = TextureImporterFormat.RGBA16;
         }
         AssetDatabase.Refresh();
     }
}

音乐也可以用上面的代码处理 需要把脚本放在Editor文件夹下。

大家感兴趣可以看看!

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-03 12:28:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-03 12:28:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-03 12:28:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-03 12:28:02       18 阅读

热门阅读

  1. Django数据模型代码片段

    2024-01-03 12:28:02       42 阅读
  2. 1.2作业

    1.2作业

    2024-01-03 12:28:02      35 阅读
  3. springboot密码加盐

    2024-01-03 12:28:02       35 阅读
  4. vu3-14

    vu3-14

    2024-01-03 12:28:02      37 阅读
  5. Spark之Dynamic Resource Allocation

    2024-01-03 12:28:02       41 阅读
  6. How to understand Data Mining

    2024-01-03 12:28:02       39 阅读
  7. 成为更好的软件开发人员的几点要求

    2024-01-03 12:28:02       34 阅读
  8. 第十章 软件测试的原则(笔记)

    2024-01-03 12:28:02       34 阅读