Projext/Assets/00001.Scripts/MapGeneratorWithWalls.cs

105 lines
2.9 KiB
C#
Raw Normal View History

2026-02-22 13:37:34 +00:00
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Collections;
public class PortalController : MonoBehaviour
{
[Header("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UI<55><49>")]
public CanvasGroup fKeyCanvasGroup; // FŰ<46><C5B0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public Image fadeImage; // <20><><EFBFBD><EFBFBD> <20>г<EFBFBD>
public Text loadingText; // <20>ε<EFBFBD> <20><><EFBFBD><EFBFBD>
[Header("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")]
public string nextSceneName = "Stage1"; // <20>̵<EFBFBD><CCB5><EFBFBD> <20><> <20≯<EFBFBD>
public float fadeSpeed = 1.0f; // <20><><EFBFBD>̵<EFBFBD> <20>ӵ<EFBFBD>
private bool isPlayerNearby = false;
private bool isLoadingStarted = false;
void Start()
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> UI <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>ʱ<EFBFBD>ȭ
fKeyCanvasGroup.alpha = 0;
fadeImage.color = new Color(0, 0, 0, 0);
loadingText.color = new Color(1, 1, 1, 0);
}
// <20>÷<EFBFBD><C3B7>̾ <20><>ó<EFBFBD><C3B3> <20><><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD>
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player") && !isLoadingStarted)
{
isPlayerNearby = true;
StopAllCoroutines();
StartCoroutine(FadeUI(fKeyCanvasGroup, 1f, 0.5f));
}
}
// <20>÷<EFBFBD><C3B7>̾ <20>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private void OnTriggerExit(Collider other)
{
if (other.CompareTag("Player"))
{
isPlayerNearby = false;
StopAllCoroutines();
StartCoroutine(FadeUI(fKeyCanvasGroup, 0f, 0.5f));
}
}
void Update()
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD>!
if (isPlayerNearby && Input.GetKeyDown(KeyCode.F) && !isLoadingStarted)
{
StartCoroutine(TransitionSequence());
}
}
// ȭ<><C8AD> <20><><EFBFBD><EFBFBD> -> <20>ε<EFBFBD> -> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD>
IEnumerator TransitionSequence()
{
isLoadingStarted = true;
// 1. FŰ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
yield return StartCoroutine(FadeUI(fKeyCanvasGroup, 0f, 0.3f));
// 2. ȭ<><C8AD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>˰<EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD>̵<EFBFBD> <20>ƿ<EFBFBD>)
float timer = 0;
while (timer < 1f)
{
timer += Time.deltaTime * fadeSpeed;
fadeImage.color = new Color(0, 0, 0, timer);
yield return null;
}
// 3. <20>ε<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ÿ<EFBFBD><C5B8>
timer = 0;
while (timer < 1f)
{
timer += Time.deltaTime * 2f;
loadingText.color = new Color(1, 1, 1, timer);
yield return null;
}
// 4. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28>ε<EFBFBD><CEB5>ϴ<EFBFBD> ô!)
yield return new WaitForSeconds(1.5f);
// 5. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>!
SceneManager.LoadScene(nextSceneName);
}
// UI<55><49> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε巴<CEB5><E5B7B4> <20>ٲ<EFBFBD><D9B2>ִ<EFBFBD> <20><>ƿ<EFBFBD><C6BF>Ƽ <20>ڷ<EFBFBD>ƾ
IEnumerator FadeUI(CanvasGroup cg, float targetAlpha, float duration)
{
float startAlpha = cg.alpha;
float time = 0;
while (time < duration)
{
time += Time.deltaTime;
cg.alpha = Mathf.Lerp(startAlpha, targetAlpha, time / duration);
yield return null;
}
cg.alpha = targetAlpha;
}
}