配置头像移动和传送

概述

为了使网格头像在你的体验中成功移动和传送,请务必遵循某些设计准则。 本文包含有关如何设置移动和传送表面的信息、头像移动限制和碰撞体设计等操作的提示,以及有关层的详细部分。

虚拟形象移动指南

场景应该有碰撞体,使头像可以行走和传送。 通常,紧密拟合视觉几何图形的低多边形网格碰撞器将产生最佳结果。 Box Collider 非常适用于普通场景,但可能会导致一些问题,例如导致头像卡在角落或失败步高限制。

网格头像移动限制:

最大可步行斜率: <45 度
最大步长高度:0.3
阿凡达胶囊半径:0.3
头像胶囊高度:2
头像高度:1.8

最佳结果建议:

  • 将碰撞图面与虚拟形象将行走的视觉表面对齐。 这一点很重要,以避免虚拟形象相对于视觉表面的位置出现问题, (防止浮动或剪裁) 。

  • 圆角有助于平滑虚拟形象移动,并防止头像卡住。

  • 若要阻止头像移动,请使用陡峭的斜坡或比最大步长得多的高度。

    • 修改碰撞器的形状,以创建虚拟形象自然难以或不可能遍历的表面。 例如,使用形状不规则的网格碰撞器,该形状不为虚拟形象提供平坦的表面或可行走的斜率。

    • 在某些情况下,在虚拟形象不应行走的对象或区域中的胶囊碰撞器或类似圆角形状可能就足够了。 如果斜坡足够陡峭,将导致头像滑落,则这些形状不可行走。

碰撞层

可交互对象是 GameObject,其中一个对象碰撞层上有一个非触发器碰撞器和相应的可视几何图形。 虚拟形象可以使用非触发碰撞体行走并定位到对象上,因此请注意正在使用哪个层。

若要获得准确的头像定位和传送,场景碰撞体需要位于适当的层上。 本地用户的头像将与 (碰撞进行交互,并在) 支持这些交互的层上的任何碰撞体上行走。

当虚拟形象被定位或传送时,头像与“地面”对象相撞,并且始终位于地面上方的相同高度,这 (这称为“地面”) 。 如果未检测到地面,头像将掉落。 如果地面以上 (没有坠落损坏,这是可以接受的!) ,但如果头像放置在“地面”对象下方,虚拟形象可能无法注册与该对象的碰撞,导致它从环境中掉下来并重新生成。 如果虚拟形象在重新定位期间穿透地面,它将被接地。

会话中的所有头像的高度应一致。 如果头像的高度更改范围外,则调整头像位置。 例如:

  • VR 用户实际进入和离开坐姿或站立位置。 HMD 移动会导致场景中的头像穿透地面或垂直站立远高于其他头像。

  • 配置不当的可视化脚本会将头像传送到不适合或垂直太低的位置。

这一点很重要的另一个原因是,当头像物理更新时,如果头像未接地,它将由于太空舱与地面相撞而跳入位置,并将头像拉入新位置。 这对于 HMD 用户尤其有影响,因为此类非自然运动可能会令人作呕。

虚拟形象与之交互的层,并且可以在以下情况下进行:

0 - 默认值
2 - 忽略光线投射
4 - 水 (仅允许扳机对撞机,不可行走)
14 - 地面可传送 ()
18 - TriggerVolume 仅允许 (触发器碰撞体,不可行走)
21 - IgnoreObjects
26 - Custom26
27 - Custom27
28 - Custom28
29 - IgnoreRealtimeLight
30 - WallCollision

详细了解网格项目中的层

支持传送

对于支持传送的场景,可传送表面 (例如,地面或地面) 必须在 GroundCollision 层上具有碰撞体。 还有其他可行走的层,但只有 GroundCollision 是可传送的。 视觉几何图形不可传送,不应位于 GroundCollision 层上;只有碰撞体可以位于该层上。 在传送或找到地面时,不当或不一致的分层和碰撞可能会导致不良影响。

可传送表面必须满足以下条件:

  • 它必须附加某种类型的非触发器碰撞体 (例如网格对撞机或 Box 碰撞体) 。
  • 必须设置为 GroundCollision

请注意低天花板或隧道;这些可能会影响虚拟形象的接地和传送。 例如,虚拟形象物理或传送弧线可能与它们上方的碰撞体相交或交互。 可遍历区域从地面到屋顶的高度应大于 2 米头像胶囊高度。 头像头上方需要有一个小空间缓冲区,尤其是在屋顶倾斜而不是平坦时。

移动物理提供与所有参与者可交互对撞机的平滑头像运动,并防止渗透到太小而无法进行虚拟形象碰撞的区域。 但是,恶意地面碰撞或有问题的环境几何图形(如楔形或非常狭窄的空间)可能会导致头像或相机穿透物体或卡住。 必须全面测试所有可行走和可传送表面。

详细层数

对象层

当 GameObject 具有非触发器碰撞器时,如果它位于其中一个对象层上,它将与其他对象发生碰撞。

0 - 默认值
2 - 忽略光线投射
4 - 仅允许水 (触发器碰撞体)
14 - 地面共生
18 - TriggerVolume 仅允许 (触发器对撞机)
20 - ObjectCollision
26 - Custom26
27 - Custom27
28 - Custom28
29 - IgnoreRealtimeLight
30 - WallCollision
31 - IgnoreParticipant

Unity 中的默认层 (名为“Default”的) 并不奇怪,因此,如果不想与其他对象交互,可能需要使用不同的层。 例如, IgnoreParticipant 用于不应与虚拟形象交互的对象, IgnoreCollisions 用于不应与任何对象交互的对象。

一些重要的层

Default

如果未指定,则碰撞器将位于 默认 层上。 这是一个可行走的层,头像将正确接地。 它不是本地用户的有效传送目标。 此层与其他对象交互和碰撞。

GroundCollision

只有 GroundCollision 层上的碰撞体是本地用户的有效传送目标。 否则,它与 默认 层相同。

没有碰撞支持的视觉几何图形不可行走,也不会阻止头像,因此它是不正确的传送目标,不应位于 GroundCollision 层上。

WallCollision

WallCollision 层用于指示虚拟形象不应渗透的墙壁,以约束可玩空间内的虚拟形象。 VR 用户可以在房间规模运动期间通过 HMD 移动以任意方式移动其头像,并且可以在物理上穿过虚拟墙。 虚拟形象在走完设定的距离后将被传送回游戏区的边界。 否则,此层与 默认 层相同。

层定义

下面是由 ID 和名称定义的层列表,包括阻止语义和说明:

  1. Default

    [虚拟形象/对象/光线广播阻止]

    用于碰撞和照明。 头像可以走在它上,但不能传送到它。 大多数属性的默认值。 默认层上的对象从环境中接收实时方向光。

  2. TransparentFX

    [未阻止]

    Unity 呈现管道中透明和特殊效果对象的特殊处理;确保透明度的正确呈现顺序。

  3. IgnoreRaycast

    [虚拟形象/对象阻止]

    启用碰撞的层不会阻止光线投射,例如不可交互的对象或虚拟形象无法通过的不可见墙壁,但物理对象可以通过 (例如,可以抛出对象的栏杆,但虚拟形象无法跳过) 。

  4. N/A

  5. Water

    [未阻止]

    专用于水面。 可用于与水的专用渲染和物理交互。 不要与非触发器碰撞体一起使用。

  6. 不适用

  7. 不适用

  8. 不适用

  9. 不适用

  10. 不适用

  11. 不适用

  12. 不适用

  13. 不适用

  14. 不适用

  15. GroundCollision

    [虚拟形象/对象/光线广播阻止]

    用于可传送到的可行走碰撞表面。 注意:在早期版本的网格工具包中,这是“NavMesh”层。

  16. 不适用

  17. 不适用

  18. IgnoreCollisions

    [未阻止]

    不与任何内容交互。 可以剪切环境和其他对象。

  19. TriggerVolume

    [未阻止]

    不应受物理或光线投射影响且没有特殊用途的对象层。 不要在具有非触发器碰撞器的对象上使用。

  20. N/A

  21. ObjectCollision

    [对象阻止]

    要与对象碰撞的层,但不能与头像或光线投射相冲突。

  22. IgnoreObjects

    [阿凡达/光线广播阻止]

    要与头像(而不是对象)冲突的层。

  23. RaycastOnly

    [光线投射阻止]

    阻止光线投射或可以选择但不影响头像或对象冲突的对象层。

  24. 不适用

  25. 不适用

  26. 不适用

  27. Custom26

    [虚拟形象/对象/光线广播阻止]

    用户自定义层。

  28. Custom27

    [虚拟形象/对象/光线广播阻止]

    用户自定义层。

  29. Custom28

    [虚拟形象/对象/光线广播阻止]

    用户自定义层。

  30. IgnoreRealtimeLight

    [虚拟形象/对象/光线广播阻止]

    指定环境中的哪些艺术对象不接收实时定向光,例如大多数静态对象 (改为使用烘焙照明与光线贴图) 。

  31. WallCollision

    [虚拟形象/对象/光线广播阻止]

    防止通过场景进行剪裁的冲突。 如果 HMD 用户将头伸过墙壁,则他们将被重新生成到可玩区域的附近位置。

  32. IgnoreParticipant

    [对象/光线广播阻止]

    阻止光线投射的对象和其他对象,但不是头像。

层交互和表

层交互

层冲突矩阵的屏幕截图。

层表

对后面的“层”表中的四种颜色代码的说明。

显示所有可用层的属性的表。