본문 바로가기

Unity3D/C#

유니티 마우스 클릭 시 그 위치로 2D 오브젝트 이동시키기

반응형

2D 오브젝트 이동

 

 

게임에서 캐릭터를 조작하는 방법은 크게 2가지 방법으로 볼 수 있습니다. 한 가지는 키보드를 사용하는 방법이고 다른 한 가지는 마우스로 맵을 클릭해서 캐릭터를 이동시키는 방법입니다. 이번 예시에서는 마우스를 클릭해서 이동하는 방법을 2D 공간에서 사용합니다. 이 방법은 유명한 게임 중 스타크래프트, 리그오브레전드와 같은 게임을 예로 들 수 있겠습니다. 스킬이나 단축키를 사용할 때는 물론 키보드를 사용하지만 메인 캐릭터 이동은 마우스로 조작합니다. 방식은 단순합니다. 마우스 클릭 입력 값을 받고, 그때 이동시킬 타깃 위치를 설정해 줍니다. 타깃이 정해지면 움직이고 싶은 캐릭터를 그 타깃으로 서서히 움직이게 하면 됩니다. 서서히 움직이게 하는 함수는 Vector3.Lerp를 사용하면 되고 매개변수로 움직일 오브젝트의 위치, 타깃 오브젝트의 위치, 움직일 비율 이렇게 3가지를 넣어주면 됩니다. 이 이동 함수는 이동시킬 타이밍에 맞춰서 Update나 for 문, while 문, 등 반복문에 넣어주면 됩니다.

 

 

C# (UNITY 3D)

 

 

이동 예시

 

왼쪽 마우스를 눌렀다가 땠을 때(GetMouseButtonUp) 타깃이 지정되고 타깃을 따라서 2D 오브젝트가 이동하는 예시입니다. 클릭했을 때의 좌표를 표시합니다.

 

 

 

using UnityEngine.UI;

 

클릭했을 때의 마우스 표시용 Text를 사용하기 위해 UnityEngine.UI 사용합니다.

 

 

할당

각 오브젝트를 스크립트에 할당합니다.

 

 

 

     
    public RectTransform transform_icon;
    public RectTransform transform_target;
    public Text text_mouse;
     
    private void Update()
    {
        Get_MouseInput();
        Update_Moving();
    }

    //CodeFinder 코드파인더
    //From https://codefinder.janndk.com/ 

    private void Get_MouseInput()
    {
        if(Input.GetMouseButtonUp(0))
        {
            Vector2 mousePos = Input.mousePosition;
            transform_target.position = mousePos;

            string message = mousePos.ToString();
            text_mouse.text = message;
            Debug.Log(message);
        }
    }

    private void Update_Moving()
    {
        transform_icon.position = Vector3.Lerp(transform_icon.position, transform_target.position, 0.02f);
    }

 

변수(variable)

transform_icon : 클릭 시 타깃 방향으로 이동시킬 2D 오브젝트
transform_target : 클릭 시 클릭한 위치로 바로 이동하며 transform_icon은 이 오브젝트를 따라다님
text_mouse : 클릭했을 때의 mouse의 좌표 반환

 

함수(function)

Get_MouseInput : 왼쪽 마우스를 눌렀다가 땠을 때 감지, 그때의 마우스 좌표 표시, 타깃 위치 재조정
Update_Moving : 2D 이미지 타깃 방향으로 이동

 

 

 

AOS, 원하는 위치로 이동, 마우스 조작

 

 

 

반응형