
# 注意事项
#### 创建导航
```
// 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);
```
![](https://support.huaweicloud.com/devg-koomap/public_sys-resources/note_3.0-zh-cn.png)
您可在Unity新建工程的"Assets \> HTFoundation \> Scripts \> HTPlatform"中找到HTNaviSession.cs并查看参考实例。
#### HTNaviManager
导航的生命周期需要与Unity绑定，您可以参考"Assets \> HTFoundation \> Scripts \> SessionsManager"中的HTNaviManager.cs文件。这里主要说明Update、导航回调和渲染的注意事项。
- Update：
  ```
  // Update负责实时导航功能的实现，isTracking表示的是当前用户的定位状态
  mNavi.Update(isTracking);
  ```
  ![](https://support.huaweicloud.com/devg-koomap/public_sys-resources/note_3.0-zh-cn.png)
  您可在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]);
  ```
  ![](https://support.huaweicloud.com/devg-koomap/public_sys-resources/note_3.0-zh-cn.png)
  您可在Unity新建工程的"Assets \> HTFoundation \> Scripts \> SessionsManager"中找到HTNaviManager.cs并查看参考实例。
  
- 渲染：
  由于导航默认会根据白膜调整导航高度，所以系统会返回白膜渲染完的通知。如果不需要等待通知可以直接提前调用IsRenderReady。
  ```
  mNavi.IsRenderReady();
  ```
  ![](https://support.huaweicloud.com/devg-koomap/public_sys-resources/note_3.0-zh-cn.png)
  您可在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());
```
![](https://support.huaweicloud.com/devg-koomap/public_sys-resources/note_3.0-zh-cn.png)
您可在Unity新建工程的"Assets \> HTFoundation \> Scripts \> HTPlatform"中找到HTNavigationProviderExt.cs并查看参考实例。
#### HTNavigationRender
HTNavigationRender主要负责对导航路径的渲染，通过继承和实现接口实现高度自定义。
![](https://support.huaweicloud.com/devg-koomap/public_sys-resources/note_3.0-zh-cn.png)
您可在Unity新建工程的"Assets \> HTFoundation \> Scripts \> HTPlatform"中找到HTNavigationRenderExt.cs并查看参考实例。
