본문 바로가기

Unity3D/C#

Unity Cursor Tail (Instantiate, Destroy Delay)

반응형

 

 

윈도우10 커서를 바꿔봤다면 알겠지만 마우스 커서를 움직임에 따라 커서 여러 개가 복사되어 따라가는 느낌이 나게 할 수 있습니다. 이렇게 할 경우 정신없긴 하지만 좀 더 역동적이고 커서의 위치를 더 잘 파악할 수 있습니다. 자신의 개성을 표현하고 싶은 분들이 많이 사용해봤을 것입니다. 유니티에서 Cursor Taild을 구현하려면 오브젝트 풀링 방식으로 계속 오브젝트를 돌려쓰는 방식이 가장 효율적이기는 하지만, 최적화 생각하지 않고 단순히 기능만 구현한다고 했을 때 유니티의 기본 함수인 Instantiate와 Destroy로 쉽게 구현할 수 있습니다. 현재 마우스 위치에 꼬리로 표시할 Prefab을 생성하고 적절한 시간 뒤에 파괴만 시켜주면 됩니다. Destroy 함수는 기본적으로 파괴할 Object를 매개 변수를 사용합니다. Destroy 함수에 Object 매개변수 뒤에 추가로 매개변수를 입력할 수 있는데 시간을 입력합니다. 이 시간으로 오브젝트를 바로 파괴하지 않고 몇 초 후에 파괴할지를 결정할 수 있습니다. 이 지연시간으로 마우스 커서의 꼬리의 길이가 결정됩니다. 이번 예시는 1초로 설정했지만 꼬리를 더 짧게 하고 싶으면 1초 아래로, 꼬리를 더 길게 하고 싶으면 1초 위로 설정하면 됩니다.

 

 

C# (UNITY 3D)

 

 

Cursor Tail 예시

 

마우스 커서의 움직임에 따라 펭수 2D 이미지가 생성되고 1초 이후에 자동 파괴되어 2D 이미지가 커서 뒤로 꼬리처럼 따라가는 예시입니다.

 

 

 

using UnityEngine.UI;

 

현재 생성된 프리팹의 개수 표시

 

 

할당

Cursor Tail로 사용할 프리팹 및 각 컴포넌트에 맞는 게임 오브젝트를 스크립트에 할당합니다.

 

 

 

    public GameObject pref; 
    public Transform parent;  
    public Text text_count;
    private float time_dealy = 1;
     
    private void Update()
    {
        Function_Instantiate();
        Get_Count();
    }

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

    private void Function_Instantiate()
    {
        Vector2 mousePos = Input.mousePosition;
        GameObject inst = Instantiate(pref, parent);
        inst.transform.position = mousePos;
        Destroy(inst, time_dealy); 
    } 
    private void Get_Count()
    {
        int count = parent.childCount;
        text_count.text = count.ToString();
        Debug.LogFormat("Count : {0}", count);
    }

 

변수(variable)

pref(GameObject) : 커서 뒤에 꼬리로 표시할 프리팹
parent(Transform) : 생성된 프리팹을 담아둘 부모 오브젝트
text_count(Text) : 현재 생성된 프리팹의 개수 표시

time_dealy(float) : 커서 꼬리의 유지 시간

 

함수(function)

Function_Instantiate : 마우스의 위치값을 받아서 time_delay 이후에 파괴되는 게임 오브젝트 생성
Get_Count : 현재 생성된 프리팹의 개수 받아와서 표시

 

 

 

Cursor Copy / Invoke Destroy / Cursor Effect / 커서 효과 

 

 

 

반응형