Ios Unity ARKit:我怎样才能正确获得跟踪状态?
我试图正确地获取trackingState,但我没有理解“Hook arframeupdateEvent”的含义,而是 UnityARCamera.trackingState“。。。我该怎么做 先谢谢你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
[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由我创建,但不起作用,你知道如何隐藏平面和特征点吗?我怎么知道模型何时被重新定位。