열차 목업의 내부 확인용 프로젝트
smchoi
2024-07-31 9fe33c1ae076b0f6501619388e6b4cc872b76f80
Assets/Korail/Scripts/Action/ActionButton.cs
@@ -1,6 +1,9 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.Animations;
public class ActionButton : MonoBehaviour
{
@@ -12,17 +15,23 @@
    /// <summary>
    /// 애니메이션 속도
    /// </summary>
    public float Speed =1;
    public float Speed;
    /// <summary>
    /// 애니메이션 목표 회전값(Euler) 또는 목표 좌표
    /// </summary>
    public Vector3 TargetRot;
    /// <summary>
    /// 이동 애니메이션 여부
    /// true면 이동 false면 회전 애니메이션
    /// </summary>
    public bool isFixed;
    public bool isFixed = false;
    public float waitForSecond = 0.5f;
    private Quaternion targetRot;
    private Quaternion initRot;
    private Vector3 targetPos;
@@ -36,20 +45,16 @@
    private bool isEnd;
    /// <summary>
    /// 코루틴이 시작했는지 여부
    /// </summary>
    private bool isStart = false;
    /// <summary>
    /// 애니메이션 종료를 시작값으로(VR에서만)
    /// </summary>
    public bool VREndStart;
    void Start()
    {
        targetPos = TargetRot;
        initPos = transform.localPosition;
        Initialize();
    }
@@ -68,16 +73,13 @@
    void EndInit()
    {
        transform.localPosition = targetPos;
        isEnd = true;
    }
    void Init()
    {
        transform.localPosition = initPos;
        isEnd = false;
    }
@@ -106,60 +108,52 @@
        {
            t += Speed * Time.deltaTime;
            if (!isFixed)
            {
                if(!isEnd && !isStart)
                {
                    isStart = true;
                    StartCoroutine(MoveEndAndInit());
                }
            }
            else
            if(isFixed)
            {
                if (isEnd)
                {
                    // 초기 좌표까지 애니메이션
                    MoveInitPos();
                    transform.localPosition = Vector3.Lerp(transform.localPosition, initPos, t);
                    if (transform.localPosition == initPos)
                    {
                        InitValues(false);
                    }
                }
                else
                {
                    // 목표 좌표까지 애니메이션
                    MoveEndPos();
                    transform.localPosition = Vector3.Lerp(transform.localPosition, targetPos, t);
                    if (transform.localPosition == targetPos)
                    {
                        InitValues(true);
                    }
                }
            } else
            {
                if (isEnd)
                {
                    // 초기 좌표까지 애니메이션
                    transform.localPosition = Vector3.Lerp(transform.localPosition, initPos, t);
                    if (transform.localPosition == initPos)
                    {
                        InitValues(false);
                    }
                }
                else
                {
                    // 목표 좌표까지 애니메이션
                    transform.localPosition = Vector3.Lerp(transform.localPosition, targetPos, t);
                    if (transform.localPosition == targetPos)
                    {
                        isEnd = true;
                        t = 0;
                    }
                }
            }
        }
    }
    private void MoveEndPos()
    {
        transform.localPosition = Vector3.Lerp(transform.localPosition, targetPos, t);
        if (transform.localPosition == targetPos)
        {
            InitValues(true);
        }
    }
    private void MoveInitPos()
    {
        transform.localPosition = Vector3.Lerp(transform.localPosition, initPos, t);
        if (transform.localPosition == initPos)
        {
            InitValues(false);
        }
    }
    IEnumerator MoveEndAndInit()
    {
        MoveEndPos();
        yield return new WaitForSeconds(waitForSecond);
        MoveInitPos();
        isStart = false;
    }
}