当前位置:   article > 正文

unity动态设置webgl屏幕分辨率(最大或者自定义大小)_unity webgl 获取浏览器显示分辨率

unity webgl 获取浏览器显示分辨率

思路:从通过jslib插件从浏览器中获取屏幕分辨率数据,然后将数据传回Unity通过Screen.SetResolution()函数设置画布大小。

1.编写jslib插件中获取分辨率大小代码(jslib插件编写方法具体可以去看官方文档,里面描写比较细致),分别获取高和宽:

	GetWindowWidth:function()
	{
		//屏幕宽度 var width = window.screen.width;
		var width = window.screen.availWidth
		return width;
	},
	
	GetWindowHeight:function()
	{
		// 屏幕高度 var height = window.screen.height;
		var height = window.screen.availHeight;//浏览器可用高度,减去工具栏、地址输入框等
		return height;
	},
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

因为window.screen.height是获取整个屏幕的高度不太符合我们的需求,所以没用这个方法;
window.screen.availHeight //浏览器可用高度,减去工具栏、地址输入框等
window.screen.availWidth//浏览器可用宽度,减去工具栏、地址输入框等

2.Unity项目中C#编写调用GetWindowWidth、GetWindowHeight的方法获取分辨率数据。

		[DllImport("__Internal")]
        private static extern int GetWindowWidth();

        [DllImport("__Internal")]
        private static extern int GetWindowHeight();
        
        //获取到窗口可用大小
		public static Vector2 GetWindowSize()
        {
            int w = GetWindowWidth();
            int h = GetWindowHeight();
            return new Vector2(w, h);
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3.继续再jslib插件中添加修改画布大小的代码。因为如果没有在html页面修改画布大小的话直接在Unity中调用Screen.SetResolution()函数并不会有效果。在jslib文件中添加代码设置页面大小:

ResetCanvasSize:function(width,height)
{
	//修改画布大小
	document.getElementById("unityContainer").style.width = width + "px";
	document.getElementById("unityContainer").style.height = height + "px";
	},
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

getElementById(“unityContainer”)这段代码在不同版本的Unity中getElementById()函数使用的参数是不同的,我的版本是2019.3.14,所以使用"unityContainer"。具体的传参值可以打开你安装相应版本的unity打包webgl项目出来的index.html中id对应的字符串:
在这里插入图片描述
在这里插入图片描述
4.Unity项目中添加调用设置画布大小代码:

[DllImport("__Internal")]
private static extern void ResetCanvasSize(int width, int height);

//设置自定义分辨率
public static void SetCustonCanvasSize(int width, int height)
{
	ResetCanvasSize(width, height);
	Screen.SetResolution(width, height, false);
}

//设置最大屏幕适配分辨率
public static void SetCanvasMaxSize() 
{
    Vector2 vector2 = GetWindowSize();
    int width, height;
    if (vector2.x / vector2.y > 1.77)  //1.77 = 16/9;//16:9画布比例
    {
        width = (int)(vector2.y * 1.77);
        height = (int)vector2.y;
        ResetCanvasSize(width, height);
    }
    else 
    {
        width = (int)(vector2.x);
        height = (int)(vector2.x / 1.77);
        ResetCanvasSize(width, height);
    }
    Screen.SetResolution(width, height, false);
}
  • 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
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/86525
推荐阅读
相关标签
  

闽ICP备14008679号