Files
Dino_Love_Simulation/Assets/02_Scripts/Story/ch4 scrip/JunpyoRunToPoint.cs
dldydtn9755-crypto dd4f318a9c 컴퓨터 설정까지
2026-07-28 14:08:45 +09:00

104 lines
2.4 KiB
C#

using System.Collections;
using UnityEngine;
public class JunpyoRunToPoint : MonoBehaviour
{
[Header("Junpyo")]
[SerializeField] private Transform junpyo;
[Header("Target")]
[SerializeField] private Transform junpyoStopPoint;
[Header("Movement")]
[SerializeField] private float moveDuration = 1.2f;
[SerializeField] private bool faceMoveDirection = true;
private bool isMoving;
private bool hasMoved;
// 대화가 시작될 때 호출
public void RunToStopPoint()
{
if (isMoving || hasMoved)
return;
if (junpyo == null || junpyoStopPoint == null)
{
Debug.LogWarning("구준표 또는 JunpyoStopPoint가 연결되지 않았습니다.");
return;
}
hasMoved = true;
StartCoroutine(MoveRoutine());
}
private IEnumerator MoveRoutine()
{
isMoving = true;
Vector3 startPosition = junpyo.position;
Quaternion startRotation = junpyo.rotation;
Vector3 targetPosition = junpyoStopPoint.position;
targetPosition.y = startPosition.y;
Vector3 direction = targetPosition - startPosition;
direction.y = 0f;
Quaternion targetRotation = startRotation;
if (faceMoveDirection && direction.sqrMagnitude > 0.001f)
targetRotation = Quaternion.LookRotation(direction.normalized);
float elapsed = 0f;
while (elapsed < moveDuration)
{
elapsed += Time.deltaTime;
float t = Mathf.Clamp01(elapsed / moveDuration);
junpyo.position = Vector3.Lerp(
startPosition,
targetPosition,
t
);
if (faceMoveDirection)
{
junpyo.rotation = Quaternion.Slerp(
startRotation,
targetRotation,
t
);
}
yield return null;
}
// 마지막 위치를 정확하게 맞춤
junpyo.position = targetPosition;
if (faceMoveDirection)
junpyo.rotation = targetRotation;
isMoving = false;
}
public void ResetMovement()
{
hasMoved = false;
isMoving = false;
}
[ContextMenu("Test Run")]
private void TestRun()
{
RunToStopPoint();
}
[ContextMenu("Reset Run")]
private void TestResetRun()
{
ResetMovement();
}
}