Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Unity ARKit:我怎样才能正确获得跟踪状态?_Ios_Unity3d_Arkit - Fatal编程技术网

Ios Unity ARKit:我怎样才能正确获得跟踪状态?

Ios Unity ARKit:我怎样才能正确获得跟踪状态?,ios,unity3d,arkit,Ios,Unity3d,Arkit,我试图正确地获取trackingState,但我没有理解“Hook arframeupdateEvent”的含义,而是 UnityARCamera.trackingState“。。。我该怎么做 先谢谢你 [Obsolete("Hook ARFrameUpdatedEvent instead and get UnityARCamera.trackingState")] public int GetARTrackingQuality() { return GetTr

我试图正确地获取trackingState,但我没有理解“Hook arframeupdateEvent”的含义,而是 UnityARCamera.trackingState“。。。我该怎么做

先谢谢你

[Obsolete("Hook ARFrameUpdatedEvent instead and get 
UnityARCamera.trackingState")]
    public int GetARTrackingQuality()
    {
        return GetTrackingQuality();
    }

您可以通过注册以下
delegate
回调来获取跟踪状态,例如:

void Start ()
    {

        //1. Register For The ARFrame Updated Event
        UnityARSessionNativeInterface.ARFrameUpdatedEvent += ARFrameUpdated;
        UnityARSessionNativeInterface.ARSessionFailedEvent += ARSessionFailedEvent;

    }
    /// <summary>
    /// Called Each Time The ARCamera Is Updated
    /// </summary>
    /// <param name="camera">Camera.</param>
    public void ARFrameUpdated (UnityARCamera camera)
    {

        //1. Track The ARSession
        if (camera.trackingState == ARTrackingState.ARTrackingStateLimited) {

            logTrackingReason (camera.trackingReason);

        } else {

            logTrackingState (camera.trackingState);

        }

        logLighting (camera.lightData.arLightEstimate.ambientIntensity);

    }

    /// <summary>
    /// Determines If The Current Lighting Conditions Are Appropriate For The ARSession
    /// </summary>
    /// <param name="lightEstimate">Light estimate.</param>
    public void logLighting (float lightEstimate)
    {

        if (lightEstimate < 100) {
            arTrackingStatus = "Lighting Is To Dark";

        }

    }

    /// <summary>
    /// Informs The User About The Current Tracking State
    /// </summary>
    /// <param name="trackingState">Tracking state.</param>
    public void logTrackingState (ARTrackingState trackingState)
    {


        switch (trackingState) {

        case ARTrackingState.ARTrackingStateNormal:
            arTrackingStatus = "Tracking Ready";
            break;

        case ARTrackingState.ARTrackingStateNotAvailable:
            arTrackingStatus = "Tracking Unavailable";
            break;

        }


    }

    /// <summary>
    /// Informs The User About The Current Tracking Status
    /// </summary>
    /// <param name="reason">Reason.</param>
    public void logTrackingReason (ARTrackingStateReason reason)
    {

        switch (reason) {

        case ARTrackingStateReason.ARTrackingStateReasonExcessiveMotion:
            arTrackingStatus = "Please Slow Your Movement";
            break;

        case ARTrackingStateReason.ARTrackingStateReasonInsufficientFeatures:
            arTrackingStatus = "Try To Point At A Flat Surface";
            break;

        case ARTrackingStateReason.ARTrackingStateReasonInitializing:
            arTrackingStatus = "Initializing";
            break;

        }
    }

    /// <summary>
    /// Prints The ARSession Failed Event
    /// </summary>
    /// <param name="error">Error.</param>
    public void ARSessionFailedEvent (string error)
    {

        print (error);

    }
然后创建函数来处理回调,例如:

void Start ()
    {

        //1. Register For The ARFrame Updated Event
        UnityARSessionNativeInterface.ARFrameUpdatedEvent += ARFrameUpdated;
        UnityARSessionNativeInterface.ARSessionFailedEvent += ARSessionFailedEvent;

    }
    /// <summary>
    /// Called Each Time The ARCamera Is Updated
    /// </summary>
    /// <param name="camera">Camera.</param>
    public void ARFrameUpdated (UnityARCamera camera)
    {

        //1. Track The ARSession
        if (camera.trackingState == ARTrackingState.ARTrackingStateLimited) {

            logTrackingReason (camera.trackingReason);

        } else {

            logTrackingState (camera.trackingState);

        }

        logLighting (camera.lightData.arLightEstimate.ambientIntensity);

    }

    /// <summary>
    /// Determines If The Current Lighting Conditions Are Appropriate For The ARSession
    /// </summary>
    /// <param name="lightEstimate">Light estimate.</param>
    public void logLighting (float lightEstimate)
    {

        if (lightEstimate < 100) {
            arTrackingStatus = "Lighting Is To Dark";

        }

    }

    /// <summary>
    /// Informs The User About The Current Tracking State
    /// </summary>
    /// <param name="trackingState">Tracking state.</param>
    public void logTrackingState (ARTrackingState trackingState)
    {


        switch (trackingState) {

        case ARTrackingState.ARTrackingStateNormal:
            arTrackingStatus = "Tracking Ready";
            break;

        case ARTrackingState.ARTrackingStateNotAvailable:
            arTrackingStatus = "Tracking Unavailable";
            break;

        }


    }

    /// <summary>
    /// Informs The User About The Current Tracking Status
    /// </summary>
    /// <param name="reason">Reason.</param>
    public void logTrackingReason (ARTrackingStateReason reason)
    {

        switch (reason) {

        case ARTrackingStateReason.ARTrackingStateReasonExcessiveMotion:
            arTrackingStatus = "Please Slow Your Movement";
            break;

        case ARTrackingStateReason.ARTrackingStateReasonInsufficientFeatures:
            arTrackingStatus = "Try To Point At A Flat Surface";
            break;

        case ARTrackingStateReason.ARTrackingStateReasonInitializing:
            arTrackingStatus = "Initializing";
            break;

        }
    }

    /// <summary>
    /// Prints The ARSession Failed Event
    /// </summary>
    /// <param name="error">Error.</param>
    public void ARSessionFailedEvent (string error)
    {

        print (error);

    }
希望它能帮助…

。我正在Unity ARWorldMap场景中保存和加载模型。一旦我加载了我在停止平面检测和删除特征点之前保存的模型。CheckIfRelocalized由我创建,但不起作用,你知道如何隐藏平面和特征点吗?我怎么知道模型何时被重新定位。