Unity/구현

[Unity] 터치와 드래그 입력을 구별하는 코드

QuickClid 2025. 2. 4. 20:25

서론

요새 모바일 게임에 관심이 좀 생겼는데, 그러다가 모바일 게임들은 "입력"을 받는 방식이 상당히 한정되어 있다는 사실을 깨달았다. 그래서 터치와 드래그를 구별하는 코드를 한 번 짜봤다. 

 

코드

using UnityEngine;

public class Node : MonoBehaviour
{
    private SpriteRenderer sr;

    [SerializeField] private bool isSelected;
    [SerializeField] private Vector2 startPos;

    private void Awake()
    {
        sr = GetComponent<SpriteRenderer>();

        isSelected = false;
    }

    private void OnMouseDown()
    {
        startPos = (Vector2)Camera.main.ScreenToWorldPoint(Input.mousePosition);
    }

    private void OnMouseUp()
    {
        if ((Vector2)Camera.main.ScreenToWorldPoint(Input.mousePosition) == startPos)
        {
            isSelected = !isSelected;
            if (isSelected)
            {
                sr.color = new Color(1, 1, 1, 1f);
            }
            else
            {
                sr.color = new Color(0, 0, 0, 0.25f);
            }
        }
    }

    private void OnMouseDrag()
    {
        if (isSelected)
        {
            Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            transform.position = new Vector3(mousePosition.x, mousePosition.y, 0);
        }
        else
        {
            return;
        }
    }
}