Unity实用功能之使用Display分屏及获取屏幕号 | 您所在的位置:网站首页 › iphone143分屏 › Unity实用功能之使用Display分屏及获取屏幕号 |
这是我参与8月更文挑战的第9天,活动详情查看:8月更文挑战 概述在日常开发中,经常会遇到多屏幕开发,就是所谓的分屏。本片文章就主要介绍一下,在Unity中如何使用分屏功能,以及如何获取当前鼠标点击的是哪一个屏幕。 功能实现在Unity中使用分屏功能方法有很多种,这个需要根据项目需求具体分析,本篇文章主要使用的是多摄像机分屏,共分为五个屏幕。 分屏场景搭建在Unity中创建五个摄像机,五个Canvas 然后修改相机和Canvas参数,这里面都是修改Target Display,只有修改成对应的Display,canvas上的内容才会显示在UI应的相机屏幕中
接下来就是修改Game视图中的Dispay,只有Game视图中的Display也修改了才能显示对应的摄像机画面 Unity官方文档地址 官方文档中叫 Multi-display,其解释为可以使用多显示器同时在最多八个不同的监视器上显示最多八个不同的应用程序视图。可以将其用于 PC 游戏、街机游戏机或公共显示装置等设置。 Unity 支持多显示器: 独立平台(Windows、macOS X 和 Linux) Android(OpenGL ES 和 Vulkan) IOS UnityDisplay分屏目前最多支持8个屏幕
更多有关Display的方法请查看光放API 获取屏幕号这里有一点需要注意的就是 Display.displays.Length这个属性,在Editor下,无论你的主机连接了多少个显示器,Display.displays.Length的值都是1。只有打包运行的时候,返回值才是真的连接的显示器个数。 我们获取屏幕号的方法主要的思路就是。通过鼠标在屏幕中的位置,然后除以分辨率的宽度进行获取。但是这里面有点坑的是,在Editor模式下和打包出来的模式下,不太一样。 我们用到的是鼠标的Input.mousePosition,而这个是以屏幕的左下角为(0,0),右上角为顶点。在打包出来的时候鼠标的范围应该是(0,0)-(9600,1080)。这里我的电脑屏幕是1920*1080的分辨率,所以五个屏幕连起来鼠标的最大坐标为(9600,1080)。 其实写到这里,都很好计算屏幕序号,鼠标的x轴的值/单个屏幕的宽度+1就是当前的屏幕序号,但是有时候会有小数出现,所以我们要向下取整。代码如下 sceneNumber = (int)Mathf.Floor(mousePosition.x / (float)SceneWidth) + 1; 复制代码到这里,屏幕序号就获取到了(打包之后的程序),那么该如何获取鼠标在该屏幕上的位置呢,其实也很简单,只要知道了是第几个屏幕,鼠标的横坐标减去相对应个屏幕宽度即可。 Vector3 pos =new Vector3(mousePosition.x- (SceneWidth*(sceneNumber-1)), mousePosition.y, mousePosition.z); 复制代码 坑来了上面打包状态下屏幕号获取非常容易,那么在Editor下呢?是否也一样?答案是否定的。。。 当你使用上述代码的时候你会发现,计算到的屏幕号就不一定是多少了,负数都有可能。那是因为,在编辑器状态下,会默认一个屏幕(Game视图)为主屏幕,鼠标位置是以该屏幕的左下角为(0,0),右上角为(1920,1080)所以超出的部分有可能是正有可能是特别大。比如下图,鼠标位置已经负1000多了,显然不对
首先确定屏幕一 if (Input.GetMouseButtonDown(0)) { if (!isSureScene1) { isSureScene1 = true; sceneNumber = 1; } } 复制代码然后记录鼠标的位置,上一次和当前的 //记录鼠标位置(横坐标X值,用于计算屏幕号) positions[0] = positions[1]; positions[1] = Input.mousePosition.x; 复制代码然后计算屏幕号,比打包的能复杂点,也仅仅是一点,仅仅就是变为了在当前屏幕号的基础上加上计算的屏幕号 /// /// 通过鼠标位置计算屏幕号 /// /// void GetSceneNumberFromMousePosition() { sceneNumber += (int)Mathf.Floor(positions[0] / (float)SceneWidth); } 复制代码这样就能够完美的解决了在编辑器状态下无法获取屏幕号的问题了,就能够直接通过屏幕号获取摄像机,然后就可以用来发射射线等功能了。 效果如下: 此方法还不是很完善,但是在Unity这个使用已经是足够了,缺点就是对分辨率有要求,分辨率要相同才行,其次就是,在Editor下,game视图要保证大小差不多,并别摆放,就上上图那样,的否则会计算错误。 写在最后所有分享的内容均为作者在日常开发过程中使用过的各种小功能点,分享出来也变相的回顾一下,如有写的不好的地方还请多多指教。Demo源码会在之后整理好之后分享给大家。欢迎大家相互学习进步。 |
CopyRight 2018-2019 实验室设备网 版权所有 |