Unity使用TUIO协议接入雷达
本篇文章不介绍Unity、TUIO、雷达是什么以及有什么作用。刚接触TUIO的亲们,建议直接硬刚。至于刚接触Unity的亲,这边建议亲直接放弃治疗呢
下面开始正儿八经的教程
需要准备的东西
- Unity(版本我用的2018.2,建议不要太新也不要太老)
- Visual Studio(用不到,但是要有。。。当然其他编辑器也可以,记事本尤佳)
- 一个雷达(当然,调试的时候也可以没有)
- 一个插件TouchScripts
这个插件在Unity的Asset Store上是免费的,可以直接搜索下载,我就不提供了

就是这个东东,建议Store上下载最新的,从他的介绍里面可以看到他是支持tuio的

- 一个工具
这是一个TUIO的模拟工具,我们可以模拟雷达的消息,界面长这个样子的,

这个是Java写的,运行需要先配置java环境
然后附上下载链接 点击后面那坨云下载
提取码:elv6
开始工作
- 导入TouchScripts
我们下载下来之后全部导入

注意,这里要点Go Ahead,不要点No Thanks。人家又没让你捐款,你点什么No Thanks!!!

导完了之后会有一个弹出框,把我们需要的都安排一下…

接下来是浏览欣赏别人的demo时间…
看一下这个牛逼的插件能实现的功能以及基本的使用方法。当然,这是以后的事了,冷静,冷静,我们是要用来接tuio的

2. 启用TUIO
在导入插件的弹框里,我们已经将Enable TUIO给安排上了,说明已经支持TUIO了,接下来是使用
我们直接使用它里面的一个demo来做介绍,比如说就这个

打开之后他是一个类似球球大作战的小游戏,真好玩。。。。
接下来找到这么一个脚本

这个脚本处理tuio的输入,需要把它添加到场景中,但是当你拖到一个gameobject中发现拖不上去,打开脚本发现他被sealed关键字修饰了,简单粗暴的方法当然是直接删掉
删了 
好了,现在可以拖了
然后,就没有然后了,直接看效果

最后,给点小建议
1、不建议使用Drag,上面使用的模拟器当然不会有什么问题,问题是部分雷达可能会出现掉帧的情况,这就导致在拖动过程中物体随时可能会掉。这个你无法避免,只能避免使用Drag这种交互
2、注意产生事件的时间,我们经常用OnButtonDown对应TouchScripts里面的Press事件来检测用户的点击,这种对鼠标用户当然没有问题,问题是雷达在安装的时候不可能像鼠标那样映射的那么准确,以及雷达扫射面与互动面的距离、用户点击姿势不规范等等问题容易导致看起来是点中了一个button,然而实际上并没有,别人就会说你这软件点不动,有问题啊。然而你在测试的时候一点一个准,没问题。然后两人就开始撕逼了。。。。
所以在此先建议尽量把触发区域弄大一点。。。大一点。。。一点。。。点。
3、关于地面互动
地面互动的话建议就不要用事件了。因为人一走进互动区域就一直是Pressed状态,即便踩到一个button,button的Press,Tap事件都不会被触发,因为他的上一个状态还没有被释放。而且你不能期望体验者把脚抬高来释放。所以死穴。我的建议是回归原始,使用射线。具体方法是隔一定时间遍历所以Pressed状态的“指针”(即按下的鼠标以及雷达扫描到的物体,找不到一个合适的词来表达,就用插件提供的“Pointer”吧,然后在指针的位置向世界发送一条射线,看碰撞物。
最后附上我之前写地面互动的一个脚本
using UnityEngine;
using System.Collections;
using TouchScript;
using System.Collections.Generic; /// <summary>
/// 这是一个土得掉渣的步步生花
/// </summary>
public class FlowerSpawner : MonoBehaviour
{ /// <summary>
/// 花的预制体
/// </summary>
public GameObject FlowerPerfab; /// <summary>
/// 软件扫描的频率
/// </summary>
public float Rate = ;
private float time;
/// <summary>
/// 用来发射射线的摄像机
/// </summary>
public Camera EventCamera;
public void Start()
{
time = 1f / Rate;
StartCoroutine(Spawner());
} private IEnumerator Spawner()
{
while (true)
{
///时间间隔小于Time.deltaTime没有意义
if(time < Time.deltaTime)
time = Time.deltaTime; Check();
yield return new WaitForSeconds(time);
}
} private void Check()
{
///遍历所有按下状态的指针
IList<TouchScript.Pointers.Pointer> PressedPointers = TouchManager.Instance.PressedPointers;
foreach(TouchScript.Pointers.Pointer pointer in PressedPointers)
{
///向每个指针发送射线
ToRay(pointer.Position);
}
} /// <summary>
/// 根据点击屏幕的位置发送射线
/// </summary>
/// <param name="position"></param>
private void ToRay(Vector2 position)
{
Ray ray = EventCamera.ScreenPointToRay(position);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
///不要重复生成
///
///这里可以做一下比较,看一下点中(踩中)的是什么,看你的逻辑
//hit.collider.tag == "" }
else
{
Vector3 spawnerPos = EventCamera.ScreenToWorldPoint(new Vector3(position.x, position.y, ));
GameObject go = Instantiate(FlowerPerfab);//这里为了方便演示直接实例化了,建议用池子
go.transform.position = spawnerPos;
}
}
}
Unity使用TUIO协议接入雷达的更多相关文章
- [Micropython][ESP8266] TPYBoard V202 之MQTT协议接入OneNET云平台
随着移动互联网的发展,MQTT由于开放源代码,耗电量小等特点,将会在移动消息推送领域会有更多的贡献,在物联网领域,传感器与服务器的通信,信息的收集,MQTT都可以作为考虑的方案之一.在未来MQTT会进 ...
- Unity 3D 离线协议
在联网状态下,获得离线协议,然后导入到Untiy的协议管理器里. 以后在断网的情况下,也能离线使用Unity. 步骤: 1.生成 Request 文件.(Unity_v5.3.1f1.alf) 1) ...
- 【Unity游戏开发】接入UWA_GOT的iOS版SDK以后无法正常出包
一.正文 问: RT,最近有看到UWA_GOT工具新增了iOS版本的支持,于是下载了最新的工具包进行了接入测试.是按照文档直接将UWA_GOTv2.0.1_iOS.unitypackage导入进了Un ...
- (四) 天猫精灵接入Home Assistant-ESP-WIFI模块通过mqtt协议接入HASS
总过程 1 ESP8266上电后,初始化 连接MQTT服务器 发布自身配置信息----hass自动发现该设备 订阅hass的命令话题---接收命令 发布hass的状态话题---返回自身状态 2 ESP ...
- 关于Darwin接入私有协议、私有SDK码流的讨论
最近做到云视频/云监控的项目,跟团队伙伴讨论到一个架构问题,就是将私有协议的码流数据接入到Darwin,再通过Darwin对外提供高效的RTSP/RTP服务.说到私有协议接入Darwin, ...
- 一篇文章为你深度解析HTTPS 协议
一.前言 微信小程序如期发布,开发者在接入微信小程序过程中,会遇到以下问题: 小程序要求必须通过 HTTPS 完成与服务端通信,若开发者选择自行搭建 HTTPS 服务,那需要自行 SSL 证书申请.部 ...
- 转:HTTPS 协议
作者简介:罗成 腾讯云资深研发工程师 一.微信小程序接入的困境 农历新年将至,微信小程序也如期发布,开发者在接入微信小程序过程中,会遇到以下问题: 小程序要求必须通过 HTTPS 完成与服务端通信,若 ...
- Cas 服务器 使用HTTP协议对外服务
在上篇博文<Cas 服务器 下载.编译及部署>Cas启动后默认支持HTTPS连接,如果要使用使用HTTP连接访问,则会收到以下信息: 注:本文是将Cas服务器运行在Http协议模式下,非设 ...
- CoAP、MQTT、RESTful协议区别
/********************************************************************** * CoAP.MQTT.RESTful协议区别 * 说明 ...
随机推荐
- cf 506 A. Mr. Kitayuta, the Treasure Hunter
不知道这个sb题怎么做错了.. /*#include <bits/stdc++.h> #define LL long long using namespace std; inline in ...
- Ubuntu跨版本安装软件
更新到Ubuntu 19.10之后,源里的Goldendict就会不时的崩溃,让我十分心累.过了这么长时间也一直没有更新,估计在20.04之前是不会更新了.这段时间因为疫情不能出门,正好看看这个问题, ...
- thinkphp调用sqlserver储存过程返回多个结果集
首先安装扩展 windows 分为两个步骤 找到对应自己PHP版本的pdo扩展,下载解压出来,并且在php.ini里面启用扩展,需要注意的问题是php版本以及是否为安全版本 下载 ODBC Drive ...
- 女神说不能每张照片P的一样,所以朋友圈开三天可见,用Python一步解决
大家好,我是小三十三,一个刚恰完午饭,正在用刷网页浪费生命的蒟蒻... 一堆堆无聊八卦信息的网页内容慢慢使我的双眼模糊,一个哈欠打出了三斤老泪,就在此时我看到了一张图片: ! 是谁!是谁把我女朋友的照 ...
- 099-PHP二维数组的元素输出二
<?php $stu=array(array(76,87,68), array(65,89,95), array(90,80,66), array(90,95,65)); //定义一个二维数组 ...
- 深度解析Critical Thinking的四个阶段
关于批判性思维我们一直都在讨论学习,但是小编相信没有几个留学生敢说自己有Critical Thinking,但它又是essay写作中必须存在的.那么批判性思维需要怎么培养呢?今天小编就给同学们分析一下 ...
- 前端第四篇---前端基础之jQuery
前端第四篇---前端基础之jQuery 一.jQuery介绍 二.jQuery对象 三.jQuery基础语法 四.事件 五.动画效果 六.补充each 一.jQuery简介 1.jQuery介绍 jQ ...
- android 开发学习3
DAO:DATA ACCESS OBJECT getApplication()和MainActivity.this 是两种不同的context,也是最常见的两种.第一种中context的生命周期与Ap ...
- Linux学习《第二章命令》本章小结
经过这一章的学习,了解了常用的命令.这是学习Linux系统最最基础的工作,必须努力掌握,个人觉得,并不是这个章节学习结束之后,命令的学习就结束了,而是刚刚开始,今后在每个知识点学习过程中,都会 学习到 ...
- ubuntu在虚拟机下的安装 ~~~ Hadoop的安装及配置 ~~~ Hdfs中eclipse的安装
前言 Hadoop是基于Java语言开发的,具有很好跨平台的特性.Hadoop的所要求系统环境适用于Windows,Linux,Mac系统,我们推荐选择使用Linux或Mac系统.而Linux系统则 ...