Unity分屏之使⽤TUIO实现互动投影
“两个屏幕,⼀个主屏幕(显⽰器),⼀个投影屏幕(地幕投影或者墙⾯投影)。可以触控投影屏幕来与主屏幕做交互”针对以上这个需求,本篇⽂章主要讲两个内容:
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
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,768
Display.displays[1].Activate(1024, 768, 60);
}
}
之后打包发布到windos,如果电脑接了两个显⽰器,⾃然能看到效果了。
OK到这⾥Unity分屏的功能就实现了。
2.投影互动
投影互动功能其实分为两步
1.我们在投影内操作的时候,如何去接收投影中的操作。
2.我们在得到投影内的反馈后,如何根据反馈去调⽤我们应⽤中的按钮,或者说逻辑。(这块⽐较复杂,我会贴出⼀个链接,详细讲解)
举个栗⼦:我们现在有⼀个投影映射在地⾯上,然后投影内有⼀个按钮,现在把脚放在了这个按钮上⾯,那么怎么知道我的脚是放在了这个按钮上呢。
好,对于这个操作。我们现在就把他分为两步来解析。
第⼀:我们要知道我们的脚已经放⼊了投影当中。
这⾥要⽤到⼀个技术设备:雷达(⾄于牌⼦型号由于⼀些原因不能相告,抱歉。)我们会在地⾯投影
的前⽅摆设⼀个雷达,这个雷达⼀直在360度的转圈扫描,然后把扫描到的物体反馈给我们。但我们需要的其实只有投影区域那⼀块,所以中间做了⼀些逻辑,让雷达最终只反馈存在与投影区域中的物体,然后以坐标(0,0)到(1,1)的形式给我们。
第⼆:我们要知道我们的脚放在了投影中的那个按钮上。
因为第⼀步我们已经得到了脚的反馈,那么第⼆步我们要做的就是如何知道这个反馈正好反馈在了我们的按钮上。
在这⾥我只简单说⼀下逻辑,更详细的算法和使⽤⽅法会贴在后⾯的链接中。
因为我们已经得到了坐标(x,y),由于这个坐标系是0-1的。们还要进⾏⼀次转换,假设地⾯投影的分辨率是1024X768,那么我们就要把这个坐标转换为1024x768坐标系中的坐标。这样我们就得到了⼀个有实际值的坐标。接下来是我们的按钮,我们的按钮也存在与
1024X768这个坐标系中,然后我们只需要拿到这个按钮的坐标和它的⼤⼩,就可以算出他所存在的范围。最后我们拿着我们的脚的坐标和这个范围去进⾏⽐较,如果坐标在范围内。那么我们就视为我们的脚踩住了按钮。
好了这⾥只是⼀个简单的想法逻辑,但具体的实现过程还是稍微有些复杂的。中间还运⽤到了TouchS
cript中的TUIO协议。
略。
这篇⽂档由于时间原因我写的⽐较仓促,写得不好的地⽅还请多多包涵,谢谢(*^_^*)