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

图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,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这个坐标系中,然后我们只需要拿到这个按钮的坐标和它的大小,就可以算出他所存在的范围。最后我们拿着我们的脚的坐标和这个范围去进行比较,如果坐标在范围内。那么我们就视为我们的脚踩住了按钮。

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

略。

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

### TouchDesigner 中实现 TUIO 交互 TUIO (Tangible User Interface Objects) 是一种用于多点触摸和其他形式的人机互动协议。为了在 TouchDesigner 中集成 TUIO 协议并创建触控应用,可以利用 `TDJitter` 和第三方组件来解析来自支持设备的数据流。 #### 创建基本场景结构 首先,在 TouchDesigner 的网络编辑器中构建基础架构: 1. 添加一个新的 CHOP 网络节点命名为 `tuio_input` 2. 将 `CHOP to DAT` 节点连接到该输入源上转换成表格数据以便后续处理[^1] ```touchdesigner op('tuio_input').par.device = 'localhost:3333' ``` 此设置允许接收通过 UDP 发送至指定端口的 TUIO 数据包。 #### 解析 TUIO 消息 对于接收到的信息进一步分析可采用 Python 编程方式完成特定逻辑运算或对象跟踪功能。编写自定义脚本以响应不同类型的事件(如手指点击、移动等),并将这些动作映射给视觉效果或其他媒体输出。 ```python def onCook(scriptOp, inputs): for row in scriptOp.rows(): id = int(row['id']) x = float(row['x']) y = float(row['y']) # Update position of objects based on touch points obj = op(f'object_{id}') if obj is not None: obj.par.tx = x * COMP_WIDTH obj.par.ty = y * COMP_HEIGHT onCook(scriptOp, inputs) ``` 上述代码片段展示了如何读取由 TUIO 输入产生的坐标值,并据此调整对应物体的位置参数[^2]。 #### 构建可视化反馈机制 最后一步是设计直观的表现形式让用户能够清楚感知自己的操作行为。这可能涉及到图形化界面元素的设计以及声音提示等功能模块的选择与组合。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值