51 lines
2.1 KiB
C#
51 lines
2.1 KiB
C#
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 싱글톤 오브젝트가 존재하지 않아 플레이어 정보 임시 세이브를 스킵합니다.");
|
|
}
|
|
|
|
// 성벽 통과/씬 전환 효과음 재생
|
|
if (SoundManager.Instance != null)
|
|
{
|
|
SoundManager.Instance.PlayTransition();
|
|
}
|
|
|
|
// 2. 유니티 씬 매니저를 통해 목표 씬(battleStage)을 즉시 로드합니다.
|
|
Debug.Log($"[Transition] {targetSceneName} 씬으로 화면을 전환합니다.");
|
|
SceneManager.LoadScene(targetSceneName);
|
|
}
|
|
}
|
|
}
|