Projext/Assets/00001.Scripts/DoorController.cs
2026-02-22 22:37:34 +09:00

61 lines
2.0 KiB
C#

using UnityEngine;
public class DoorController : MonoBehaviour
{
[Header("필수 연결")]
public Transform player;
public GameObject interactionCanvas; // World Space 캔버스
[Header("설정")]
public string targetSceneName = "NextMap"; // 이동할 씬 이름
public float interactDistance = 4f;
public Vector3 worldOffset = new Vector3(0, 1.2f, 0); // 문 중앙 높이로 조정
[Header("연출 설정")]
public float fadeSpeed = 5f;
public float floatSpeed = 2f;
public float floatAmplitude = 0.1f;
private CanvasGroup canvasGroup;
private float currentAlpha = 0f;
private Transform mainCamTransform;
void Start()
{
mainCamTransform = Camera.main.transform;
canvasGroup = interactionCanvas.GetComponent<CanvasGroup>();
if (canvasGroup == null)
canvasGroup = interactionCanvas.AddComponent<CanvasGroup>();
canvasGroup.alpha = 0;
}
void Update()
{
if (player == null || interactionCanvas == null) return;
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)
{
// 빌보드: 항상 카메라를 바라봄
interactionCanvas.transform.forward = mainCamTransform.forward;
// 둥둥 뜨는 효과
float yOffset = Mathf.Sin(Time.time * floatSpeed) * floatAmplitude;
interactionCanvas.transform.position = transform.position + worldOffset + new Vector3(0, yOffset, 0);
// F키 입력 시 페이드 로딩 시작
if (targetAlpha > 0.5f && Input.GetKeyDown(KeyCode.F))
{
SceneLoader.Instance.LoadSceneWithFade(targetSceneName);
interactionCanvas.SetActive(false); // 로딩 시작 시 아이콘 숨김
}
}
}
}