Unity 多屏(分屏)显示,Muti_Display
 最近项目有个需求,主要用于在展厅的展示游戏。

比如,在一个很大的展厅,很大的显示屏挂在墙上,我们不可能通过操作墙上那块显示器上的按钮来控制游戏。
这时候有一个小的显示器(比如一个控制器或者一个手机)

我们要做的是:挂在墙上的大显示器用来展示3D游戏场景,而所有的UI控制则全部显示在“控制器“上。

这在Unity里面应该怎样实现:
1.先看Unity官方文档
https://docs.unity3d.com/Manual/MultiDisplay.html
有这么一个Muti-Display
Muti-display允许最多8geCamera视图,最多8个不同的显示器显示。可用于PC端游戏,拱屏设备(跟环屏设备一个意思,我猜多),和一些公用的展示设备。其实就一个意思:
也就是只支持PC端。
2.接下来就是一些设置
Set each Camera to display to a specific monitor, using its Inspector. You can assign between 1 and 8 display monitors via theTarget Display option (see Fig. 1). 
对每一个相机进行单独设置显示在指定的显示器上,通过Camera的属性Inspector窗口,你可以通过 Target Display下拉列表来指定1到8的任意显示器。
 
You can then preview each display in the Game View, using the drop-downDisplay menu in the top left-hand corner of the view (see Fig. 2).
 
通过Game视图左上角的Display1下来菜单可以选择你要预览的视图。

note:如果你想要同时预览两个Game视图,在任意标签 右键->Add Tap ->Game,在新的Game视图设置Display2。

3.最后就是激活了。
 
The default display is one monitor, so when you run your application, you need to explicitly activate any additional displays via scripting, using Display.Activate. You need to explicitly activate each additional display and, once activated, you cannot deactivate them.
默认情况下,只有一个显示器,所以当你运行程序的时候,你需要明确地激活额外的显示器,可以通过代码 Display.Activate来实现,需要注意的是,只需要激活一次,一旦激活了,就不能关闭激活状态。

4.请看官方代码。很简单,这里说一点需要注意的就是 Display.displays.Length这个属性,在Editor下,无论你的主机连接了多少个显示器,Display.displays.Length的值都是1。只有打包运行的时候,返回值才是真的连接的显示器个数(当然如果你想测试一下不连显示器看看返回值是多少,你试试,如果有结果记得回来评论,哈哈哈)

简单介绍这么多,说说怎么操作吧。我的Sample是 左边显示器显示一个button,点击button在右边显示器上创建一个Cube.
1.新建项目,新建Scene,默认的即可。在MainCamera的属性窗口 找到TargetDisplay,默认值是Display1,那就让它默认值好了。这个MainCamera主要是用于渲染3D场景的,也就是本Sample中的 “右边显示器”。
2.新建一个Camera 命名为UICamera,在属性窗口,Camera下需要设置两个地方:a.CullingMask,不用多解释了,这里只渲染UI界面,b.TargetDisplay 设置为Display2.

3.创建Button按钮,我这里用的UGUI(新版本的UGUI个人觉得已经很完美了,果断抛弃了NGUI,要做图集,麻烦),UGUI自然会有一个Canvas,是的,Canvas下也有一个TargetDisplay属性,将它设置为Display2,因为我只想让UI在“左边显示器”上显示。
到目前,一切基本就绪了,这时候在Game视图的左上角切换Display1和Display2会看到Display2只有一个Button,切换到Display1时什么都没有(因为MainCamera渲染的场景中什么都没有)。
4.代码。
首先是激活显示器,像上边翻译的一样,然后是点击按钮创建Cube,都是很简单的代码。

using UnityEngine;
using System.Collections;
 
public class NewBehaviourScript : MonoBehaviour {
 
// Use this for initialization
void Start () {
        Debug.Log("displays connected: " + Display.displays.Length);
        // Display.displays[0] 是主显示器, 默认显示并始终在主显示器上显示.        
        // 检查其他显示器是否可用并激活.        
        if (Display.displays.Length > 1)
            Display.displays[1].Activate();
        if (Display.displays.Length > 2)
            Display.displays[2].Activate();
    }
 
// Update is called once per frame
void Update () {
 
}
    
}

最后就是打包发布了。
看下效果吧
按钮在左边显示器
 

Unity 多屏(分屏)显示,Muti_Display的更多相关文章

  1. Unity中Oculus分屏相机和普通相机一键切换

    Unity中Oculus分屏相机和普通相机一键切换 一.OCulus 分屏相机介绍 在VR开发工程中,总会觉得OC分屏的处理太慢,严重浪费时间啊! 但是不使用有不好调试,来回切换相机就成为了一个必须. ...

  2. Unity 相机花式分屏

    花式分屏,顾名思义,可以实现各种不规则几何边界的分屏,是无法直接通过调整相机视口能达到效果的(只能实现矩形的分屏),例如斜对角分屏,几何图形分屏: 假设我们有两个相机,需要上面的斜对角分屏画面,和镜子 ...

  3. vim 分屏显示

    我用vim打开一个文件后,想同时打开另一个文件,就像windows中打开两个记事本一样,因此需要分屏显示 首先用vim打开一个文件 vim file1 输入命令[Esc] :sp file2 分屏打开 ...

  4. 转: Eclipse 分屏显示同一个文件

    Eclipse 分屏显示同一个文件   场景 : 某个类很大,可能有数千行.当你想要将类开头部分与中间或者靠后的部分进行对比时,请follow如下步骤: Window -> Editor -&g ...

  5. c# Winform 开发分屏显示应用程序

    分屏显示即可把一台主机内运行的多个程序分别显示在不同的两个(或多个)屏幕上.目前市面上主流的显卡都支持分屏显示(显示双屏幕),如果需要显示2个以上的屏幕,则应使用“拖机卡”类的硬件. 设置分屏显示的两 ...

  6. Vi编辑器下使用分屏显示【已自己验证所有】

    :new 水平分割出一个新窗口 :vnew,:vne 垂直分割出一个新窗口 :new+文件路径/文件名; 在新的水平分屏中 载入/新建 文件.[文件存在则载入,不存在则在指定的路径新建,下同] :vn ...

  7. linux终端vi同时显示多个文件的分屏操作及切换操作

    以前看到那边分屏操作的觉得很高端,现在初步整理了一下. 这里不是那个用代码实现的分屏,完全属于linux的操作命令 一.打开并显示文件 1.打开 这个不用说了,就是vi xx.c,或者vi xx1.c ...

  8. wpf 制作播放视频的屏保程序、而且能分屏显示

    这个程序用到了WPF里  “visual_Brush”(主要是为了实现分屏显示) , “UserControl” ,这两个知识点: 在屏保状态下播放指定文件夹下的视频,而且能分屏显示: 把编译好的屏保 ...

  9. c# 远程监控(4) 接收端 RTP包重组 分屏显示

    我们在上一期使用RTP协议,并进行了配置,打包了视频数据,这一期我们就对发送的数据进行重组,并显示在接受端上.最后对其进行扩展,支持多客户端视频发送,并在接收端分屏显示.完成远程监控的模拟. 先来个效 ...

随机推荐

  1. WebSocket数据包协议详解

    其实我一直想不明白HTML5包装个应用层办议作为Socket通过基础目的是为了什么,其实直接支持Socket tcp相对来说更加简单灵活.既然标准已经制定而浏览器也支持那对于我们开发者来说只能用的分. ...

  2. CSS - DOM 经常使用方法

    offset() 方法返回或设置匹配元素相对于文档的偏移(位置). 包括两个属性值:top,left. position() 方法返回匹配元素相对于父元素的位置(偏移). 包括两个属性值:top,le ...

  3. PHP流程管理,堪比小小程序

    这个流程管理是从用户登录界面开始,然后提交申请,页面逐级审核通过.这个做起来其实挺简单,只是在某些逻辑方面需要 好好考虑一下. 登录页面就不再多说了,如果要存session的话,我们可以建一个假的登录 ...

  4. Butter Knife使用详解

    Butter Knife Github地址: https://github.com/JakeWharton/butterknife 官方说明给出的解释是 Bind Android views and ...

  5. 如何使用bootstrap

    前言: 前几天,本想做一个登陆界面,但自己写form表单必然很丑,所以想用下bootstarp框架,之前听别人说bootstrap很牛的样子.但我完全不会bootstrap... 下载&目录 ...

  6. Java之路——环境配置与编译运行

    本文大纲 一.开篇 二.JDK下载 三.JDK安装 四.环境配置 五.初识Java编译 六.Java与Javac 七.第一个Java程序 八.总结 九.参考资料 一.开篇 通过对之前Java之路的了解 ...

  7. 老李分享:网页爬虫java实现

    老李分享:网页爬虫java实现   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821 ...

  8. ZEROC ICE 跨平台间程序调用 java版

    前言: 本来建博客是为了和大家分享一些前端的开发经验和心得呢,但是阴差阳错,第一篇技术博客确实关于跨平台,跨语言服务端调用的解决方案---ZEROC ICE. 最近一个项目涉及到java.python ...

  9. 应用程序写Xml文档

    主要用到CreateElement.CreateTextNode.CreateComment.AppendChild.InsertAfter方法 代码如下: XmlDocument document ...

  10. java基础--动态代理实现与原理详细分析

    关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 一.代理模式                     ...