본문 바로가기

Unity3D/C#

Unity Mouse Cursor를 천천히따라다니는 2D 오브젝트

반응형

커서 이동

 

 

마우스 커서를 커스터마이징하는 방법은 다양합니다. 가장 많이 사용하는 방법은 실제 마우스 커서의 위치에 자신이 원하는 2D 이미지를 두는 것입니다. 이렇게 할 경우 실제 위치나 기능은 동일하고 커서의 디자인만 바뀐 것이기 때문에 가장 무난한 방법입니다. 하지만 사람들은 종종 다른 변화를 주고 싶어 합니다. 예를 들어 커서가 움직임에 따라서 2D 게임 오브젝트가 천천히 따라가는 커스터마이징 방법입니다. 이 방법을 사용하면 단순히 커서를 강조하는 효과로 사용하거나 커서의 꼬리처럼 보이게 하는 효과를 줄 수 있습니다. 그뿐만 아니라 마우스로 돌진하는 적들을 피하는 게임을 쉽게 만들 수도 있습니다. 이미지가 천천히 따라오는 효과를 주기 위해 Vector3 struct의 Lerp 함수를 사용합니다. Lerp 함수는 시작점과 끝점 사이를 비율만큼 이동할 수 있는데, 이 계산을 통해서 스르륵 이동하는 듯한 느낌을 줄 수 있습니다. 이번 예시에서 여러 2D 오브젝트를 각자 다른 속도로 따라오게 하기 위해 Lerp의 마지막 매개변수인 비율을 일정 비율로 각자 다르게 설정합니다.

 

 

C# (UNITY 3D)

 

 

커서 이동 예시

 

2D 이미지 오브젝트를 배열에 넣어두고 각자 다른 속도로 커서 방향으로 이동하는 예시입니다. 예시에서는 Vector3.Lerp의 마지막 매개 변수를 일정한 비율로 맞추어서 이동시켰습니다. 만약 속도, 즉 이동 비율을 변경시키고 싶으면 Vector3.Lerp의 마지막 매개 변수를 변경하면 됩니다.

 

 

 

 

using UnityEngine.UI;

 

마우스의 위치를 표시할 텍스트를 사용하기 위해 UnityEngine.UI를 사용합니다.

 

 

할당

이동시킬 2D 이미지 오브젝트를 만들고 배열에 할당해 주고 다른 게임 오브젝트들도 할당합니다.

 

 

 

 

    public RectTransform transform_cursor;
    public RectTransform[] transform_icons;
    public Text text_mouse;

    private void Start()
    {
        Init_Cursor();
    }
    private void Update()
    {
        Update_MouseMoving();
    }

    private void Init_Cursor()
    {
        Cursor.visible = false;
        transform_cursor.pivot = Vector2.up;

        if (transform_cursor.GetComponent<Graphic>())
            transform_cursor.GetComponent<Graphic>().raycastTarget = false;


        for (int i = 0; i < transform_icons.Length; i++)
        {
            if (transform_icons[i].GetComponent<Graphic>())
                transform_icons[i].GetComponent<Graphic>().raycastTarget = false;
        }


    }

    //CodeFinder 코드파인더
    //From https://codefinder.janndk.com/ 
    private void Update_MouseMoving()
    {
        Vector2 mousePos = Input.mousePosition;
        transform_cursor.position = mousePos;
        Vector3 pivot = new Vector3(1, 1, 0) * 100;
        for (int i = 0; i < transform_icons.Length; i++)
        {
            transform_icons[i].position = Vector3.Lerp(transform_icons[i].position, transform_cursor.position + pivot, Mathf.Pow(1.5f, i) * 0.005f);
        }

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

 

변수(variable)

transform_cursor(RectTransform) : 가운데 마우스 커서
transform_icons(RectTransform[]) : 천천히 마우스 커서 위치로 이동시킬 오브젝트 배열
text_mouse(Text) : 현재 마우스의 위치 표시

 

함수(function)

Init_Cursor : 커서에 대한 초기 설정
Update_MouseMoving : 마우스 움직임을 입력 받고 스르륵 따라오게 할 게임 오브젝트 배열 위치 이동

 

 

 

Mouse Cursor Moving / Tail Effect / 게임 오브젝트 천천히 이동시키기 / 커서 따라다니게 하기 / 일정 간격

 

 

 

반응형