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. Angular2发布思路(整理官网Deployment页面)

    本文是按着ng2官网的高级内容“Deployment”的思路整理得出的,原文虽然在angular2的中文站下挂着,截止目前却还是英文版未翻译,笔者就在这里结合自己的理解给出原文的一点点整理.这是原文地 ...

  2. ZJOI2017 Day1

    私のZJOI Day1 2017-3-21 07:52:53 有人在暴力膜 苟-- 富贵 无相忘 ZJOI2017交流群 133135071 如果你足够厉害 如果你足够厉害 如果你足够厉害 其实完全可 ...

  3. postman断言作用及怎么使用

    这段时间一直在学习postman,在请求中使用断言,很多人不是很了解postman断言,其实呢,postman断言是JavaScript语言编写的,在postman客户端指定区域编写即可. 1.设置环 ...

  4. Eclipse配置Struts2.x

    问了我同学现在JavaWeb主流框架是哪些.他说基本框架是SSH,struts2+spring+hibernate,流行的是SSM,springmvc+spring+mybatis,原本计划学下Str ...

  5. 转:java实例化对象的过程

    学习JAVA这门面向对象的语言,实质就是不断地创建类,并把类实例化为对象并调用方法.对于初学JAVA的人总搞清楚对象是如何实例化的,假如类之间存在继承关系,那就更糊涂了.下面我们通过两个例题来说明对象 ...

  6. iphone与安卓的兼容性问题汇总

    1.日期问题 当使用yyyy-mm-dd格式时,iphone不认,安卓没问题 解决办法:new Date(res.data[i].inventoryDate.replace(/-/g, "/ ...

  7. JAVA优化建议

    前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用, ...

  8. HTML5 WebSocket和后端C#通信

    1.使用 HTML5 开发离线应用 http://www.ibm.com/developerworks/cn/web/1011_guozb_html5off/ 2.利用html 5 websocket ...

  9. 《Java Performance》笔记1——性能分析基础 2

    4.内存使用率: 内存使用率的相关属性包括页面调度或页面交换.加锁.线程迁移中的让步式和抢占式上下文切换. 当应用运行所需的内存超过可用物理内存时,就会发生内存页面交换,系统在进行页面交换或使用虚拟内 ...

  10. CSS基础布局--居中对齐,左侧定宽右侧自适应

    CSS页面布局是web前端开发的最基本的技能,本文将介绍一些常见的布局方法,涉及到盒子布局,column布局,flex布局等内容.本文中,你可以看到一些水平垂直居中的方法,左侧固定宽度,右侧自适应的一 ...