유니티로 게임개발하다가 부드럽게 목표지점까지 가는 방법을 구현해 봤어요. Cocos2dx를 사용할때는 그냥 MoveTo() 이 함수를 호출하면 그냥 끝났는데, 유니티로 구현할려니까 코딩해야되는 부분이 조금 더 많네요. 그래도 생각보다 간단하게 구현되니까 한번 테스트 해 보세요.


먼저 SmoothDamp 를 사용해서 구현해본 물체를 부드럽게 움직이는 동영상입니다.







위와 같이 물체를 움직이는 방법은 아래처럼 코딩해 주시면됩니다. 저는 Coin 이라고 C# 스크립트 파일을 만들어서 아래처럼 구현해 줬습니다. 그리고 움직이고 싶은 물체에 Coin 스크립트를 넣어주면 끝! 부드럽게 움직이는 핵심코드는 아래 파란색으로 마킹해 뒀습니다. 필요한 부분만 보세요^^


using UnityEngine;


public class Coin : MonoBehaviour

{

    private bool isActivate = false;

    public Vector3 target;

    public float smoothTime = 10.0f;

    private float yVelocity = 2.0f;

    private float xVelocity = 2.0f;


    private void FixedUpdate()

    {

        if(isActivate)

        {

            float newPositionX = Mathf.SmoothDamp(transform.position.x, target.x, ref xVelocity, smoothTime);

            float newPositionY = Mathf.SmoothDamp(transform.position.y, target.y, ref yVelocity, smoothTime);

            transform.position = new Vector3(newPositionX, newPositionY, transform.position.z);

        }

        

    }


    public void SetTarget(Vector3 location)

    {

        isActivate = true;

        target = location;

    }


    private void OnTriggerEnter2D(Collider2D collision)

    {

        if(collision.gameObject.CompareTag("Player"))

            Destroy(gameObject);

    }

}




여기서 잠깐? 마우스 클릭한 곳에 물체 생성은 어떻게 하나요?


코인생성 및 목표지점을 간단하게 구현해 봤습니다. 코인 생성은 마우스로 클릭한 지점에 코인을 생성하고 SetTarget(Vector3 location) 함수를 호출해서 목표지점을 설정해주면됩니다. 그러면 현재 코인이 생성된 위치로부터 목표지점으로 코인이 부드럽게 움직이는 것을 확인 하실 수 있을껍니다.


    void Update () {


        // 마우스크릭한 위치에 생성

        if (Input.GetMouseButtonDown(0))

            DoAction(Input.mousePosition);

    }


    void DoAction(Vector2 location)

    {

        // 화면좌표를 실제좌표로 변환

        Vector2 startPos = Camera.main.ScreenToWorldPoint(location);


        // 코인객체생성

        GameObject coin = Instantiate(fabCoin);

        coin.transform.position = startPos;


        // 코인목표지점 설정

        Vector3 pos = GameObject.Find("Player").transform.position;

        coin.GetComponent<Coin>().SetTarget(pos);

    }


자 이렇게 하면 물체를 현재지점에서 목표지점으로 부드럽게 움직일 수 있습니다.