Tutoriel du plug-in Unity Fingers Gesture Gesture (Nouveau)

avant-propos

Il y a quelques jours, le centre de ressources Unity était engagé dans des activités et a obtenu ce plugin gratuitement, mais après avoir lu les didacticiels en ligne, tous sont des versions relativement anciennes, j'ai donc décidé de les apprendre et de les enregistrer. Personnellement, je pense qu'il est plus pratique à utiliser que le toucher facile, et le toucher facile n'a pas été mis à jour depuis longtemps.

fonctionner

Exécutez la scène de démonstration intégrée au plugin DemoScene.
insérez la description de l'image ici
Maintenez la touche Maj ou Ctrl enfoncée pour simuler une opération à deux doigts. À ce stade, vous n'avez pas besoin de cliquer sur le côté gauche de la souris, il vous suffit de déplacer la souris. Si vous cliquez, c'est une opération à trois doigts.
Veuillez ajouter une description de l'image

Maj + molette de la souris vers le haut et vers le bas : simuler une rotation à deux doigts
ctrl + molette de la souris vers le haut et vers le bas : simuler un zoom à deux doigts
Veuillez ajouter une description de l'image

configurer

Ouvrez FingersScriptPrefab, les paramètres du panneau sont utilisés pour le contrôle global.
insérez la description de l'image ici
Paramètres (des spéciaux seront ajoutés plus tard) :
DPI par défaut : La sensibilité du déclenchement gestuel. Si la valeur est trop grande, le geste sera retardé pour se déclencher. La valeur par défaut peut être utilisée sauf en cas de besoin particulier.

Nous pouvons personnaliser ce que le doigt affiche en modifiant le toucher dans l'image ci-dessous.
insérez la description de l'image ici
insérez la description de l'image ici

utilisation de base

Déclarez d'abord le Reconnaissance de gestes.

        private TapGestureRecognizer tapGesture;

Initialisez le Recognizer et transmettez le rappel.

        private void CreateTapGesture()
        {
    
    
            tapGesture = new TapGestureRecognizer();
            tapGesture.StateUpdated += TapGestureCallback; //传入回调
            FingersScript.Instance.AddGesture(tapGesture); //对应的有Remove
        }

Déclenchez le comportement avec le rappel transmis.

        private void DoubleTapGestureCallback(DigitalRubyShared.GestureRecognizer gesture)
        {
    
    
            if (gesture.State == GestureRecognizerState.Ended)
            {
    
    
                Debug.Log("Tap");
            }
        }

API couramment utilisée (reportez-vous au code de cas)

Notez que les gestes sont globaux et n'ont pas besoin d'être sélectionnés. Si vous souhaitez spécifier une cible, vous devez lier la cible ou ajouter votre propre jugement logique.

StateUpdated : enregistrer l'événement de rappel pour les gestes
tripleTapGesture.StateUpdated += PlatformSpecificViewTapUpdated;

PlatformSpecificView : Spécifie la cible du clic
tripleTapGesture.PlatformSpecificView = bottomLabel.gameObject;

NumberOfTapsRequired : Le nombre de fois que le geste de toucher est connecté. Le simple clic, le double clic, etc. se distinguent tous par ce
tripleTapGesture.NumberOfTapsRequired = 3;

AddGesture : enregistre les gestes
FingersScript.Instance.AddGesture(tripleTapGesture);

GestureRecognizerState : détermine l'étape d'exécution actuelle dans le rappel de geste
if (gesture.State == GestureRecognizerState.Ended)

RequireGestureRecognizerToFail : ajoute ou supprime un geste qui doit échouer. Définissez sur null pour effacer tous les gestes qui doivent échouer. Par exemple, l'exemple suivant signifie que si le geste doubleTapGesture est déclenché, le déclencheur tapGesture échouera. En fait, il s'agit d'empêcher l'utilisation de conflits gestuels.
tapGesture.RequireGestureRecognizerToFail = doubleTapGesture;

geste.FocusX, geste.FocusY : les coordonnées écran du tap dans le rappel
DebugText("Double tapped at {0}, {1}", gesture.FocusX, gesture.FocusY);

Direction : Définissez la direction de glissement
swipeGesture.Direction = SwipeGestureRecognizerDirection.Down;

DirectionThreshold : pour la direction définie, il s'agit de la quantité de balayage dans cette direction qui doit être proportionnelle à l'autre. Par exemple, un geste de balayage vers le bas nécessite plusieurs fois plus de mouvement sur l'axe y que de déplacement le long de l'axe x. La valeur par défaut est 1,5, ce qui signifie que le geste de balayage vers le bas doit être 1,5 fois plus grand sur les axes y et x. Inférieur ou égal à 1 signifie que n'importe quel rapport est acceptable. En termes simples, plus la valeur est grande, plus elle doit s'adapter à la direction cible.
swipeGesture.DirectionThreshold = directionThreshold; // autoriser un balayage, quelle que soit la pente

geste.StartFocusX, geste.StartFocusY : où le geste commence
DebugText("Swiped from {0},{1} to {2},{3}; velocity: {4}, {5}", gesture.StartFocusX, gesture.StartFocusY, gesture.FocusX, gesture.FocusY, swipeGesture.VelocityX, swipeGesture.VelocityY);

swipeGesture.VelocityX, swipeGesture.VelocityY : vitesse de balayage (selon le focus)
DebugText("Swiped from {0},{1} to {2},{3}; velocity: {4}, {5}", gesture.StartFocusX, gesture.StartFocusY, gesture.FocusX, gesture.FocusY, swipeGesture.VelocityX, swipeGesture.VelocityY);

MinimumNumberOfTouchesToTrack : Définissez le nombre minimum de doigts utilisés, généralement 1 ou 2. Notez que tous les gestes ne prennent pas en charge plusieurs doigts
panGesture.MinimumNumberOfTouchesToTrack = 2;

MaximumNumberOfTouchesToTrack : Définissez le nombre maximum de doigts utilisés, la valeur par défaut est 1 ou 2
longPressGesture.MaximumNumberOfTouchesToTrack = 1;

geste.DeltaX, geste.DeltaY : la distance du déplacement du geste
DebugText("Panned, Location: {0}, {1}, Delta: {2}, {3}", gesture.FocusX, gesture.FocusY, gesture.DeltaX, gesture.DeltaY);

scaleGesture.ScaleMultiplier : valeur d'échelle pour la distance entre les doigts
DebugText("Scaled: {0}, Focus: {1}, {2}", scaleGesture.ScaleMultiplier, scaleGesture.FocusX, scaleGesture.FocusY);

rotateGesture.RotationRadiansDelta : le changement de rotation en radians
Earth.transform.Rotate(0.0f, 0.0f, rotateGesture.RotationRadiansDelta * Mathf.Rad2Deg);

AllowSimultaneousExecution : permet à plusieurs gestes d'actionner une cible en même temps
panGesture.AllowSimultaneousExecution(scaleGesture);
panGesture.AllowSimultaneousExecution(rotateGesture);
scaleGesture.AllowSimultaneousExecution(rotateGesture);

CaptureGestureHandler : Capturez la cible cliquée et gérez-la. Renvoyez false pour être pénétrable, true pour être impénétrable et null pour être la valeur par défaut.

		FingersScript.Instance.CaptureGestureHandler = CaptureGestureHandler;
        private static bool? CaptureGestureHandler(GameObject obj)
        {
    
    
            if (obj.name.StartsWith("PassThrough"))
            {
    
    
                return false;
            }
            else if (obj.name.StartsWith("NoPass"))
            {
    
    
                return true;
            }
            return null;
        }

ComponentTypesToDenyPassThrough (remarque importante) : Définit les types qui peuvent bloquer la détection des gestes en plus de la vue des gestes. Par exemple, pour empêcher la pénétration de l'interface utilisateur.
FingersScript.Instance.ComponentTypesToDenyPassThrough.Add(typeof(UnityEngine.UI.Image));

StartOrResetGesture : démarre ou réinitialise le geste. Les paramètres sont le geste, si la cible est affichée sur le devant (valable uniquement pour le sprite), la caméra, l'objet de jeu qui effectue le geste, le sprite affiché, le mode d'exécution du geste (qu'il soit effectué sur l'objet lié ou tout objet) et la caméra reçue.
FingersScript.StartOrResetGesture(r, BringToFront, Cameras, gameObject, spriteRenderer, GestureRecognizerComponentScriptBase.GestureObjectMode.RequireIntersectWithGameObject, out camera);

ClearTrackedTouchesOnEndOrFail : s'il faut effacer les touches suivies lorsque le geste se termine ou échoue, la valeur par défaut est false. Normalement défini sur faux
tapGesture.ClearTrackedTouchesOnEndOrFail = true;

AddMask : Ajouter une zone restreinte pour les gestes. Les paramètres sont collisionneur et geste. Cela ne prendra effet que si la cible est cliquée dans la plage de masque
FingersScript.Instance.AddMask(Mask1, tapGesture);

AllowSimultaneousExecutionWithAllGestures : Autoriser l'exécution avec tous les autres gestes
tapGesture2.AllowSimultaneousExecutionWithAllGestures();

FingersScript.HasInstance : Détecte s'il y a une instance de FingersScript dans la scène
if (FingersScript.HasInstance)

ShowTouches : affiche des clics simulés, ne le faites que lors du débogage, car cela interfère avec d'autres Canvas
FingersScript.Instance.ShowTouches = true;

Obtenez tous les objets qui peuvent recevoir des rayons à la position cliquée.

        private void TapGestureUpdated(DigitalRubyShared.GestureRecognizer gesture)
        {
    
    
            if (gesture.State == GestureRecognizerState.Ended)
            {
    
    
                Debug.Log("Tapped on " + gesture.PlatformSpecificView);

                List<UnityEngine.EventSystems.RaycastResult> results = new List<UnityEngine.EventSystems.RaycastResult>();
                UnityEngine.EventSystems.PointerEventData eventData = new UnityEngine.EventSystems.PointerEventData(UnityEngine.EventSystems.EventSystem.current);
                eventData.position = new Vector2(gesture.FocusX, gesture.FocusY);
                UnityEngine.EventSystems.EventSystem.current.RaycastAll(eventData, results);

                Debug.Log("Event system raycast count: " + results.Count + ", objects: " + string.Join(",", results.Select(r => r.gameObject.name).ToArray()));
            }
        }

Présentation des composants

Les paramètres sont relativement simples et peuvent être compris par une traduction littérale ou en visualisant le code.

À propos de la manette

insérez la description de l'image ici
Brève introduction des paramètres

DeadZone : Zone morte, inférieure à cette valeur ne déclenchera pas l'effet joystick. Sensibilité similaire

InputCurve : courbe de passage par valeur

EightAxisMode: mode octogonal, le joystick se transformera en huit directions de haut, bas, gauche, droite et diagonale, et la rotation du joystick a un sens d'intervalle

MaxRangeRadiusMultiplier : le décalage lorsque le cercle central du joystick est déplacé vers la limite
insérez la description de l'image ici

FollowSpeed ​​: La vitesse globale du joystick pour suivre le doigt, la valeur par défaut est 0

StartMode : MustStartInside (le joystick est immobile, actionnez le joystick) MoveToPanStart (selon le geste Pan comme point de départ du joystick) PanInsideOrPanMovesInside (le joystick est immobile, actionnez dans la zone du geste Pan)

RestrictJoystickPositionTo : nécessite Unity2019 ou supérieur. Contraindre la position du joystick à ce collider2D, null signifie pas de limite. Mettez le colider dans le joystick parent

ReturnToHomePosition : retour automatique à la position initiale après l'opération

Entrée de plate-forme croisée : arbre d'entrée

Rappels : rappel du joystick, réception de Vector2

Usage
Pass dans l'événement de rappel pour le joystick. Bien sûr, il peut également être lié sur le panneau.
Joystick.JoystickExecuted = JoystickExecuted;

Ajoutez un masque au joystick. (optionnel)
FingersScript.Instance.AddMask(Mask1, JoystickScript.PanGesture);

Divers composants de geste

Découvrez la scène DemoSceneComponents. Les fonctions du panneau sont similaires à celles décrites dans l'API précédente.

DoigtsPanOrbite

Scène : DemoScene3DOrbit
insérez la description de l'image ici
Effet : Il peut facilement réaliser la rotation, le mouvement et la mise à l'échelle de l'objet cible, et obtenir rapidement l'effet souhaité en ajustant les paramètres.Veuillez ajouter une description de l'image

FingersDragDropComponentScript

Appuyez longuement et faites glisser l'objet, 3D ou sprite, UI peut être, mais notez que seul le sprite a pour effet d'être affiché au premier plan, vous pouvez modifier la logique vous-même.

L'auteur a fait de nombreux cas, qui sont tous étendus en utilisant les fonctions de base de ce plug-in, donc je ne vais pas les décrire un par un ici. Vous pouvez les lire par vous-même pour approfondir votre compréhension.
D'autres points de connaissance continueront d'être ajoutés ultérieurement.

Remarque

Ayant un problème, FingersScript est en conflit avec UICanvas généré dans mon cadre de jeu, Canvas ne reçoit pas d'événements de clic.
Solution : Créez un UI->EventSystem dans la scène, ne le générez pas dynamiquement.

Je suppose que tu aimes

Origine blog.csdn.net/qq_39162826/article/details/121661290
conseillé
Classement