Class
ObjectInfo
属性 | 说明 | 类型 |
---|---|---|
name | 为开发者工具DevTool窗口中模具的Name。 检测到其他未知模型时,name为恒定值"unknown" | string |
id | 模具的id (当影见投影区域内存在多个相同模具时通过此id来进行区分) | int |
height | 模具的高度(单位:mm) | float |
hover | 模具是否被手遮挡 | bool |
press | 模具当前是否被点击 | bool |
position | 模具当前在投影仪坐标系下的位置(单位:m),未知物体的position为空 | Vector3 |
quaternion | 模具当前在投影仪坐标系下的旋转姿态,未知物体的quaternion为空 | Quaternion |
contourPoints | 模具当前在屏幕坐标系下的轮廓点(单位:像素),如果没有开启轮廓点则为null | List<Vector2> |
public class ObjectInfoDemo : AURABehaviour
{
#region 继承自AURABehaviour的脚本中如果声明了Awake函数或者OnDestroy函数,则Awake函数中必须加入base.Awake()或base.OnDestroy()以确保识别功能正常执行
void Awake()
{
base.Awake;
//你的代码
}
void OnDestroy()
{
base.OnDestroy;
//你的代码
}
#endregion
List contourPoints = new List();
void AURABehaviour_OnObjectDetected(ObjectInfo objectInfo)
{
Debug.Log("检测到模具:" + objectInfo.name + "ID为:" + objectInfo.id + "Position:" + objectInfo.position + "Quaternion:" + objectInfo.quaternion);
contourPoints = objectInfo.contourPoints;
}
void AURABehaviour_OnObjectUpdated(ObjectInfo objectInfo)
{
Debug.Log("模具位置姿态更新:" + objectInfo.name + "ID为:" + objectInfo.id + "Position:" + objectInfo.position + "Quaternion:" + objectInfo.quaternion);
contourPoints = objectInfo.contourPoints;
}
void AURABehaviour_OnObjectLost(ObjectInfo objectInfo)
{
Debug.Log("丢失模具:" + objectInfo.name + "ID为:" + objectInfo.id);
}
void OnGUI()
{
foreach(Vector2 contourPoint in contourPoints)
{
GUI.Button(new Rect(contourPoint,new Vector2(30,30)),"");
}
}
}
ImageInfo
属性 | 说明 | 类型 |
---|---|---|
name | 为开发者工具窗口中图像的Name | string |
contourPoints | 模具的四个轮廓点(单位:像素),如果没有开启轮廓点则为null | List<Vector2> |
public class ImageInfoDemo : AURABehaviour
{
#region 继承自AURABehaviour的脚本中如果声明了Awake函数或者OnDestroy函数,则Awake函数中必须加入base.Awake()或base.OnDestroy()以确保识别功能正常执行
void Awake()
{
base.Awake;
//你的代码
}
void OnDestroy()
{
base.OnDestroy;
//你的代码
}
#endregion
List contourPoints = new List();
void OnImageDetected(ImageInfo imageInfo)
{
Debug.Log("检测到图像:" + imageInfo.name);
contourPoints = imageInfo.contourPoints;
}
void OnImageUpdated(ImageInfo imageInfo)
{
Debug.Log("图像位置姿态更新:" + imageInfo.name);
contourPoints = imageInfo.contourPoints;
}
void OnImageLost(ImageInfo imageInfo)
{
Debug.Log("丢失图像:" + imageInfo.name);
}
void OnGUI()
{
foreach(Vector2 contourPoint in contourPoints)
{
GUI.Button(new Rect(contourPoint,new Vector2(30,30)),"");
}
}
}
AURAInput
用于获得场景中的手的信息,包括手掌和手指的信息
属性 | 说明 | 类型 |
---|---|---|
mainPalm | 当前场景中第一个被检测到的手的信息 | Palm |
palmCount | 当前场景中检测到的手掌数量 | int |
palms | 当前场景中所有手的信息 | List<palm> |
Gesture
属性 | 说明 | 类型 |
---|---|---|
wave | 挥手手势,类型 | WaveState |
grasp | 握拳、摊掌手势 | GraspState |
WaveState
属性 | 说明 |
---|---|
None | 没有挥手 |
Right | 向右挥手 |
Left | 向左挥手 |
GraspState
属性 | 说明 |
---|---|
None | 没有操作 |
CloseFist | 握拳 |
OpenPalm | 摊开手掌 |
public class ObjectInfoDemo : AURABehaviour
{
#region 继承自AURABehaviour的脚本中如果声明了Awake函数或者OnDestroy函数,则Awake函数中必须加入base.Awake()或base.OnDestroy()以确保识别功能正常执行
void Awake()
{
base.Awake;
//你的代码
}
void OnDestroy()
{
base.OnDestroy;
//你的代码
}
#endregion
List contourPoints = new List();
void AURABehaviour_OnObjectDetected(ObjectInfo objectInfo)
{
Debug.Log("检测到模具:" + objectInfo.name + "ID为:" + objectInfo.id + "Position:" + objectInfo.position + "Quaternion:" + objectInfo.quaternion);
contourPoints = objectInfo.contourPoints;
}
void AURABehaviour_OnObjectUpdated(ObjectInfo objectInfo)
{
Debug.Log("模具位置姿态更新:" + objectInfo.name + "ID为:" + objectInfo.id + "Position:" + objectInfo.position + "Quaternion:" + objectInfo.quaternion);
contourPoints = objectInfo.contourPoints;
}
void AURABehaviour_OnObjectLost(ObjectInfo objectInfo)
{
Debug.Log("丢失模具:" + objectInfo.name + "ID为:" + objectInfo.id);
}
void OnGUI()
{
foreach(Vector2 contourPoint in contourPoints)
{
GUI.Button(new Rect(contourPoint,new Vector2(30,30)),"");
}
}
}
Palm
手掌信息
属性 | 说明 | 类型 |
---|---|---|
position3D | 当前掌心点在投影仪坐标系下的位置 | Vector3 |
position2D | 当前掌心点在屏幕坐标系下的位置 | Vector2 |
fingerCount | 当前点击的手所使用的手指数量 | int |
fingertips | 手指点击的位置 | List<Fingertip> |
Fingertip
手指信息(对于3288型,手在空中时没有手指信息)
属性 | 说明 | 类型 |
---|---|---|
position3D | 当前手指点击在投影仪坐标系下的位置 | Vector3 |
position2D | 当前手指点击在屏幕坐标系下的位置 | Vector2 |
angle | 手指点击的水平方向倾角 | float |
dip | 手指点击的竖直方向倾角 | float |
touch | 手指是否点击到桌面 | bool |
AURABehaviour
AURA基本交互类,需要获得AURA模型和图像数据的脚本需继承自AURABehaviour
函数名 | 说明 |
---|---|
onObjectDetected | public void ObjectDetected(ObjectInfo objectInfo);//检测到新模具的时候回调,在模具丢失前只回调一次 |
OnObjectUpdated | public void OnObjectUpdated(ObjectInfo objectInfo);//当场景中已存在的模具位置姿态有更新的时候回调 |
OnObjectLost | public void OnObjectLost(ObjectInfo objectInfo);//当场景中的模具被拿出投影区域的时候回调一次 |
OnImageDetected | public void OnImageDetected(ImageInfo objectInfo);//检测到新图片的时候回调,在图片丢失前只回调一次 |
OnImageUpdated | public void OnImageUpdated(ImageInfo objectInfo);//当场景中已存在的图像位置姿态有更新的时候回调 |
OnImageLost | public void OnImageLost(ImageInfo objectInfo);//当场景中的图片被拿出投影区域的时候回调一次 |
点击事件
点击在物体上
- 直接用Input.GetMouseButtonDown(0) 来获得当前是否执行了点击,然后通过Input.mousePostion来判断是否点击在物体上(注意:建议点击事件都用这个而不是Input.GetMouseButton,因为用户点击过快的时候有可能不能触发Input.GetMouseButton)
- 通过onObjectDetected的objectInfo.press来判断
- 直接用Input.GetMouseButtonDown(0) 来获得点击状态
- 对于多手点击或其他复杂情况可以通过遍历每个Fingertip来判断
屏幕坐标与世界坐标转换
立体投影
首先需要引用AURA命名空间 using AURA,
- 世界坐标转屏幕坐标
yourCamera.WorldToScreenPointForAURA(Vector3 position)
- 屏幕坐标转世界坐标: 输入的屏幕坐标为Vector3类型,xy为屏幕坐标,z为此屏幕坐标转换到世界坐标系下后的z坐标
yourCamera.ScreenToWorldPointForAURA(Vector3 position)
非立体投影
- 世界坐标转屏幕坐标
yourCamera.WorldToScreenPoint(Vector3 position)
- 屏幕坐标转世界坐标
yourCamera.WorldToScreenPoint(Vector3 position)