什么是混合现实特性
为了避免MonoBehaviour
类的性能开销,所有services(系统、功能或模块,要求独立操作在混合现实的解决方案,例如输入、边界,空间感知)需要离散普通c#类,实现IMixedRealityService
和使用MixedRealityToolkit
注册。
然后,MixedRealityToolkit
协调服务之间的所有引用,并确保它们接收所有适当的事件(例如,唤醒/初始化、更新、销毁),以及在需要时方便地查找其他服务。
此外,MixedRealityToolkit
还维护了在运行项目中使用的active VR/XR/AR SDK,用于根据所附加的硬件初始化活动设备并引导正确的操作。
一个服务
单个服务可以是项目中需要实现的任何功能。传统上,一些项目使用需要在场景中活动的singletons,但是这种模式有其优点和缺点。我们决定打破这种模式,采用一种混合的方法,它比传统的单例MonoBehaviours
实现带来了一些好处,即:
性能 - 性能-没有
MonoBehaviour
的开销,脚本更新大约快80%,并且不需要GameObject
在场景中存在.可引用性 - 从
MixedRealityToolkit
中可以发现服务,比在场景中搜索GameObjects
或使用FindObjectsOfType<T>
要快得多,也容易得多.任何类型的依赖 - 尽管方法类似于依赖注入,服务可以脱离他们的类型,这意味着可以随时换出具体实现代码使用它且没有不良影响(如替换默认InputSystem为你的自定义,只要你完全实现每个接口)。
多场景使用 - 如果一个服务确实需要知道场景中的一个
transform
的位置,它可以简单地引用或创建一个GameObject
而不是一个附加到它的组件。当项目跨越多个场景时,这使得查找和使用服务变得更加容易。
服务接口 Service interfaces
service container使用预定义的interface 类型来存储和检索任何服务,这确保了在混合现实工具包中没有硬依赖关系,因此每个子系统都可以轻松地与另一个子系统交换(只要它符合接口)。
现在由混合现实工具包提供的系统接口包括:
在创建这些系统的自己的实现时,您必须确保每个系统都符合混合现实工具包提供的接口(例如,如果您用自己的设计替换InputSystem)。
Note
所有服务还必须继承BaseService
类或实现IMixedRealityService
,实现MixedRealityToolkit
所需的功能这样他们的生命周期可以被适当处理。(例如:初始化,更新,销毁被正确调用。)