Unity分屏之使用TUIO实现互动投影

news/2024/10/20 3:39:23/

“两个屏幕,一个主屏幕(显示器),一个投影屏幕(地幕投影或者墙面投影)。可以触控投影屏幕来与主屏幕做交互”

针对以上这个需求,本篇文章主要讲两个内容:
1.Unity项目分屏

2.Unity项目触控投影

 

一:工具介绍


编辑器:Unity(2018.1.2f1 (64-bit))(编辑游戏场景实现整个游戏逻辑)

插件:TouchScript(9.0)(使用其TUIO协议实现投影交互)

 

二:功能实现


1.Unity分屏

分屏其实很简单,Unity官方就有Multi-display功能,最多支持1-8个显示器。官方文档:地址

在这里我只做两个显示器的分屏显示。

必要基础配置:两个Game视图两个Camera,两个Canvas

1.Game视图配置

添加一个新的Game视图

然后进行分辨率设置,我的设置是主屏(Display1)为(1920x1080),分屏(Display2)为(1024x768)

2.Camera相机设置

场景自带一个Main Camera(主屏相机),然后再新建一个相机改名为Less Camera(分屏相机)

之后设置相机的Target Display,对应的是Game视图里的Display

图1:具有目标显示选项的Camera Inspector

 

Main Camera设置成Display1,Less Camera设置成Display2

3.Canvas画布设置

新建两个画布CanvasMain和CanvasLess

Render Mode设置为Screen Space-Overlay

Target Display设置为对应的Display  CanvasMain为Display1。CanvasLess为Display2。

UI Scale Mode设置为Scale With Screen Size

Reference Resolution设置对应的分辨率 CanvasMain为1920 x 1080。CanvasLess为1024 x 768。

4.激活双屏

配置都好了之后最后一步就差激活了。

激活方式很简单,就一段代码。

    private void Awake(){if (Display.displays.Length > 1){//激活分屏并设置分辨率为1024,768Display.displays[1].Activate(1024, 768, 60);}}

之后打包发布到windos,如果电脑接了两个显示器,自然能看到效果了。

OK到这里Unity分屏的功能就实现了。

 

2.投影互动

投影互动功能其实分为两步

1.我们在投影内操作的时候,如何去接收投影中的操作。

2.我们在得到投影内的反馈后,如何根据反馈去调用我们应用中的按钮,或者说逻辑。(这块比较复杂,我会贴出一个链接,详细讲解)

 

举个栗子:我们现在有一个投影映射在地面上,然后投影内有一个按钮,现在把脚放在了这个按钮上面,那么怎么知道我的脚是放在了这个按钮上呢。

好,对于这个操作。我们现在就把他分为两步来解析。


第一:我们要知道我们的脚已经放入了投影当中。

这里要用到一个技术设备:雷达(至于牌子型号由于一些原因不能相告,抱歉。)我们会在地面投影的前方摆设一个雷达,这个雷达一直在360度的转圈扫描,然后把扫描到的物体反馈给我们。但我们需要的其实只有投影区域那一块,所以中间做了一些逻辑,让雷达最终只反馈存在与投影区域中的物体,然后以坐标(0,0)到(1,1)的形式给我们。

第二:我们要知道我们的脚放在了投影中的那个按钮上。

因为第一步我们已经得到了脚的反馈,那么第二步我们要做的就是如何知道这个反馈正好反馈在了我们的按钮上。

在这里我只简单说一下逻辑,更详细的算法和使用方法会贴在后面的链接中。

因为我们已经得到了坐标(x,y),由于这个坐标系是0-1的。们还要进行一次转换,假设地面投影的分辨率是1024X768,那么我们就要把这个坐标转换为1024x768坐标系中的坐标。这样我们就得到了一个有实际值的坐标。接下来是我们的按钮,我们的按钮也存在与1024X768这个坐标系中,然后我们只需要拿到这个按钮的坐标和它的大小,就可以算出他所存在的范围。最后我们拿着我们的脚的坐标和这个范围去进行比较,如果坐标在范围内。那么我们就视为我们的脚踩住了按钮。

好了这里只是一个简单的想法逻辑,但具体的实现过程还是稍微有些复杂的。中间还运用到了TouchScript中的TUIO协议。

略。

这篇文档由于时间原因我写的比较仓促,写得不好的地方还请多多包涵,谢谢(*^_^*)


http://www.ppmy.cn/news/203311.html

相关文章

大学计算机技术知识大全,大学计算机全章节重点基础知识归纳大全.doc

大学计算机全章节重点基础知识归纳大全 PAGE \* MERGEFORMAT 18 大学计算机基础重点归纳 第一章:计算机概论 19646年,第一台计算机,ENIAC 计算机分类(6):巨型,小巨型,大型主机,小型机&#xff0…

Pangolin库学习大全

目录 1 Pangolin介绍 2.安装 3 常见方法 3.1 创建窗口 3.2 glEnable()启用各种功能。 3.3 glBlendFunc()颜色混合 3.4 pangolin::OpenGlRenderState构建观察相机对象 3.5 交互视图(View) 3.6 pangolin::ShouldQuit()检测是否关闭OpenGL窗口 3.7…

java面试大全

1、JDK 和 JRE 有什么区别? JDK(Java Development Kit),Java开发工具包 JRE(Java Runtime Environment),Java运行环境 JDK中包含JRE,JDK中有一个名为jre的目录,里面包含两…

文件后缀大全

知乎找的大神,如有抄袭请告知!!! 按照字母顺序排列: A开头: ACE:Ace压缩档案格式; ACT:Microsoft office助手文件; AIF,AIFF:音频…

ShaderGraph节点大全

最近事情比较杂乱学习的内容也比较零散,所以也没怎么拿出来和大家分享。之前一直是代码编写Shader,ShaderGraph出了很久了,一直被我无视了,最近学习了一下ShaderGraph感觉真的让我又有了很多新的想法,在很多效果实现方…

PS快捷键大全

一、工具箱(多种工具共用一个快捷键的可同时按【Shift】加此快捷键选取) 矩形、椭圆选框工具 【M】 移动工具 【V】 套索、多边形套索、磁性套索 【L】 魔棒工具 【W】 裁剪工具 【C】 切片工具、切片选择工具 【K】 喷枪工具 【J】 画笔工具、铅笔工具 【B】 像皮图章…

【无人机知识】吐血整理:史上最全最完整的飞机基本参数名称详解

飞机基本参数大全: 机翼(airfoil):产生飞行所需升力,支持飞机在空中飞行,也有稳定操纵的作用。副翼(aileron):是指安装在机翼翼梢后缘的一小块可动的翼面。飞行员操纵左右副翼差动偏转所产生的滚转力矩可以使飞机做横滚机动。机身(fuselage):装载机组成员、旅客、货…

Linux命令大全完整版

Linux命令大全完整版 目 录 I 1. linux系统管理命令 1 adduser 1 chfn(change finger information) 1 chsh(change shell) 1 date 2 exit 3 finger 4 free 5 fwhois 5 gitps(gnu interactive tools process status) 5 groupdel(group delete) 6 groupmod(group modify) 6 halt …