63 lines
2.0 KiB
C#
63 lines
2.0 KiB
C#
using UnityEngine;
|
|
|
|
public class DoorController : MonoBehaviour
|
|
{
|
|
[Header("필수 연결")]
|
|
public Transform player;
|
|
public GameObject interactionCanvas;
|
|
|
|
[Header("설정")]
|
|
public string targetSceneName = "NextMap";
|
|
public float interactDistance = 2f;
|
|
|
|
[Header("연출 설정")]
|
|
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. 인스펙터에서 설정한 UI의 초기 위치를 기억합니다.
|
|
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. 거리 체크 및 알파(투명도) 조절
|
|
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. [핵심] 인스펙터 위치를 기준으로 상하 흔들림 효과만 줍니다.
|
|
// transform.position을 강제로 고정하지 않고 localPosition을 사용합니다.
|
|
float yOffset = Mathf.Sin(Time.time * floatSpeed) * floatAmplitude;
|
|
interactionCanvas.transform.localPosition = initialLocalPosition + new Vector3(0, yOffset, 0);
|
|
|
|
// 4. 입력 체크
|
|
if (targetAlpha > 0.5f && Input.GetKeyDown(KeyCode.F))
|
|
{
|
|
Debug.Log(targetSceneName + " (으)로 이동 시도");
|
|
// SceneLoader.Instance.LoadSceneWithFade(targetSceneName);
|
|
}
|
|
}
|
|
}
|
|
} |