HoloLens2之路-配置文件(四)

版权声明:Davidwang原创文章,严禁用于任何商业途径,授权后方可转载。

  配置文件定义了应用程序所有功能特性及部分技术细节,决定了应用的类型和外观表现,精细正确的配置文件设定可以在满足应用需求的同时更加有效的利用硬件资源,提高应用性能。在这些配置文件中,有些配置文件可以在应用运行时启用/禁用,甚至更改为其他配置文件,有些配置文件则不能在应用完成初始化之后修改变更。通常而言,如果需要在运行时根据硬件设备能力动态的替换配置文件以启用/禁用某些功能,我们可以在MRTK初始化之前完成相应配置文件的替换,如下代码清单所示,需要注意的是,替换配置文件的脚本必须拥有更高的执行优先级,这样才能保证在MRTK初始之前完成替换。

//方法一
using Microsoft.MixedReality.Toolkit;
using UnityEditor;
using UnityEngine;
public class ProfileSwapper : MonoBehaviour
{
    
    
    void Start()
    {
    
    
        // 加载配置文件,MixedRealityToolkitConfigurationProfile可以换成任何需要替换的配置文件
        var profile = AssetDatabase.LoadAssetAtPath<MixedRealityToolkitConfigurationProfile>("Assets/MixedRealityToolkit.Generated/CustomProfiles/RuntimeSwapProfile.asset");
        MixedRealityToolkit.Instance.ActiveProfile = profile;
    }
}

  如果想在MRTK完成初始化之后通过替换配置文件以改变某些特性的行为方式,这需要依据具体配置文件及其配置管理的功能决定,有些配置文件可以在运行时动态切换,而有些配置文件则不能进行动态切换,应当先充分了解希望切换的配置文件详细信息。

在MRTK2.7及以后,MRTK提供了一个新方法SetProfileBeforeInitialization(),利用该方法可以确保在MRTK初始化之前替换原配置文件,当然,与前文一样,前提是这个脚本有更高的优先执行权,代码如下所示。

//方法二
using Microsoft.MixedReality.Toolkit;
using UnityEngine;
public class PreInitProfileSwapper : MonoBehaviour
{
    
    

    [SerializeField]
    private MixedRealityToolkitConfigurationProfile profileToUse = null;

    private void Awake()
    {
    
    
        //profileToUse为需要替换运行的配置文件
        MixedRealityToolkit.SetProfileBeforeInitialization(profileToUse);
    }
}

  除了使用上面的动态切换配置文件的方法,MRTK2.7还引入了热切换,可以在运行时动态切换配置文件,代码如下,

//方法三
using Microsoft.MixedReality.Toolkit;
using UnityEngine;
public class PreInitProfileSwapper : MonoBehaviour
{
    
    

    [SerializeField]
    private MixedRealityToolkitConfigurationProfile profileToUse = null;

    private void swapperProfile()
    {
    
    
        //profileToUse为需要替换运行的配置文件
        MixedRealityToolkit.Instance.ActiveProfile = profileToUse;
    }
}

  使用热切换时,当前配置文件卸载发现在当前服务的最后一个LateUpdate() 方法执行完之后,新的配置文件加载发生在当前服务的所有Update() 方法执行之前。由于是热切换,MR应用在这个过程中会受到影响,会出现卡顿甚至假死,但UI元素会保持不变,另外,拥有更高优先级的脚本可能在这个切换过程中访问配置文件,如果此是新的配置文件尚未设置完成会导致异常发生。

  常见的很多配置文件都可以在开发时完成配置,但在实际开发中,也可能需要在运行时根据运行条件动态的修改某些配置项的参数,由于MRTK配置文件簇良好的树型结构,我们可以非常容易获取到所需要的子配置文件或者某个配置项,典型的示例代码如下。

//需要引入Microsoft.MixedReality.Toolkit命名空间
void GetProfile()
{
    
    
    var mainProfile = MixedRealityToolkit.Instance.ActiveProfile;
    var inputProfile = mainProfile.InputSystemProfile;
    var pointerProfile = inputProfile.PointerProfile;
    //获取配置属性参数
    float pointingExtent = pointerProfile.PointingExtent;
    //设置配置属性参数
    inputProfile.HandTrackingProfile.HandMeshVisualizationModes = Microsoft.MixedReality.Toolkit.Utilities.SupportedApplicationModes.Player;
}

  通过MixedRealityToolkit.Instance.ActiveProfile属性我们可以获取到当前MR应用主配置文件,这是个单例实例,在MR应用运行时只有一份实例,然后就可以根据配置文件的树型结构获取到希望获取的子配置文件或者配置属性。需要注意的是,一些配置文件参数不可以在运行时修改,而另一些则可以,这与具体的配置文件相关。

  针对HoloLens2设备,MRTK提供了默认的DefaultHoloLens2ConfigurationProfile配置文件及其所属子配置文件簇,该配置文件簇确保了所用配置通用可靠,在进行项目配置时,建议以该配置文件簇为基础进行针对性的优化,更快速和安全。

(完)
  

参考文献

1、配置文件 配置文件

猜你喜欢

转载自blog.csdn.net/yolon3000/article/details/118737552