更新时间:2023-04-28 GMT+08:00
分享

注意事项

创建导航

// HTNavigationProvider是为导航模块提供参数与配置的类,通过对这个类的参数调整,可以对导航功能进行详细配置
mNaviProvider = new HTNavigationProvider(HTSystemManager.GetHTSystem().GetARPlugin(), HTSystemManager.GetHTSystem().GetWorldControl());

// HTNavigationRender负责将路径节点渲染成导航路径
mNaviRender = new HTNavigationRender();

// HTNaviManage是sdk中导航功能的管理类,回调都是从这个类中接收的
mNavi = new HTNaviManage();
mNavi.Create(HTSystemManager.GetHTSystem().GetAppConfig(),HTSystemManager.GetHTSystem().GetAppEnv(),hostUrl,mNaviProvider,mNaviRender);

您可在Unity新建工程Assets > HTFoundation > Scripts > HTPlatform中找到HTNaviSession.cs并查看参考实例。

HTNaviManager

导航的生命周期需要与Unity绑定,您可以参考Assets > HTFoundation > Scripts > SessionsManager的HTNaviManager.cs文件。这里主要说明Update、导航回调渲染的注意事项。

  • Update:
    // Update负责实时导航功能的实现,isTracking表示的是当前用户的定位状态
    mNavi.Update(isTracking);

    您可在Unity新建工程Assets > HTFoundation > Scripts > HTPlatform中找到HTNaviSession.cs并查看参考实例。

  • 导航回调:
    // 这是一个必要监听
    mNavi.AddNaviErrorListener(NaviErrorListener);
    // 这是导航启动失败的错误,需重新开始导航
    HTNaviErrorCode.LOAD_RES
    HTNaviErrorCode.GVPS_DISABLE
    HTNaviErrorCode.NET_DISABLE
    // 这是请求导航路径失败,会中断导航可通过ContinueNavi继续
    HTNaviErrorCode.NET_ERROR
    // 这是提示性错误不会中断导航
    HTNaviErrorCode.NAVIGATING
    HTNaviErrorCode.LOST_TRACK
    
    // 这是一个必要监听
    // 进入电梯会中断导航,需要外部的重定位来继续导航
    mNavi.AddNaviElevatorListener(NaviElevatorListener);
    // 这个方法通知导航模块已经出电梯了
    mNaviSession.mNavi.ContinueNavi();
    // 这个方法通知导航模块已重新gvps定位
    mNaviSession.mNavi.IsRefreshGvps();
    
    // 这是一个可选监听
    // 如果启动了导航的偏移量监听,在用户偏航的时候会根据返回的bool中断导航。中断后,需要调用RequestNaviInfo,获取最新的导航路线继续导航
    mNavi.AddNaviYawListener(NaviYawListener);
    mNaviSession.mNaviYawListener = ShowYaw;
    public bool ShowYaw(float yaw)
    {
        ReplaceBtnListener(mNaviInfoDialogPanel.GetComponentInChildren<Button>(), () =>
        {
            mNaviSession.mNavi.RequestNaviInfo();
            mNaviInfoDialogPanel.SetActive(false);
        });
        mNaviInfoDialogPanel.GetComponentInChildren<Text>().text = "偏航" + yaw + "m,为您重新规划路线";
        mNaviInfoDialogPanel.SetActive(true);
        return true;
    }
    
    // 这是一个可选监听
    // 如果启动了导航路径监听,在获取导航路径的时候会中断导航,等待调用ResetNaviRoute选择导航路径继续导航
    mNavi.AddNaviPathListener(NaviPathListener);
    mNaviSession.mNavi.ResetNaviRoute(naviContent.path[0]);

    您可在Unity新建工程Assets > HTFoundation > Scripts > SessionsManager中找到HTNaviManager.cs并查看参考实例。

  • 渲染:
    由于导航默认会根据白膜调整导航高度,所以系统会返回白膜渲染完的通知。如果不需要等待通知可以直接提前调用IsRenderReady。
    mNavi.IsRenderReady();

    您可在Unity新建工程Assets > HTFoundation > Samples > HTFoundationTester > Scripts中找到HTNaviCtro.cs并查看参考实例。

HTNavigationProvider

HTNavigationProvider可以配置很多导航模块参数,如果想进行更多参数调整,可以通过调用IHTNavigationProvider接口或者继承HTNavigationProvider来实现。

public class HTNavigationProviderExt : HTNavigationProvider
{
  ...
}
mNaviProvider = new HTNavigationProviderExt(HTSystemManager.GetHTSystem().GetARPlugin(), HTSystemManager.GetHTSystem().GetWorldControl());

您可在Unity新建工程Assets > HTFoundation > Scripts > HTPlatform中找到HTNavigationProviderExt.cs并查看参考实例。

HTNavigationRender

HTNavigationRender主要负责对导航路径的渲染,通过继承和实现接口实现高度自定义。

您可在Unity新建工程Assets > HTFoundation > Scripts > HTPlatform中找到HTNavigationRenderExt.cs并查看参考实例。

相关文档