C#/Unity

[Unity2D] Tweening을 사용한 캐릭터 움직이기

반나무 2020. 7. 6. 17:24

using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using UnityEngine;
// 이동간 절대기준 사용위한 Tweening 라이브러리 사용
using DG.Tweening; 

public class hero : MonoBehaviour
{
    bool _token = false;
    
    // Update is called once per frame
    void Update()
    {
        
        if(!_token) { 
            // 왼쪽
            if (Input.GetKey(KeyCode.LeftArrow))
            {
                _token = true;
                float EndPositionX = transform.position.x;
                EndPositionX -= 1.5f;

                // endValue = 도착지, duration = 얼마동안?(1초=1.0f)
                // OnComplete = duration이 끝나면 인자 함수를 실행해줌
                // SetEase = 움직임 자연스럽게 해주는 효과

                // 더블클릭하고 F12 누르면 함수안으로 들어가짐
                // enum 열거형 = 배열과는 다르게 상수를 정의하기위해 쓰임
                transform.DOMoveX(EndPositionX, 0.5f).OnComplete(ActionComplete).SetEase(Ease.Flash);
                
           
            // 오른쪽
            } else if (Input.GetKey(KeyCode.RightArrow))
            {
                _token = true;
                
                float EndPositionX = transform.position.x;
                EndPositionX += 1.5f;

                // endValue = 도착지, duration = 얼마동안?(1초=1.0f)
                transform.DOMoveX(EndPositionX, 0.5f).OnComplete(ActionComplete).SetEase(Ease.Flash);

            // 위
            } else if (Input.GetKey(KeyCode.UpArrow))
            {
                _token = true;
                float EndPositionY = transform.position.y;
                EndPositionY += 1.5f;

                // endValue = 도착지, duration = 얼마동안?(1초=1.0f)
                transform.DOMoveY(EndPositionY, 0.5f).OnComplete(ActionComplete).SetEase(Ease.Flash); 

            // 아래
            } else if (Input.GetKey(KeyCode.DownArrow))
            {
                _token = true;
                float EndPositionY = transform.position.y;
                EndPositionY -= 1.5f;

                // endValue = 도착지, duration = 얼마동안?(1초=1.0f)
                transform.DOMoveY(EndPositionY, 0.5f).OnComplete(ActionComplete).SetEase(Ease.Flash); 


                
                /* 좌표를 통해 움직이는 기본적인 코드
                Vector3 CurrentPosition = transform.position;
                CurrentPosition.y -= 0.01f;

                transform.position = CurrentPosition;
                */
            }

            void ActionComplete()
            {
                // 토큰값 false
                _token = false;

            }
        }
    }
}
반응형