내일배움캠프 53일차 TIL : 플레이어 위치 초기

woollim·2024년 12월 6일
0

내일배움캠프TIL

목록 보기
46/65
post-thumbnail

■ 개요

○ 오늘 계획

  • 플레이어 동적 생성 버그 수정
  • 캐릭터매니저, 스테이지 매니저, 코드정리
  • 스테이지 전환될때 플레이어 위치부터 초기화되어서 이상함-> 로드 순서 알아야할듯


■ 플레이어 위치 초기화

using UnityEngine;
using UnityEngine.SceneManagement;

public class PlayerPositionManager : MonoBehaviour
{
    public GameObject playerPrefab; // 플레이어 프리팹
    private static Vector3 nextPosition = Vector3.zero; // 다음 스폰 위치
    private static Quaternion nextRotation = Quaternion.identity; // 다음 스폰 회전값

    void Awake()
    {
        // 플레이어 생성 및 초기 위치 설정
        if (FindObjectOfType<PlayerController>() == null)
        {
            GameObject player = Instantiate(playerPrefab, nextPosition, nextRotation);
            DontDestroyOnLoad(player);
        }
        else
        {
            // 이미 생성된 플레이어가 있다면 위치 갱신
            GameObject player = GameObject.FindWithTag("Player");
            if (player != null)
            {
                player.transform.position = nextPosition;
                player.transform.rotation = nextRotation;
            }
        }

        SceneManager.sceneLoaded += OnSceneLoaded; // 씬 로드 이벤트 등록
    }

    void OnSceneLoaded(Scene scene, LoadSceneMode mode)
    {
        // 씬 전환 후 새로운 위치로 이동
        GameObject player = GameObject.FindWithTag("Player");
        if (player != null)
        {
            player.transform.position = nextPosition;
            player.transform.rotation = nextRotation;
        }
    }

    // 다른 스크립트에서 이 함수로 다음 위치를 설정
    public static void SetNextPosition(Vector3 position, Quaternion rotation)
    {
        nextPosition = position;
        nextRotation = rotation;
    }
}
using UnityEngine;
using UnityEngine.SceneManagement;

public class SceneTransition : MonoBehaviour
{
    public Transform spawnPoint; // 다음 씬에서의 스폰 포인트

    public void LoadNextScene(string sceneName)
    {
        // 다음 위치와 회전을 설정
        if (spawnPoint != null)
        {
            PlayerPositionManager.SetNextPosition(spawnPoint.position, spawnPoint.rotation);
        }

        // 씬 전환
        SceneManager.LoadScene(sceneName);
    }
}

0개의 댓글