SceneManager.sceneLoaded 이벤트
이 이벤트는 새로운 씬이 로드될 때 호출.
이 이벤트를 사용하여 새로운 씬이 로드된 후 초기화 작업을 수행하거나, 씬 간의 데이터를 전달하는 등의 작업을 수행할 수 있음.
using UnityEngine; using UnityEngine.SceneManagement; public class SceneLoader : MonoBehaviour { void OnEnable() { SceneManager.sceneLoaded += OnSceneLoaded; } void OnDisable() { SceneManager.sceneLoaded -= OnSceneLoaded; } void OnSceneLoaded(Scene scene, LoadSceneMode mode) { // 이 씬이 로드될 때 실행할 작업을 여기에 추가 } }
SceneManager.sceneUnloaded 이벤트:
이 이벤트는 현재 씬이 언로드되고 새로운 씬으로 전환되기 전에 호출.
이 이벤트를 사용하여 이전 씬에서 필요한 정리 작업을 수행할 수 있음.
using UnityEngine; using UnityEngine.SceneManagement; public class SceneLoader : MonoBehaviour { void OnEnable() { SceneManager.sceneUnloaded += OnSceneUnloaded; } void OnDisable() { SceneManager.sceneUnloaded -= OnSceneUnloaded; } void OnSceneUnloaded(Scene scene) { // 이전 씬이 언로드되기 전에 실행할 작업을 여기에 추가 } }
private void OnSceneLoaded(Scene scene, LoadSceneMode mode) { if (scene.isLoaded) { SpawnPlayer(targetSpawnPointIndex); } } public void SpawnPlayer(int spawnPointIndex) { if (spawnPointIndex >= 0 && spawnPointIndex < spawnPointDataList.Count) { SpawnPointData spawnPointData = spawnPointDataList[spawnPointIndex]; Vector3 spawnPosition = spawnPointData.spawnPosition; Quaternion spawnRotation = spawnPointData.spawnRotation; if (currentPlayer != null) { Destroy(currentPlayer); } playerspawn = spawnPointData; currentPlayer = Instantiate(playerPrefab, spawnPosition, spawnRotation); } }
=> 씬 로드 이벤트를 스폰 매니저가 구독을 한 상태에서 새로운 씬으로 넘어갈때, 스폰 매니저가 가지고 있는 targetSpawnPointIndex에 따라 스폰 포인트 정보를 리스트에서 가져와서 플레이어를 스폰.