版本:Unity 6 (6000.0)
语言:English
在多个场景中加载光探测器
光探测器故障排除

运行时移动光探测器

您可能需要在运行时移动 光探测器光探测器存储有关光线如何穿过场景中空间的信息。在给定空间内排列的光探测器集合可以改善该空间内移动物体和静态 LOD 场景的光照。 更多信息
查看 术语表
。例如,如果您通过 增量加载多个场景 来创建世界,然后将每个 场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,您放置环境、障碍物和装饰品,基本上是逐个设计和构建您的游戏。 更多信息
查看 术语表
移动到不同的位置,您需要将光探测器与其相关的场景对象一起移动。

您可以使用 LightProbes API 在运行时移动光探测器。您不能通过更新 变换组件变换组件确定场景中每个对象的 Position、Rotation 和 Scale。每个游戏对象都有一个变换。 更多信息
查看 术语表
来移动光探测器 光探测器组一个组件,允许您将光探测器添加到场景中的游戏对象。 更多信息
查看 术语表
对象,因为变换只会影响烘焙。

当您使用 API 移动光探测器时,只有位置会改变。存储在光探测器中的烘焙数据保持不变。

请按照以下步骤操作

  1. 使用 LightProbes.GetInstantiatedLightProbesForScene API 克隆已加载场景使用的光探测器数据。已加载场景(Scene 对象)将从现在开始使用此克隆数据。
  2. 使用 GetPositionsSelfSetPositionsSelf API 设置新位置。
  3. 使用 LightProbes.TetrahedralizeLightProbes.TetrahedralizeAsync API 更新场景中光探测器数据的内部结构,以便对象使用正确的光照数据。

如果您将场景与包含光探测器的其他场景一起烘焙,则返回的数据包含所有烘焙场景中的光探测器。有关在多个场景中使用光探测器的更多信息,请参考 光探测器和场景加载

Tetrahedralize API 可能需要很长时间。如果您移动多个光探测器,最好最后四面体化一次。

如果您需要读取场景中光探测器的位置,但不移动它们,可以使用 LightProbes.GetSharedLightProbesForScene API。

示例

以下代码将当前场景中的光探测器移动到每一帧的新位置。

将脚本附加到场景中的任何对象。运行项目时,选择任何使用光探测器的对象,以便您可以看到探测器移动。光探测器组对象不会移动。

using UnityEngine;
using UnityEngine.SceneManagement;

public class LoadSingleSceneAndMoveProbes : MonoBehaviour
{
    void Update()
    {
        // Get a copy of the Light Probes in the current scene
        LightProbes lightProbes = LightProbes.GetInstantiatedLightProbesForScene(SceneManager.GetActiveScene());

        // Get the Light Probe positions
        Vector3[] positions = lightProbes.GetPositionsSelf();

        // Update the positions
        for (int i = 0; i < positions.Length; i++)
        {
            positions[i].x = positions[i].x + 0.01f;
        }

        // Copy the new positions back to the Light Probes
        lightProbes.SetPositionsSelf(positions, true);

        // Tetrahedralize to update the data in the LightProbes object of the scene.
        LightProbes.Tetrahedralize();
    }
}
在多个场景中加载光探测器
光探测器故障排除