开发指导
开发过程
- 配置AK/SK信息。
在新建的Unity工程中找到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 = ""; }
- 创建HTFoundationOrigin。
单击Unity菜单栏“HTFoundationOrigin”,Unity会自动创建Prefab。
中的 - 配置功能。
展开“HTFoundationOrigin”目录并单击“HTSysEntrance”,根据实际情况配置需要的功能。其中默认配置HTRes(资源加载)、HTNavi(导航功能)、HTGvps(定位功能)。
配置完成后,启动当前场景,自动获取状态信息,开启视觉定位和加载数字资源:
- 视觉定位:自动定位和手动定位。
- 自动定位:
系统默认开启自动定位功能。在定位丢失状态下,每隔1秒刷新一次定位,直到成功。定位成功状态下,每隔15秒刷新一次定位。您可根据实际需求设置刷新时间。
// 第一个参数是定位丢失时的定位刷新时间,第二个参数是定位成功后的定位刷新时间 mHtSystem.Start(HTSystemManager.FastLocinterval, HTSystemManager.NormalLocaIntervalNonVpp);
- 手动定位:
- 创建HTGvpsRequestOpExt实例。
protected HTGvpsRequestOpExt mGvpsOp = new HTGvpsRequestOpExt();
- 调用HTGvpsRequestOpExt的RequestGvpsLocaiton方法进行一次手动定位请求。
mGvpsOp.RequestGvpsLocaiton(HTSystemManager.GetHTSystem(), HTRequestPriority.ForceRequest, HTVpsRequestType.ManualClick, OnLocation);
- 通过HTGvpsRequestOpExt类的Addobserver方法将定位添加到SDK系统的监听池中。
定位结果将通过HTGvpsRequestOpExt类中的OnLocation方法返回。
mGvpsOp.AddObserver(HTSystemManager.GetHTSystem());
您可在Unity新建工程的 中找到HTManualReq.cs并查看参考实例。
- 创建HTGvpsRequestOpExt实例。
- 自动定位:
- 加载数字资源:
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:不在服务区
- 视觉定位:自动定位和手动定位。