Andoird太头疼了,尤其有些机器就是屏幕大别的硬件条件都很烂,为了优化渲染效率可以试试安卓的硬件缩放技术,我在真机上已经测试通过,效率确实提升了很多,FPS直线上升。。

原理如下 http://android-developers.blogspot.it/2013/09/using-hardware-scaler-for-performance.html

但是需要拿到Unity android的GLSurfaceView,可是我试过了很多办法就是拿不到它,不过还好Unity 直接提供了方法。

找一个合适的地方调用如下方法即可,这个方法在IOS和Android上都支持,但是经过测试IOS没必要使用,在android上还是很有必要使用的。

Screen.SetResolution(960,640,true);

这样会强制把屏幕的分辨率指定成960X640. 但是你的目标设备的分辨率可能不是3:2的,所以你需要做一个算法,假设搭建界面的时候是960X640,此时运行在1280X760的分辨率上,1280X760 和 960X640 等比换算一下 即可。代码我就不贴了。。。使用如下代码可以取出当前手机的屏幕分辨率,根据算法算一下就行了。

int width = Screen.currentResolution.width;
int height = Screen.currentResolution.height;

还有一点需要注意,经过我的测试发现 横屏游戏时 Android切到后台在返回前台渲染区域变成竖屏了。 所以每次切到前台的时候一定要强制设置一下分辨率。

1

2

3

4

5

6

7

void OnApplicationPause(bool paused)

{

Logger.Print("paused:", paused);

if (!paused) {

Screen.SetResolution(960,640,true);

}

}

还有个问题就是当调用Screen.SetResolution(960,640,true); 紧跟着就打开NGUI界面,可能会造成UI闪烁一下。我想最好可以通过unity的GLSurfaceView在java内层去设置分辨率,但是我不知道怎么取到GLSurfaceView,或者如果有朋友知道请在下面留言告诉我一下。

做一个比较简单的界面, 界面上就写上 “正在加载中..”几个大字,因为背景是黑的闪就闪吧反证我们的策划说能忍。。

1

2

3

4

5

6

IEnumerator Start()

{

Screen.SetResolution(960,640,true);

yield return new WaitForSeconds(0.1f);

//在下面代码里面在处理设置完分辨率以后的逻辑

}

可能我上面写 Screen.SetResolution(960,640,true); 可能会误导大家,我举个里例子。开发的时候布的界面是 960X640 ,此时运行在 1280X720上。 那么 修改后的分辨率 就是 Screen.SetResolution(1138,640,true);

因为 1138 = 1280/(720/640)但是你还要去考虑 比 960X640 大的情况 或者 比 960X640小的情况。 总之就是等比例的计算 目标分辨率。如果一个是960 另一个就按比例算, 如果一个是640 另一个也按比例算。 

设置分辨率以后不会影响到你的代码原有的任何逻辑,效率确实提升了很多,建议大家最好在android上用一下。嘿嘿。欢迎大家在下面给 @雨松MOMO 留言,大家一起讨论。。

C#

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

private int scaleWidth =0;

private int scaleHeight =0;

public void setDesignContentScale()

{

#if UNITY_ANDROID

if(scaleWidth ==0 && scaleHeight ==0)

{

int width = Screen.currentResolution.width;

int height = Screen.currentResolution.height;

int designWidth = 960;

int designHeight = 640;

float s1 = (float)designWidth / (float)designHeight;

float s2 = (float)width / (float)height;

if(s1 < s2) {

designWidth = (int)Mathf.FloorToInt(designHeight * s2);

} else if(s1 > s2) {

designHeight = (int)Mathf.FloorToInt(designWidth / s2);

}

float contentScale = (float)designWidth/(float)width;

if(contentScale < 1.0f) {

scaleWidth = designWidth;

scaleHeight = designHeight;

}

}

if(scaleWidth >0 && scaleHeight >0)

{

if(scaleWidth % 2 == 0) {

scaleWidth += 1;

} else {

scaleWidth -= 1;

}

Screen.SetResolution(scaleWidth,scaleHeight,true);

}

#endif

}

void OnApplicationPause(bool paused)

{

if (paused) {

} else {

setDesignContentScale();

}

}

我在补充一下: 这个方法不会影响NGUI的自适应,也不会影响游戏原有的任何逻辑也不用在改别的代码,在各种Android分辨率上都可行,效率就可以提升很多。我们项目已经轰轰烈烈的使用了,唯一的缺点就是设置分辨率的时候屏幕会闪一下。可以做一个黑屏 或者 几个字“正在加载中” 。。 所以我想在java层去改, 但是拿不到GLSurfaceView 。。如果有知道的朋友请在下面留言告诉我。谢谢。

这两天测试发现有时候按下手机的关机键,然后在返回游戏发现游戏屏幕竖过来了(我们是横屏游戏)。而且是随机性的

在这两篇文章中我找到了答案

http://blog.k-res.net/archives/1702.html

http://stackoverflow.com/questions/7185644/android-opengl-crazy-aspect-ratio-after-sleep

解决这个问题需要在java这一层来配合,需要改一下你的UnityPlayerNativeActivity.java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

private int width,height;

// Setup activity layout

@Override protected void onCreate (Bundle savedInstanceState)

{

requestWindowFeature(Window.FEATURE_NO_TITLE);

super.onCreate(savedInstanceState);

getWindow().takeSurface(null);

setTheme(android.R.style.Theme_NoTitleBar_Fullscreen);

getWindow().setFormat(PixelFormat.RGB_565);

mUnityPlayer = new UnityPlayer(this);

if (mUnityPlayer.getSettings ().getBoolean ("hide_status_bar", true))

getWindow ().setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(mUnityPlayer);

mUnityPlayer.requestFocus();

//保存一下游戏屏幕的宽和高

DisplayMetrics dm = getResources().getDisplayMetrics();

width = dm.widthPixels;

height = dm.heightPixels;

}

还是在这个类里。

1

2

3

4

5

6

7

8

9

10

11

12

// This ensures the layout will be correct.

@Override public void onConfigurationChanged(Configuration newConfig)

{

super.onConfigurationChanged(newConfig);

//在这里强制设置一下屏幕的宽和高

mUnityPlayer.getView().getLayoutParams().width = width;

mUnityPlayer.getView().getLayoutParams().height = height;

Log.v("unity", width+" " + height );

mUnityPlayer.configurationChanged(newConfig);

}

好了,目前我用这个方法已经完美解决了这个问题,大家如果还有什么好得经验分享,欢迎在下面给我留言。

Android的硬件缩放技术优化执行效率 Screen.SetResolution相关推荐

  1. 浅谈代码的执行效率(4):汇编优化

    终于谈到这个话题了,首先声明我不是汇编优化的高手,甚至于我知道的所有关于汇编优化的内容,仅仅来自于学校的课程.书本及当年做过的一些简单练习.换句话说,我了解的东西只能算是一些原则,甚至也有一些&quo ...

  2. 谷歌发布 Android 8.1 首个开发者预览版,优化内存效率

    今晨,谷歌推出了 Android 8.1 首个开发者预览版,此次升级涵盖了针对多个功能的提升优化,其中包含对 Android Go (设备运行内存小于等于 1 GB)和加速设备上对机器学习的全新神经网 ...

  3. 优化javaScript代码,提高执行效率

    今天看完书,总结了一下可以如何优化 JavaScript . 1.合并js文件 为优化性能,可以把多个js文件(css文件也可以)合并成极少数大文件.跟十个5k的js文件相比,合并成一个50k的文件更 ...

  4. mysql如何分析sql执行效率和进行效率优化

    [0]如何分析mysql中sql执行较慢的问题 步骤1.观察,至少跑一天,看看生产的慢sql情况: 步骤2.开启慢查询日志,设置阈值,比如超过5秒钟就是慢sql, 并将它抓取出来: 步骤3.expla ...

  5. mysql 执行效率命令_MySQL优化--explain 分析sql语句执行效率

    MySQL优化--explain 分析sql语句执行效率 explain 命令 explain 命令在解决数据库性能上市第一推荐使用命令,大部分的性能问题可以通过此命令来简单解决,explain可以用 ...

  6. 多核cpu应用场景_【喷】让我们来看看《战地3》多核CPU执行效率的优化有多烂...

    本帖最后由 webguest 于 2011-11-9 23:28 编辑 经过测试对比 战地3中 不光是CPU有瓶颈   6900系列A卡驱动交火有问题  特别是高中低效果帧数比单卡还差 最高效果帧数还 ...

  7. Android Studio 使用intel硬件虚拟化技术,遇到HAXM 安装失败.没有找到硬件的巨坑!

    (如果你的intel cpu可以通过本文的软件测试,就说明可以安装硬件虚拟机,如果不能请看本文) 首先我声明问题不是.Intel 的cpu 是支持硬件虚拟化技术你没有开启,开启一下问题就解决这么&qu ...

  8. Android之——性能与内存优化

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46987951 写出高效代码的两条基本的原则:(1)不要做不必要的事:(2)不要分配 ...

  9. 十亿级视频播放技术优化揭密

    本文为转载文章,文章来自:王辉|十亿级视频播放技术优化揭密 QCon是由InfoQ主办的全球顶级技术盛会,每年在伦敦.北京.东京.纽约.圣保罗.上海.旧金山召开.自 2007年 3月份首次举办以来,已 ...

  10. 腾讯研发总监王辉:十亿级视频播放技术优化揭秘

    QQ 空间在 2016 年日均视频播放量由年初的千万级迅速突破到十亿级,过程中也对整个视频播放技术的可靠性.性能.操作体验等方面提出严峻的考验,相关质量急需提升.经过多个迭代持续和各项优化,外网整体质 ...

最新文章

  1. 高薪源于专注和极致!
  2. 转发与重定向(forward与redirect)
  3. CTFshow 信息收集 web4
  4. mysql 倒序 分页_nodeJS与MySQL实现分页数据以及倒序数据
  5. re正则表达式的使用
  6. 牛客题霸 NC12 重建二叉树
  7. Day-10: 错误、调试和测试
  8. 【转】高并发情况下的单例模式
  9. 罗技鼠标G304驱动与讲解(其余类型驱动见文末)
  10. 笔记本win10 1709 安装 v4w的教程
  11. 如何制作印章水印?教你在线制作电子印章水印
  12. 小程序连接优声云打印机流程
  13. 统计|如何理解多元线性回归的F检验的作用与目的
  14. 聚类分析树状图的初探
  15. 个人自我介绍快闪风格PPT模板
  16. 数据挖掘入门(一)基本理论
  17. ubuntu18 配置静态IP地址(详细版)
  18. 【C语言进阶】带你深度剖析那些常见的字符函数(一)
  19. BlueZ移植与配置(很全面)
  20. k8s节点状态异常思路

热门文章

  1. (转)When Milliseconds Make Millions
  2. ZStack实践汇 | 详解ZStack高级功能--裸金属服务部署实践
  3. 谷歌android q 安装,谷歌修复了Pixel智能机安装Android Q Beta 4后循环重启的bug
  4. oracle undo head,一次悬挂事务的处理思路
  5. 【优化算法】先导粘菌算法(LSMA)【含Matlab源码 1436期】
  6. 【图像增强】基于matlab暗通道图像去雾【含Matlab源码 101期】
  7. html让一行文字在两行,css单行两行文本自适应问题
  8. micoolcoder 验证码 for php v1.0 全字符版,Micoolcoder 验证码 for PHP v1.0 全字符版
  9. c语言 机器语言 汇编语言_多语言机器人新闻记者
  10. 三维散点图加colorbar