using FFalcon.XR.Runtime; using UnityEngine; namespace RayNeo { public class FaceDetectorManager { private static FaceDetectorManager ins = new FaceDetectorManager(); public static FaceDetectorManager Ins { get { return ins; } } float[] m_position = new float[3]; Vector3 m_posVec3 = Vector3.zero; private long m_faceHandle = 0; /// /// 获取脸部位置. /// 调用即代表初始化.需要在适当时机调用StopFaceDectector /// /// 代表有没有获取到数据. /// 如果是Vector3.zero则是没有获取到. public Vector3 GetFacePosition(out bool suc) { #if UNITY_EDITOR //编辑器不执行. 后续可以考虑加入debug suc = false; return Vector3.zero; #endif if (m_faceHandle == 0) { m_faceHandle = Api.CreateFaceDetector(); if (m_faceHandle != 0) { Api.InitFaceDetector(); } } if (m_faceHandle != 0) { Api.GetFaceInCamera(m_position); //Api.GetFacePosition(m_position); if (m_position[0] == 0 && m_position[1] == 0 && m_position[2] == 0) { suc = false; return Vector3.zero; } m_posVec3.Set(m_position[0], m_position[1], m_position[2]); } else { suc = false; return Vector3.zero; } suc = true; return m_posVec3; } public void StopFaceDectector() { #if UNITY_EDITOR return; #endif Api.DestroyFaceDetector(); m_faceHandle = 0; } public void Recenter() { #if UNITY_EDITOR return; #endif Api.Recenter(); } } }