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. (15)IO流之File

    File类用封装了一个文件夹或者文件的所有属性. File类的构造方法: File(String pathname) 指定文件或者文件夹的路径创建一个File文件 File(File parent, ...

  2. Android Things教程:电气基础之直流电路理论

    译者注:由于本人水平有限,译文中难免会出现概念模糊.晦涩难懂,如果实在没心思看下去,请发挥你的学习能动性,到原文中自行翻译,感谢!!!点这里,直达英文各种长句的世界. 好了,既然你选择继续往下看,那就 ...

  3. javascript中常用的

    1.javascript中构造equals().trim()方法并应用 String.prototype.Trim = function() { return this.replace(/(^\s*) ...

  4. 前端学PHP之Smarty模板引擎

    前面的话 对PHP来说,有很多模板引擎可供选择,但Smarty是一个使用PHP编写出来的,是业界最著名.功能最强大的一种PHP模板引擎.Smarty像PHP一样拥有丰富的函数库,从统计字数到自动缩进. ...

  5. JS-DOM . 01 简单了解DOM

    DOM概述 html加载完毕,渲染引擎会在内存中把html文档生成一个DOM树,getElementById是获取内DOM上的元素,然后操作的时候修改的是该元素的属性 体验事件/事件三要素1.事件源( ...

  6. TensorFlow安装-windows系统

    官方各版本的安装说明:https://www.tensorflow.org/install/ 本文介绍如何在windows环境下安装tensorflow, 跑起来简单的demo. 1.安装python ...

  7. js的几种简单排序算法及其效率实测

    function swap(arr,index1,index2){ var t = arr[index1]; arr[index1] = arr[index2]; arr[index2] = t; } ...

  8. 解决Appium 抓取toast

    首先我们先看看这个gif,图中需要,要抓取的字符串--->请输入转让份数 1.要导入java-client-5.0.0-SNAPSHOT.jar 包的地址:链接:http://pan.baidu ...

  9. React-Native 之 项目实战(三)

    前言 本文有配套视频,可以酌情观看. 文中内容因各人理解不同,可能会有所偏差,欢迎朋友们联系我. 文中所有内容仅供学习交流之用,不可用于商业用途,如因此引起的相关法律法规责任,与我无关. 如文中内容对 ...

  10. iOS关于友盟分享弹不出面板问题

    在程序代理类中声明 [NSThread sleepForTimeInterval:10];//设置启动页面时间 [self.window makeKeyAndVisible]; [[UMSocialM ...