ランタイムにライトプローブを移動する必要がある場合があります。例えば、複数のシーンを追加でロード してワールドを作成し、各シーンを異なる位置に移動する場合は、ライトプローブを関連するシーンオブジェクトとともに移動する必要があります。
LightProbes API を使用して、ランタイムにライトプローブを移動できます。ライトプローブグループオブジェクトの Transform コンポーネントを更新してライトプローブを移動することはできません。Transform はベイクにのみ影響するためです。
API を使用してライトプローブを移動すると、位置のみが変わります。ライトプローブに格納されているベイクされたデータは変わりません。
以下の手順に従ってください。
Scene オブジェクト) は、これ以降このクローンデータを使用します。ライトプローブを含むほかのシーンと一緒にシーンをベイクした場合、返されるデータにはベイクしたすべてのシーンのライトプローブが含まれます。複数のシーンでのライトプローブの使用についての詳細は、ライトプローブとシーンのロード を参照してください。
Tetrahedralize API には長い時間がかかる場合があります。複数のライトプローブを移動する場合は、終了時に 1 回四面体分割するのが最善です。
シーン内のライトプローブの位置を読み取る必要があるが、移動しない場合は、代わりに 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();
}
}