■ 개요
○ 오늘 계획
- 플레이어 동적 생성 버그 수정
- 캐릭터매니저, 스테이지 매니저, 코드정리
- 스테이지 전환될때 플레이어 위치부터 초기화되어서 이상함-> 로드 순서 알아야할듯
■ 플레이어 위치 초기화
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);
}
}