TIL (59) | 2023.10.19 | 씬로드 이벤트

kjg5370·2023년 10월 19일
0

TIL

목록 보기
58/91
post-thumbnail

들어가기 앞서

오늘 팀 프로젝트를 진행하면서 씬을 로드한 후 매서드를 시작할 수 있는 방법을 찾았는데
씬 로드 이벤트를 구독하는 방법을 통해 씬이 로드된 후 메서드가 실행되도록 하는 것에 대해 정리해보겠습니다.

오늘 배운 것

  • 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에 따라 스폰 포인트 정보를 리스트에서 가져와서 플레이어를 스폰.

내일 할 일

  • 팀 프로젝트 마무리
profile
학생입니다

0개의 댓글