Projext/Assets/02_Scripts/MapGeneration/DoorController.cs

63 lines
2.0 KiB
C#
Raw Normal View History

2026-03-01 03:22:29 +00:00
using UnityEngine;
public class DoorController : MonoBehaviour
{
[Header("<22>ʼ<EFBFBD> <20><><EFBFBD><EFBFBD>")]
public Transform player;
public GameObject interactionCanvas;
[Header("<22><><EFBFBD><EFBFBD>")]
public string targetSceneName = "NextMap";
public float interactDistance = 2f;
[Header("<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>")]
public float fadeSpeed = 5f;
public float floatSpeed = 2f;
public float floatAmplitude = 0.2f;
private CanvasGroup canvasGroup;
private float currentAlpha = 0f;
private Vector3 initialLocalPosition;
void Start()
{
// 1. <20>ν<EFBFBD><CEBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UI<55><49> <20>ʱ<EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
if (interactionCanvas != null)
{
initialLocalPosition = interactionCanvas.transform.localPosition;
canvasGroup = interactionCanvas.GetComponent<CanvasGroup>();
if (canvasGroup == null)
canvasGroup = interactionCanvas.AddComponent<CanvasGroup>();
canvasGroup.alpha = 0;
}
}
void Update()
{
if (player == null || interactionCanvas == null) return;
// 2. <20>Ÿ<EFBFBD> üũ <20><> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD><EFBFBD>
float distance = Vector3.Distance(player.position, transform.position);
float targetAlpha = (distance <= interactDistance) ? 1f : 0f;
currentAlpha = Mathf.MoveTowards(currentAlpha, targetAlpha, Time.deltaTime * fadeSpeed);
canvasGroup.alpha = currentAlpha;
if (currentAlpha > 0.01f)
{
// 3. [<5B>ٽ<EFBFBD>] <20>ν<EFBFBD><CEBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>鸲 ȿ<><C8BF><EFBFBD><EFBFBD> <20>ݴϴ<DDB4>.
// transform.position<6F><6E> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʰ<EFBFBD> localPosition<6F><6E> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
float yOffset = Mathf.Sin(Time.time * floatSpeed) * floatAmplitude;
interactionCanvas.transform.localPosition = initialLocalPosition + new Vector3(0, yOffset, 0);
// 4. <20>Է<EFBFBD> üũ
if (targetAlpha > 0.5f && Input.GetKeyDown(KeyCode.F))
{
Debug.Log(targetSceneName + " (<28><>)<29><> <20>̵<EFBFBD> <20>õ<EFBFBD>");
// SceneLoader.Instance.LoadSceneWithFade(targetSceneName);
}
}
}
}