生活随笔
收集整理的這篇文章主要介紹了
UniWebView3 使用中遇到的坑
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
## **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 使用中遇到的坑的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。