Nhận diện cử chỉ (Swipe, Pinch, Tap)

Nền tảng:
Mobile
Tags:
Input
Utility
Gesture

C# Code

using UnityEngine;
using UnityEngine.Events;

public class SwipeInput : MonoBehaviour
{
    public UnityEvent OnSwipeLeft, OnSwipeRight, OnSwipeUp, OnSwipeDown;
    public UnityEvent<float> OnPinch; // Gửi đi giá trị delta
    public UnityEvent OnTap;

    private Vector2 touchStartPos;
    private Vector2 touchEndPos;
    private float minSwipeDistance = 50f;

    void Update()
    {
        // Xử lý Tap & Swipe
        if (Input.touchCount == 1)
        {
            Touch touch = Input.GetTouch(0);
            if (touch.phase == TouchPhase.Began) {
                touchStartPos = touch.position;
            }
            else if (touch.phase == TouchPhase.Ended) {
                touchEndPos = touch.position;
                float distance = Vector2.Distance(touchStartPos, touchEndPos);

                if (distance < minSwipeDistance) {
                    OnTap?.Invoke();
                } else {
                    HandleSwipe();
                }
            }
        }

        // Xử lý Pinch to Zoom
        if (Input.touchCount == 2)
        {
            Touch touchZero = Input.GetTouch(0);
            Touch touchOne = Input.GetTouch(1);

            Vector2 touchZeroPrevPos = touchZero.position - touchZero.deltaPosition;
            Vector2 touchOnePrevPos = touchOne.position - touchOne.deltaPosition;

            float prevMagnitude = (touchZeroPrevPos - touchOnePrevPos).magnitude;
            float currentMagnitude = (touchZero.position - touchOne.position).magnitude;

            float difference = currentMagnitude - prevMagnitude;
            OnPinch?.Invoke(difference);
        }
    }

    void HandleSwipe()
    {
        float swipeX = touchEndPos.x - touchStartPos.x;
        float swipeY = touchEndPos.y - touchStartPos.y;

        if (Mathf.Abs(swipeX) > Mathf.Abs(swipeY)) // Swipe ngang
        {
            if (swipeX > 0) OnSwipeRight?.Invoke();
            else OnSwipeLeft?.Invoke();
        }
        else // Swipe dọc
        {
            if (swipeY > 0) OnSwipeUp?.Invoke();
            else OnSwipeDown?.Invoke();
        }
    }
}

Một hệ thống để nhận diện các cử chỉ phổ biến trên màn hình cảm ứng như vuốt (swipe), chụm/zoom (pinch), và chạm (tap).

Bình luận (0)

Bạn cần đăng nhập để có thể bình luận.

Chưa có bình luận nào. Hãy là người đầu tiên!

Bài viết liên quan

Cung cấp chức năng cho người chơi chụp lại khoảnh khắc trong game và lưu thành tệp PNG vào một thư mục được chỉ định.

Utility
Input
Mobile
Saving

Cho phép người chơi di chuyển nhân vật đến một vị trí trên mặt đất bằng cách chạm vào điểm đó trên màn hình. Sử dụng Raycast để xác định vị trí trong không gian 3D.

Mobile
3D
Movement
Player
Input

Sử dụng Input System mới của Unity để di chuyển nhân vật 2D hoặc 3D một cách hiệu quả và linh hoạt.

2D
3D
Input
Gameplay
Player

Sử dụng cảm biến con quay hồi chuyển (gyroscope) của điện thoại để điều khiển sự xoay của một đối tượng. Hữu ích cho các game đua xe hoặc trải nghiệm VR/AR đơn giản.

Mobile
Input
Movement
Rotation
Sensor

Hiển thị một khung thông tin (tooltip) khi người dùng di chuột qua một đối tượng UI. Gồm 3 scripts: TooltipTrigger để kích hoạt, Tooltip để hiển thị, và TooltipManager (Singleton) để quản lý.

UI
Tooltip
Input

Tạo một joystick ảo có thể di chuyển bằng cách kéo thả trên màn hình cảm ứng. Yêu cầu 2 đối tượng Image UI cho background và handle của joystick.

Mobile
UI
Input
Player
Movement

Một hệ thống UI cho phép người chơi kéo thả vật phẩm giữa các ô trong kho đồ. Yêu cầu một CanvasGroup trên prefab của item để xử lý raycast.

UI
Inventory
Drag and Drop
Input

Một hàm đơn giản để kiểm tra xem thiết bị có đang kết nối với mạng hay không, sử dụng Application.internetReachability.

Mobile
Utility
Network

Sử dụng Application.OpenURL để mở một trang web bên ngoài, thường dùng cho các nút 'Rate Us', 'Privacy Policy' hoặc 'More Games'.

Mobile
Utility
UI

Làm cho một đối tượng 2D luôn xoay và hướng về vị trí của con trỏ chuột, hữu ích cho các game top-down.

2D
Movement
Rotation
Input
Player