更新时间:2024-10-22 GMT+08:00
分享

开发指导

开发流程

创建和开发流程如图1所示。

图1 流程图

开发过程

  1. 配置AK/SK信息。

    在新建的Unity工程Assets > HTFoundation > Scripts > BaseUtils找到HTStringRes.cs,并在HTStringRes.cs配置AK/SK信息以及输入固定的BASE_URL。

    • 申请AK/SK详情请参考获取AK/SK
    • 固定BASE_URL为:https://koomap.cn-north-4.myhuaweicloud.com。
    // 认证用的AK、SK硬编码到代码中或明文存储都有很大的安全风险,建议在代码中配置加密后的AK、SK,在使用的地方解密。
    public class HTStringConfig
    {
        public const string AK = "加密后的内容";
        public const string SK = "加密后的内容";
        public const string BASE_URL = "";
    }

  2. 创建HTFoundationOrigin。

    单击Unity菜单栏Custom Tools > Create中的“HTFoundationOrigin”,Unity会自动创建Prefab。

  3. 配置功能。

    展开“HTFoundationOrigin”目录并单击“HTSysEntrance”,根据实际情况配置需要的功能。其中默认配置HTRes(资源加载)、HTNavi(导航功能)、HTGvps(定位功能)。

    配置完成后,启动当前场景,自动获取状态信息,开启视觉定位和加载数字资源:

    • 视觉定位:自动定位和手动定位。
      • 自动定位

        系统默认开启自动定位功能。在定位丢失状态下,每隔1秒刷新一次定位,直到成功。定位成功状态下,每隔15秒刷新一次定位。您可根据实际需求设置刷新时间。

        // 第一个参数是定位丢失时的定位刷新时间,第二个参数是定位成功后的定位刷新时间
        mHtSystem.Start(HTSystemManager.FastLocinterval, HTSystemManager.NormalLocaIntervalNonVpp);
      • 手动定位
        1. 创建HTGvpsRequestOpExt实例。
          protected HTGvpsRequestOpExt mGvpsOp = new HTGvpsRequestOpExt();
        2. 调用HTGvpsRequestOpExt的RequestGvpsLocaiton方法进行一次手动定位请求。
          mGvpsOp.RequestGvpsLocaiton(HTSystemManager.GetHTSystem(), HTRequestPriority.ForceRequest, HTVpsRequestType.ManualClick, OnLocation);
        3. 通过HTGvpsRequestOpExt类的Addobserver方法将定位添加到SDK系统的监听池中。

          定位结果将通过HTGvpsRequestOpExt类中的OnLocation方法返回。

          mGvpsOp.AddObserver(HTSystemManager.GetHTSystem());

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

    • 加载数字资源

      HTResManager为场景中挂载的类,控制着HTResSession类的创建以及资源加载流程的生命周期。

      HTResSession构造了资源管理类HTResPumper和资源渲染类HTResRender,主要对外提供了dll的生命周期,相对于Unity生命周期的映射及内容回调。

      对资源模块的信息配置及功能调整,都可以在这里进行。

      HTResCtro主要进行资源材质的二次赋值,能很好的修复PC端加载资源出现材质丢失的问题,主要方法为FixShader(GameObject obj)。

      核心方法代码如下:
      public void Create(bool isRequestDigital = true, bool isUseSecondaryOffset = true)
              {
                  Debug.Log("HTResSession Create HTPerformance +");
                  if (mHTBehaviourFactory == null)
                  {
                      mHTBehaviourFactory = new HTBehaviourFactory();
                  }
                  bool isResLstOnline = true;
                  bool isResLstDump = false;
                  bool isResCacherDe = false;
                  mResRender = new HTResRender(mOwner, mHTBehaviourFactory);
                  mResPumper = new HTResPumper(
                      HTSystemManager.GetHTSystem().GetAppConfig(),
                      HTSystemManager.GetHTSystem().GetAppEnv(),
                      HTSystemManager.GetHTSystem().GetWorldControl(),
                      HTSystemManager.GetHTSystem().GetSniffer(),
                      HTSystemManager.GetHTSystem().GetJniAttach(),
                      mResRender,
                      mSysSession.mHostUrl,
                      Application.temporaryCachePath,
                      mSysSession.mPlaformType,
                      isResLstOnline,
                      isResLstDump,
                      isResCacherDe,
                      isRequestDigital,
                      isUseSecondaryOffset 
                      );
                  mResRender.SetRealWordMatPath(HTStringMat.WORLD_REAL);
                  ((IHTActor)(mResPumper)).Create("resPumper");
                  Debug.Log("HTResSession Create HTPerformance -");
              }

    相关参数解释如下:

    • HTBehaviourFactory:资源的行为脚本厂类,SDK提供了一套通用的行为供用户使用,用户也可以创建自己的行为厂类,需继承IHTBehaviourFactory接口类。
    • isResLstOnline:是否加载在线资源(加载离线资源需先缓存Dump,并且把缓存的TXT放在Application.temporaryCachePath下的ResLstCache文件夹内)。
    • isResLstDump:是否缓存资源列表的TXT。
    • GetAppConfig:获取应用鉴权参数。
    • GetAppEnv:获取App环境参数。
    • GetWorldControl:获取资源世界的参数,例如是否在服务区获取坐标偏移量等信息。
    • GetSniffer:获取定位及传感器信息。
    • GetJniAttach:线程向Android客户端发送信息时需要使用。
    • mResRender:HTResRender.dll的实例。
    • mHostUrl:存储云端数字资源的域名。
    • mPlaformType:当前移动设备的平台(Android或iOS)。
    • isRequestDigital:是否需要加载数字资源。
    • isUseSecondaryOffset:是否开启二次偏移

    资源模块运行时,判断当前位置是否在服务区,可通过如下接口进行判断:

    int serviceid = HTSystemManager.GetHTSystem().GetWorldControl().GetServiceCode();

    其中,返回的serviceid参数解释如下:

    • serviceid > 0:在服务区
    • serviceid = 0:未知
    • serviceid < 0:不在服务区

相关文档