1.10 Apprentissage du développement de jeux Unity à partir de 0 - réception des entrées de l'utilisateur

Au chapitre 1.8, nous avons présenté en détail un concept relativement important de développement de la logique de jeu dans Unity, qui est le composant (MonoBehaviour) Tant que votre logique doit être associée à un GameObject, vous commencez essentiellement à écrire la logique à partir du composant.

Avec cette prémisse en place, passons en revue les premiers morceaux de logique de jeu :

  1. Recevoir l'entrée de l'utilisateur
  2. logique de traitement
  3. écran de rendu

Ainsi, dans cet article, nous expliquerons comment effectuer la première étape, qui est la logique de réception des entrées de l'utilisateur.

entrée native

Si votre travail est le développement natif sur Windows, vous êtes plus familier avec le traitement des entrées utilisateur sur Windows. En fait, il traite les messages Windows. Le document officiel de MSDN est ici Utilisation des messages et des files d'attente de messages - Applications Win32 | Microsoft Learn Ce qui suit des exemples de code montrent comment effectuer les tâches suivantes associées aux messages Windows et aux files d'attente de messages .

Si vous retirez les points clés à l'intérieur, c'est

while (PeekMessage(&msg, hwnd,  0, 0, PM_REMOVE)) 
{ 
    switch(msg.message) 
    { 
        case WM_LBUTTONDOWN: 
            // 处理鼠标左键按下
            break;
        case WM_RBUTTONDOWN: 
            // 处理鼠标右键按下
            break;
        case WM_KEYDOWN: 
            // 处理键盘按键按下
            break;
    } 
} 

On peut voir qu'il s'agit d'une boucle, puis à chaque fois qu'un message est extrait de la file d'attente de messages pour obtenir l'état d'entrée utilisateur actuel.

D'autres frameworks ou systèmes peuvent également l'encapsuler dans une fonction de rappel d'événement, mais le traitement est toujours similaire.

Entrée utilisateur Unity

Étant donné que Unity doit être multiplateforme, le chapitre précédent a également indiqué que tant que vous avez installé le package de support pour la plate-forme correspondante, Unity espère que vous pourrez directement compiler et exécuter sur la plate-forme correspondante sans modifier votre code logique ordinaire.

Il vous est donc définitivement impossible de l'écrire avec du code natif, puis de l'intégrer. C'est trop gênant, donc Unity encapsule une telle bibliothèque d'entrée utilisateur appelée Input. La documentation officielle est ici :

Unity - API de script : entrée https://docs.unity3d.com/ScriptReference/Input.html

La documentation officielle donne également un exemple simple :

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    public void Update()
    {
        if (Input.GetButtonDown("Fire1"))
        {
            Debug.Log(Input.mousePosition);
        }
    }
}

Est-ce que cela ressemble beaucoup, et c'est aussi une boucle (la fonction Update est appelée une fois à chaque image, ce qui peut être compris comme une boucle sous une forme ou une autre) pour traiter les messages sans arrêt (la classe Input vous permettra de savoir s'il y a contenu d'entrée dans le message en cours).

Cela semble assez simple, mais attendez, pourquoi Fire1 est-il le paramètre de ce GetButtonDown ? Cela ne devrait-il pas être quelque chose comme le bouton gauche de la souris ?

Il y en a quelques-uns, et regardez cette fonction :

Unity - API de script : Input.GetMouseButtonDown https://docs.unity3d.com/ScriptReference/Input.GetMouseButtonDown.html

using UnityEngine;
using System.Collections;

// Detects clicks from the mouse and prints a message
// depending on the click detected.

public class ExampleClass : MonoBehaviour
{
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
            Debug.Log("Pressed primary button.");

        if (Input.GetMouseButtonDown(1))
            Debug.Log("Pressed secondary button.");

        if (Input.GetMouseButtonDown(2))
            Debug.Log("Pressed middle click.");
    }
}

Vous pouvez voir que 0, 1 et 2 correspondent aux trois boutons principaux de la souris.

Revenons à ce qui précède, pourquoi Unity fournit-il un nom de bouton étrange comme Fire1 ?

La raison est toujours similaire au multiplateforme. Si votre jeu n'est sorti que sur PC et ne prend en charge que les opérations du clavier et de la souris, il s'agit en effet de la réponse la plus directe aux événements du clavier et de la souris, mais les jeux peuvent souvent être joués avec des contrôleurs. . ! Ensuite, il n'y a pas de bouton tel que le bouton gauche de la souris sur la poignée, ce sont tous des triangles carrés ABXY ou XO, de tels boutons.

Bien sûr, vous pouvez aussi dire que ça va si je me connecte simplement à l'interface de la plateforme correspondante ? C'est vrai, mais dans ce cas, le code ci-dessus doit-il être écrit pour chaque plate-forme.

Par exemple, les quatre touches de wasd servent à déplacer des caractères sur le clavier, mais le joystick est utilisé sur la poignée, et les interfaces et noms utilisés peuvent être différents.

Par conséquent, afin de vous faciliter l'écriture d'un ensemble de codes logiques pour prendre en charge diverses adaptations de périphériques d'entrée, Unity a créé un tel package.Ce que vous devez faire est de traduire les noms des boutons de périphériques d'entrée spécifiques en noms logiques correspondants, tels que lorsque vous appuyez sur le bouton gauche de la souris La clé est de tirer, vous pouvez alors mapper le feu (Fire1) sur l'entrée du périphérique physique via la configuration, en particulier dans le menu supérieur de Unity, recherchez Edition-> Paramètres du projet, vous pouvez voir qu'il y a un InputManager ici :

Vous pouvez voir qu'il y a un Fire1 dans la liste Axes sur le côté droit, et ici nous pouvons configurer son mappage de bouton correspondant, ce qui est en fait assez difficile à comprendre à première vue.

Tout d'abord, Unity comprend tous les boutons comme un bouton qui peut être enfoncé vers l'avant ou vers l'arrière, ce qui est similaire au joystick sur la poignée. Si le joystick est déplacé vers la gauche, il est négatif et le mouvement vers la droite est positif, correspondant au bouton négatif mentionné ci-dessus et au bouton positif.

Alt signifie Alternative, ce qui signifie alternative, vous pouvez voir l'entrée de Fire1, le premier choix pour l'entrée positive est Ctrl gauche, et l'alternative est le bouton 0 de la souris.

Et je veux aussi faire des réclamations à ce sujet. Il y a en fait des zones de saisie ici, pas une liste déroulante qui peut être recherchée. Il est facile de faire des erreurs si vous l'écrivez avec désinvolture. Pour plus de détails, vous pouvez vous référer au Mapping virtuel section des axes aux contrôles du document officiel :

Unity - Manuel : Gestionnaire d'entrée https://docs.unity3d.com/Manual/class-InputManager.html

Les responsables d'Unity peuvent également se rendre compte que cette conception est relativement frustrante, ils fournissent donc une nouvelle génération de système de gestion des entrées :

Système d'entrée | Système d'entrée | 1.5.1 https://docs.unity3d.com/Packages/[email protected]/manual/index.html

Il suffit de regarder cette capture d'écran pour trop comprendre

Mais l'inconvénient est que ce package n'est pas inclus avec Unity, il doit être installé manuellement, et le code est également différent.Afin de réduire la complexité du tutoriel, nous ne le montrerons pas, et nous utiliserons toujours la version intégrée de Unity -in Input pour expliquer le traitement des entrées plus tard.

Chapitre suivant

Eh bien, maintenant que nous avons compris comment gérer les opérations de saisie, nous pouvons essayer une petite astuce et déplacer la seule caméra de la scène. Après tout, nous avons appris depuis si longtemps, l'écran de jeu est toujours inchangé, au moins nous devons modifier l'angle de vue Bar.

Pour ce faire, nous devons créer un nouveau composant et manipuler les propriétés du composant Transform de l'objet de jeu dans la scène. Cela implique de savoir comment faire référence à un autre objet à partir d'un objet. Puisqu'il y a beaucoup de contenu, il sera discuté séparément dans le chapitre suivant.

おすすめ

転載: blog.csdn.net/z175269158/article/details/129832370