创造你的世界
玩家及角色:进阶

摄像机碰撞层

7min

概述

通过ZepetoPlayers创建的ZepetoCamera可以通过相机碰撞设置控制相机与游戏对象之间的物理碰撞。

相机碰撞是指相机与场景中的物体发生碰撞。

如果设置了相机碰撞,当相机与物体发生碰撞时,它将无法在该物体前面移动,导致相机停留在物体前面而不是穿过它。

让我们来看以下两个例子。

  • 在左侧的屏幕上,未设置相机碰撞,允许相机自由移动而不受角色周围物体或地面的影响。
  • 在右侧,启用了相机碰撞,因此相机在移动时无法穿透墙壁和地板。

通过启用相机碰撞,相机的移动受到物理影响,这意味着玩家无法看到的位置无法被相机照亮,从而实现更真实的表现。

Document image




设置 ZepetoPlayers 相机碰撞

1) 您可以设置相机每个层检测的碰撞。

  • 要设置或添加用户层,请在检查器窗口中按层下拉菜单并选择添加层。
  • 用户可以添加的层可以编号为 Layer3 和 Layer6 或更高。 Layer0 ~ 2 和 Layer6 ~ 7 是 Unity 的默认层。
Document image




2) 选择您希望相机应用碰撞判断的对象,然后选择您设置的层。

Document image




3) 现在,在 ZepetoPlayers 的相机部分,您可以通过按下碰撞的下拉按钮来选择要注册为碰撞的层。检查您添加的层。

Document image




4) 现在按下播放按钮以运行运行时,您将看到 Zepeto 相机穿过地板和墙壁而不破坏它们。

Document image




在运行时将其设置为脚本

  1. 您可以在运行时动态指定相机碰撞。
  2. 下面是一个脚本,用于在运行时将注册为公共变量的collisionLayer编号设置为层掩码。
  • 关键是指定要在ZepetoPlayers.instance.cameraData.layer中选择的层掩码。
CameraCollisionManager


3. 脚本描述

  • 为了编写一个层并将其应用于相机,我们需要使用 LayerMask。
  • LayerMask 的值将通过按位操作输入。
    • LayerMask 表示为一个整数值,其中每一位表示该层是否被包含。
    • 例如,如果 LayerMask 的值为 5(在二进制中为 00000101),我们可以说层 0 和层 2 被包含。
  • layerMaskValue |=: 这个按位操作将现有的 layerMaskValue 和新计算的值通过 OR 操作结合在一起。
    • 如果现有的 layerMaskValue 在二进制中为 00000001,而新计算的值为 00000100,则将这两个值进行 OR 操作将得到 00000101。
    • 这确保了层 0 和层 2 都包含在 LayerMask 中。
  • 在 EnhancedCamera 的情况下,玩家层未设置为相机的碰撞层,以防止相机与角色相交。



更新日期 11 Oct 2024
Doc contributor
此页面是否对您有帮助?