API接口说明

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)