Version: 6000.3
语言: 中文
在多个场景中加载光照探针
光探头故障排除

在运行时移动光照探针

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

你可以使用 LightProbes API 在运行时移动光照探针。你无法通过更新Transform 组件Transform 组件确定场景中每个对象的 Position、Rotation 和 Scale。每个 GameObject 都有一个 Transform。更多信息
请参阅术语表
光照探针组一个组件,用于将光照探针添加到场景中的游戏对象。更多信息
请参阅术语表
对象,因为 Transform 仅影响烘焙。

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

按着这些次序:

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

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

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

如果你需要读取场景中光照探针的位置,但不能移动它们,则可以使用 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();
    }
}
在多个场景中加载光照探针
光探头故障排除