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. Eclipse配置Struts2.x

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

  2. cuda学习笔记——deviceQuery

    main(int argc, char **argv):argc是参数个数,**argv具体的参数,第0个是程序全名 cudaError_t类型:记录cuda错误,值为cudaSuccess则正确执行 ...

  3. css 层叠式样式表

    内联样式:样式优先级最高的 <div style="width:100px;height:100px;"></div> style=“” 用冒号和分号 wi ...

  4. shell中的条件表达式

    条件表达式返回的结果都为布尔型 真为1,假为0 条件测试的表达式 [expression] [[expression]] test expression 这三种条件表达式的效果是一样的 比较符 整数比 ...

  5. IOS开发创建开发证书及发布App应用(五)——编译应用

    5.编译应用 最近升级ios7,一直没有时间写,终于搞完了,完成之前没有完成的工作 由于适配ios7,所以Xcode也升级到5了,所以下面截图基本在Xcode5上,以前的版本基本也差不多的 打开项目的 ...

  6. 【Electron】Electron开发入门(一):开发环境搭建

    刚接触Electron+js开发PC端桌面应用程序的时候,简直一头雾水,搜了网上很多教程,有的要么讲的零零碎碎,要么就是版本太低,很多API语法都不能用了:现在我把一些有用的教程归纳一下,并把目前最新 ...

  7. 使用关系型数据库作为Redis落地的思路

    Redis的持久化方式主要有2种:RDB和AOF,但各有不足,同时Redis没有SQL支持,Redis本身提供的命令不足以实现大多数SQL查询需求,对后期运营的分析需求支撑不足.此外,对于游戏来说,活 ...

  8. JAVA 发送邮件代码---发送文本内容: 内容使用\n 进行换行

    依赖包:mail.jar JAR链接地址: http://pan.baidu.com/s/1o8LNl0Y 密码: ja52 package mail; import java.util.Proper ...

  9. Ubuntu 分辨率调整及操作问题解决

    步骤: 1.在控制窗口上:点击  设备--->安装则鞥强功能:如图1: 若点击后出现图2的情况,则在左边找到光盘图标,右键-->弹出(图3): 然后再重复本步骤: 图1 图2 图3 2.在 ...

  10. 机器学习-scikit learn学习笔记

    scikit-learn官网:http://scikit-learn.org/stable/ 通常情况下,一个学习问题会包含一组学习样本数据,计算机通过对样本数据的学习,尝试对未知数据进行预测. 学习 ...