조개게임 완료 전
This commit is contained in:
97
Assets/02_Scripts/Cave/RaftRestartManager.cs
Normal file
97
Assets/02_Scripts/Cave/RaftRestartManager.cs
Normal file
@@ -0,0 +1,97 @@
|
||||
using System.Collections;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
public class RaftRestartManager : MonoBehaviour
|
||||
{
|
||||
[Header("References")]
|
||||
[SerializeField] private RaftHealth raftHealth;
|
||||
|
||||
[Header("Restart")]
|
||||
[SerializeField] private bool restartAutomatically = false;
|
||||
[SerializeField] private float autoRestartDelay = 2.0f;
|
||||
|
||||
[Tooltip("키보드 테스트용입니다. VR 버튼 리스타트는 나중에 연결해도 됩니다.")]
|
||||
[SerializeField] private KeyCode restartKey = KeyCode.R;
|
||||
|
||||
[Header("Debug")]
|
||||
[SerializeField] private bool showDebugLog = true;
|
||||
|
||||
private bool waitingForRestart;
|
||||
private Coroutine restartRoutine;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (raftHealth == null)
|
||||
raftHealth = FindFirstObjectByType<RaftHealth>();
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
if (raftHealth != null)
|
||||
{
|
||||
raftHealth.onDead.AddListener(OnRaftDead);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
if (raftHealth != null)
|
||||
{
|
||||
raftHealth.onDead.RemoveListener(OnRaftDead);
|
||||
}
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (!waitingForRestart)
|
||||
return;
|
||||
|
||||
#if ENABLE_LEGACY_INPUT_MANAGER
|
||||
if (Input.GetKeyDown(restartKey))
|
||||
{
|
||||
RestartNow();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
public void OnRaftDead()
|
||||
{
|
||||
if (waitingForRestart)
|
||||
return;
|
||||
|
||||
waitingForRestart = true;
|
||||
|
||||
if (showDebugLog)
|
||||
{
|
||||
Debug.Log("[RaftRestartManager] 체력 0. 리스타트 대기 상태입니다. R 키 또는 RestartNow 호출로 재시작합니다.");
|
||||
}
|
||||
|
||||
if (restartAutomatically)
|
||||
{
|
||||
if (restartRoutine != null)
|
||||
StopCoroutine(restartRoutine);
|
||||
|
||||
restartRoutine = StartCoroutine(AutoRestartRoutine());
|
||||
}
|
||||
}
|
||||
|
||||
private IEnumerator AutoRestartRoutine()
|
||||
{
|
||||
yield return new WaitForSeconds(autoRestartDelay);
|
||||
RestartNow();
|
||||
}
|
||||
|
||||
public void RestartNow()
|
||||
{
|
||||
if (showDebugLog)
|
||||
{
|
||||
Debug.Log("[RaftRestartManager] 현재 씬을 다시 시작합니다.");
|
||||
}
|
||||
|
||||
Time.timeScale = 1f;
|
||||
|
||||
Scene currentScene = SceneManager.GetActiveScene();
|
||||
SceneManager.LoadScene(currentScene.buildIndex);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user