씬 전환 기능 및 씬이 변경되어도 플레이어 정보를 유지하도록 게임 매니저 구현

This commit is contained in:
김민구
2026-07-08 04:24:12 +09:00
parent 8f742e50d9
commit 6939015d9e
8 changed files with 456 additions and 25 deletions
@@ -0,0 +1,44 @@
using UnityEngine;
using UnityEngine.SceneManagement;
[RequireComponent(typeof(Collider2D))] // 트리거 판정을 위해 Collider2D가 부착되어 있어야 합니다.
public class WallTransition : MonoBehaviour
{
[Header("전환될 목표 씬 이름")]
[SerializeField] private string targetSceneName = "battleStage";
private void Start()
{
// 물리적인 밀어냄 현상을 방지하고 통과 감지만 할 수 있도록 트리거(Trigger)로 지정합니다.
Collider2D col = GetComponent<Collider2D>();
if (col != null && !col.isTrigger)
{
col.isTrigger = true;
Debug.LogWarning($"[Transition] {gameObject.name}에 부착된 Collider2D를 트리거(Is Trigger = true)로 자동 갱신했습니다.");
}
}
private void OnTriggerEnter2D(Collider2D other)
{
// 닿은 물체가 플레이어 캐릭터인지 확인합니다.
Player player = other.GetComponent<Player>();
if (player != null)
{
Debug.Log($"[Transition] 플레이어 '{player.CharacterName}'가 우측 경계 성벽에 접촉했습니다.");
// 1. 싱글톤 GameManager 인스턴스가 존재할 경우 현재 플레이어의 정보(이름, 세대, HP)를 세이브합니다.
if (GameManager.Instance != null)
{
GameManager.Instance.SavePlayerData(player);
}
else
{
Debug.LogWarning("[Transition] 씬에 GameManager 싱글톤 오브젝트가 존재하지 않아 플레이어 정보 임시 세이브를 스킵합니다.");
}
// 2. 유니티 씬 매니저를 통해 목표 씬(battleStage)을 즉시 로드합니다.
Debug.Log($"[Transition] {targetSceneName} 씬으로 화면을 전환합니다.");
SceneManager.LoadScene(targetSceneName);
}
}
}