Unity MARS 概念
Unity MARS 使用几个独特的概念。本页说明此扩展中使用的不同术语。
代理 (Proxy)
代理是场景中的一个游戏对象,充当您的应用程序可以检测到并使用的现实对象(例如桌子、面部或猫)的替身。AR 应用程序的创建在很大程度上取决于将数字内容与现实世界中的对象或位置相关联。代理可以视为用于将现实世界与应用程序中的数字内容关联起来的占位对象。
抽象代理可以是任何匹配条件的数据,例如基于时间或天气的条件。尽管这些代理目前并未存在于 Unity MARS 中,但它们在将来可能会存在。
代理可以具有 Unity MARS 组件,例如条件或操作,它们定义并限制代理何时以及如何与现实对象匹配。
代理组
代理组代表多个现实对象的组合,这些对象必须全都存在才能使您的应用程序正常运行。例如,“一间有两张桌子、一个地板和至少一堵墙的房间”。如果其中有任何对象不存在,整个代理组将不匹配。
可以将多个关系添加到代理组,以使匹配更加严格。例如,考虑两个都期望有平面的代理。可以添加一个包含高度关系的代理组,指定第一个平面需要比第二个平面至少高 1 米。在您的应用程序检测到这两个对象_以及_它们之间的关系之前,没有一个代理匹配这些条件。
复制器
可以指示您的应用程序将预制件的单个实例与应用程序发现的特定代理或代理组相关联。但是,为了将预制件的多个实例与现实世界中的多个匹配对象相关联,可以使用复制器。
例如,您可以设置具有平面条件的代理,以便在实现匹配时将应用程序环境的某个部分显示在代理上方。如果随后将此代理放入复制器之下,这会在与该条件匹配的所有其他现实对象上复制这个代理。在此情况下,应用程序的环境会出现在周围每个表面上。
用更加代码的语言来定义,复制器作为一个组件,在 MARS 数据库中遇到匹配数据时会连续复制代理或代理组,直到达到用户定义的限值。换言之,复制器本质上将代理和代理组变成_“为每个…操作…*”_规则。
代理力
代理力可让您调整代理的最终放置并与该放置实时交互。为此,您可以将多个“软影响”(例如对齐区域和空间关系)应用于游戏对象;Unity MARS 使用物理模型来平衡这些力。
使用 ProxyForce 组件可配置游戏对象的移动方式(例如仅绕 Y 轴旋转以及启用实时解算),而实际力通常是 ProxyAlignmentForce、ProxyRegionOccupancy 或 ProxyRegionForceTowards。这些组件施加的力分别使代理相对于另一个游戏对象移动,阻止被占用的区域/填充区域发生碰撞,以及将代理拉向某些已筛选的形状。
人工合成对象和 Simulation View
在开发期间,您可以通过在 Simulation View 中针对人工合成对象对您的应用程序进行测试,从而在 Unity MARS 中试用您的应用程序。
Simulation View 允许您针对各种数据源(例如人工合成环境、预创作的录制流以及来自实时设备的远程流)测试您的应用程序。该视图可按两种模式之一显示场景:即时和持续:
- 即时模拟以“即时”(瞬间)形式运行场景,且 Unity MARS 已经测试模拟环境中的所有代理与所有数据的匹配情况。
- 在持续模拟中,Device View 随着摄像机移动来探索模拟环境,根据遇到的数据进行代理匹配。Device View 的行为就像您拿着 AR 设备并用来扫描周围环境一样。
您可以使用人工合成语义标签来标记任何游戏对象(有关更多信息,请参阅术语表),然后在 Simulation View 中将该预制件用作人工合成环境。还可以将语义标签条件指定为匹配标准以定位已标记的人工合成对象。
在运行时,您的应用程序可以将语义标签放置在发现的代理上(例如,标记一座桥的开头和结尾),或提示用户定义标签在现实世界中的显示位置。
MARS 数据库
Unity MARS 维护着一个(在设备上或模拟中)已发现的现实数据的数据库。通过使用代理,您可以定义将游戏对象与应用程序所设计的现实数据及背景相关联的条件。例如,仅当 MARS 数据库中的一段匹配数据可用时,具有代理组件以及描述桌子的条件的游戏对象才相关。
有关 MARS 数据库的更多深度信息,请参阅软件开发指南中的“MARS 数据库”部分。
MARS 会话和摄像机
将 MARS 实体添加到任何场景时,Unity MARS 会自动将 MARS 会话游戏对象添加到激活场景的层级视图中。为了使用 Simulation View,必须在加载的场景中存在 MARS 会话。
如果激活场景中已经有摄像机,这个摄像机将成为 MARS 会话 (MARS Session) 对象的子项,且 Unity MARS 将向摄像机添加 MARSCamera 脚本。如果激活场景中没有摄像机,Unity MARS 将在场景中创建带有 MARSCamera 脚本的摄像机,并将这个摄像机添加为 MARS 会话 (MARS Session) 的子游戏对象。
带有 MARS Camera 脚本的摄像机在其父级列表中的某处必须始终具有 MARS 会话。可以将子游戏对象添加到 MARS 会话游戏对象,并将 MARS 摄像机添加为该游戏对象的子项,但是 Unity MARS 会阻止您将 MARS 摄像机移出 MARS 会话的层级。这是因为 Unity MARS 依赖于是否能够变换和缩放 MARS 会话以及是否能够影响 MARS 摄像机的 AR 跟踪空间。