런타임 시 라이트 프로브를 이동해야 할 수 있습니다. 예를 들어 여러 씬을 추가적으로 로드한 후 각 씬을 다른 위치로 이동하여 월드를 만드는 경우 라이트 프로브와 관련 씬 오브젝트를 이동해야 합니다.
LightProbes API를 사용하여 런타임 시 라이트 프로브를 이동할 수 있습니다. 라이트 프로브 그룹 오브젝트의 Transform 컴포넌트를 업데이트하여 라이트 프로브를 이동할 수 없습니다. Transform은 베이킹에만 영향을 미치기 때문입니다.
API를 사용하여 라이트 프로브를 이동하면 위치만 변경됩니다. 라이트 프로브에 저장된 베이크된 데이터는 동일하게 유지됩니다.
다음 단계를 따르십시오.
Scene 오브젝트)은 이제 이 복제된 데이터를 사용합니다.라이트 프로브가 포함된 다른 씬과 함께 씬을 베이크한 경우, 반환된 데이터에는 베이크된 모든 씬의 라이트 프로브가 포함됩니다. 여러 씬에서 라이트 프로브를 사용하는 방법에 대한 자세한 내용은 라이트 프로브 및 씬 로딩을 참조하십시오.
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();
}
}