## **UniWebView3和Screen.SetResolution**

最近在做游戏内部访问网页的功能逻辑,使用了UniWebView3插件,结果遇到了一个比较坑的问题,在此记录一下,以备查阅。

我首先使用UniwebView做了一个demo,导出到android和ios,能够正常的自适应尺寸,设置fullScreen,ReferenceRectTransform 都是没有问题的。
然后我将插件导入我们的游戏项目,并设置好参数。导出android包运行结果是位置和尺寸全都不对。
why? ,查了网上的很多资料和例子,没有人遇到我的问题(demo正常,导入游戏项目就gameOver),想想指定是我们的项目里面有什么屏幕设置造成了,后来就搜到了Screen.SetResolution。
下面展示一些 代码。

public void SetScreenResolution(){
#if UNITY_ANDROID || UNITY_IOSif (_scaleWidth == 0 && _scaleHeight == 0){int width = Screen.currentResolution.width;int height = Screen.currentResolution.height;int designWidth = 1280;int designHeight = 720;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;}Screen.SetResolution(_scaleWidth, _scaleHeight, true);Debug.Log("游戏分辨率为:" + _scaleWidth + " x " + _scaleHeight + "  当前分辨率为:" + Screen.width + " x " + Screen.height);}
#endif}

这段代码是在游戏运行时设置屏幕分辨率,目的是为了提高运行效率,当然对android游戏提升性能比较明显,对ios没啥用。
好吧,问题出现了,以我多年的暴力经验就是,把这段代码干掉,反正我们游戏发布ios,没什么影响。but,我们负责人说了,那是不行的,我们后期还是要发android版本的。作为一个苦逼的打工仔,只能遵命。
我的想法是既然当前游戏分辨率是根据原始分辨率计算的,那就反推回去。
不多说直接上代码:

   private UniWebView uniWebView;//需要引用到的 rect,作为网页的viewpublic RectTransform viewImage;private string url = "https://www.baidu.com/";//UI层摄像机,如果Canvas.RenderMode == ScreenSpace-Camerapublic Camera camera;//被设置的游戏分辨率widthprivate int _scaleWidth;//被设置的游戏分辨率heightprivate int _scaleHeight;//初始屏幕分辨率(屏幕正常分辨率)public static Vector2 initScreen = Vector2.zero;///uniWebView = GameObject.FindObjectOfType<UniWebView>();if (uniWebView == null){GameObject webViewGameObject = GameObject.Find("UniWebView");if (webViewGameObject == null)webViewGameObject = new GameObject("UniWebView");uniWebView = webViewGameObject.AddComponent<UniWebView>();//这个是例子中正确的使用方法,如果你的屏幕分辨率没有被设置。//uniWebView.ReferenceRectTransform = viewImage Rect rect = viewImage.rect;var screenPos = camera.WorldToScreenPoint(viewImage.transform.position);Debug.Log("screenPos===>" + screenPos);float width = rect.width / 1342 * initScreen.x;float height = rect.height / 640 * initScreen.y;float x = screenPos.x/ _scaleWidth * initScreen.x;float y = screenPos.y/ _scaleHeight * initScreen.y;Debug.Log("x===>" + x  + " y====>" + y + " width===>"+ width+ " height===>"+ height);uniWebView.Frame = new Rect(x- width/2, y- height/2, width, height);}

代码中1342*640 ,这个是我们游戏设置的标准分辨率。所有的UI都以这个分辨率自适应。

好了,导出包测试结果。

哈哈,跟我设置的viewImage一样的位置和大小,赶快来试试吧。

UniWebView3 使用中遇到的坑相关推荐

  1. jQuery Mobile使用中遇到的坑!填坑很难,但很有成就感。。

    jQuery Mobile使用中遇到的坑!填坑很难,但很有成就感.. 最近参与到一个项目的前端开发中,为了提高用户体验使用到了jQuery Mobile.主要是用到了页面过渡效果,这种效果可以做到页面 ...

  2. JAVA加密--AES加密算法JAVA实现及使用中的各种坑,超实用

    1. AES 1.1. 概念 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准. 这个标准用 ...

  3. Hippo4j和DynamicTp动态线程池介绍和使用中遇到的坑

    文章目录 @[toc] 1.前言 1.1Dromara致力于微服务云原生解决方案的组织 1.2 动态线程池的思路 1.3Hippo4j和DynamicTp动态线程池解决什么痛点 2.介绍 2.1Hip ...

  4. AnkiReader 和 Anki 真题助手:Anki 使用中需要避坑的两个软件

    AnkiReader 和 Anki 真题助手:Anki 使用中需要避坑的两个软件 缘由 随着 Anki 的普及,越来越多用户开始尝试使用 Anki 进行学习.然而想要完全掌握 Anki 有相当难度,由 ...

  5. 阿里云直播在实际使用中的一些坑(持续更新中...)

    前言 最近在基于阿里云做直播会议的实践,在使用中遇到了部分坑,在此记录下,提醒自己和同道中人. 具体坑如下: 为了保证推流和拉流的安全性,阿里云是默认开启了鉴权保护的,所以不带auth_key是无法访 ...

  6. Android中动态初始化布局参数以及ConstraintLayout使用中遇到的坑

    Android中动态初始化布局以及ConstraintLayout遇到的一个坑 ConstraintLayout是Android中的一个很强大的布局,它通过控件之间的相对定位,来完成一个layout中 ...

  7. 解决 mklink 使用中的各种坑(硬链接,软链接/符号链接,目录链接)

    通过 mklink 命令可以创建文件或文件夹的链接,而这种链接跟快捷方式是不一样的.然而我们还可能会遇到其使用过程中的一些坑,本文将整理这些坑并提供解决方法. 0x00 背景介绍:mklink mkl ...

  8. php加入队列失败,Laravel队列使用中踩的坑,不报错但是队列一直再重试

    使用方案 使用的Laravel框架提供的队列服务,使用artisan命令来监听队列 使用的是事件队列,定义的Event和Listener如下: TestEvent为触发的事件类, TestListen ...

  9. Redis Hset使用中的小坑

    坑点 Redis Hset 命令用于为哈希表中的字段赋值 . 如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作. 如果字段已经存在于哈希表中,旧值将被覆盖. 返回值 如果字段是哈希表中的一 ...

  10. video标签使用中踩的坑

    最近公司需要在项目中添加视频,并且是用angularjs写的项目,中间遇到了一些坑,在此记录下来. 1.有些html viedo播放视频有声音但是没图像 1.1.MP4有3中编码格式,mpg4(xdi ...

最新文章

  1. 华为机考HJ13句子逆序C语言弱智解法
  2. 程序基本功之遍历二叉树
  3. 记一次MyBatis的错误
  4. 109_Power Pivot客户ABC(帕累托)分析度量值写法(非计算列)
  5. Oculus关于Internal Error:OVR53225466报错解决方法
  6. CSDN 在线峰会——揭晓阿里云核心技术竞争力
  7. 新浪微博:“救命的黄金稻草”
  8. Tomcat8正确配置环境变量详细方法
  9. JxBrowser 7.16 Crack by Xacker
  10. Photoshop 套索工具抠图
  11. 【视频演示】B站视频演示
  12. 家里的网络太慢了,怎么办?
  13. Java工程师(面试)
  14. matlab弹簧振子的阻尼振动,MATLAB计算方法和技巧6_2阻尼振动
  15. matlab 生成色带和彩色图像
  16. 经销商转型为什么要选择移动订货平台?
  17. SQL 语句的多表查询方式
  18. web3默克尔树MerleTree白名单校验
  19. fdma调制解调matlab,信号与系统Matlab实验—频分多址FDMA
  20. 掌上单片机实验室 — 编程环境(3)

热门文章

  1. Angular 图片懒加载
  2. php调用平安银行接口,PHP-Java-Bridge的使用(平安银行支付功能专版)
  3. 算法之数学--常用数学公式,规律神器OEIS 2021-03-09
  4. SHP(shapefile)文件
  5. autojs刷网课之三、知到互动分篇
  6. 手机APP的常见功能测试用例
  7. 软件测试和java,学哪个好?
  8. 元数据 数据元 释义
  9. 软件测试-禅道下载及安装-测试人员必会工具
  10. 手机伪原创视频处理工具 视频md5修改器ios