Comment coder un contrôleur de personnage basé sur la physique dans Unity3D

Comment coder un contrôleur de personnage basé sur la physique dans Unity3D
Des lecteurs comme vous aident à soutenir MUO. Lorsque vous effectuez un achat en utilisant des liens sur notre site, nous pouvons gagner une commission d'affiliation. Lire la suite.

Un contrôleur de personnage peut vous aider à implémenter une physique de mouvement simple dans votre jeu.





Vous pouvez approcher les contrôleurs de personnages Unity3D sous plusieurs angles. Si vous utilisez une bibliothèque avec des classes et des fonctions puissantes, la création d'un contrôleur de personnage basé sur la physique peut être un endroit amusant pour commencer le développement de votre jeu.





Étape 1 : créer une scène avec des objets joueur et terrain

  unité personnage contrôleur 3d espace

Une fois Unity ouvert et que vous avez créé un nouveau projet, vous pouvez commencer par ajouter quelques objets à votre scène. Vous pouvez créer ces objets dans l'ordre de votre choix, mais veillez à utiliser les paramètres corrects. Bien que ce projet soit basique, c'est un excellent moyen de démarrer avec Unity .





Un objet plan 3D pour le terrain

Le premier objet à ajouter à votre scène est un avion. Cliquez avec le bouton droit dans le volet de la hiérarchie, survolez Objet 3D , et sélectionnez Avion de la liste. Vous pouvez ajuster la taille de l'avion pour fournir une zone de test plus grande, mais vous n'avez rien d'autre à faire.

comment créer un lien symbolique dans windows

Un modèle de joueur d'objet de cube

Ensuite, il est temps d'ajouter un cube à la scène pour servir de modèle de joueur. Cliquez avec le bouton droit dans le volet de la hiérarchie, survolez Objet 3D , et sélectionnez cube dans le menu déroulant. Positionnez le nouveau cube de sorte qu'il se trouve au-dessus du plan que vous avez également ajouté. Vous devez également ajouter un composant rigidbody pour transformer le cube en un objet physique.



Sélectionnez le cube et accédez à l'inspecteur. Cliquer sur Ajouter un composant en bas du volet, recherchez rigidbody et sélectionnez Corps rigide de la liste lorsqu'elle apparaît. Cochez la Utiliser la gravité cochez la case et laissez le reste des paramètres tels quels.

Tu peux trouver actifs Unity gratuits en ligne pour embellir votre projet.





Une caméra à la troisième personne

Votre scène doit déjà avoir une caméra que vous pouvez utiliser comme caméra à la troisième personne. Positionnez la caméra de manière à ce qu'elle se trouve dans une position confortable à la troisième personne au-dessus de votre cube. Accédez au volet de hiérarchie avant de faire glisser et de déposer la caméra sur le cube pour créer une relation parent-enfant. La caméra suivra automatiquement votre cube avec cela fait.

Un test rapide

Bien que votre scène n'ait pas encore de code, vous pouvez tester le travail que vous avez fait jusqu'à présent. Clique le Jouer bouton en haut de l'écran pour charger votre jeu. Vous devriez voir le cube tomber et atterrir au-dessus de l'avion, et la caméra devrait suivre le cube pendant qu'il tombe.





Étape 2 : configurer un fichier C#

Il est maintenant temps de créer un fichier C # afin que vous puissiez commencer à programmer des mouvements. Accédez à la section Projet, cliquez avec le bouton droit de la souris, survolez Créer et sélectionnez Dossier dans la liste. Nommez le dossier Scripts ou quelque chose de similaire.

Naviguez dans votre nouveau dossier et répétez le processus, mais sélectionnez Script C# dans la liste. Vous pouvez donner n'importe quel nom à ce fichier, mais ce sera aussi le nom de la fonction principale qu'il contient. Assurez-vous que votre nouveau C# ressemble à ceci.

 using System.Collections; 
using System.Collections.Generic;
using UnityEngine;

public class Character_Control: MonoBehaviour {
    void Start() {
    }

    void Update() {
    }
}

Étape 3 : Utilisez C# pour créer un mouvement vers l'avant et vers l'arrière avec vitesse

Avant d'ajouter des fonctions dans votre fichier de script, déclarez certaines variables publiques. Le premier est un Rigidbody pour stocker le modèle du joueur. Déclarez également un flotteur pour suivre la vitesse de déplacement. Ces variables vont dans la classe principale, en dehors de toute fonction.

 public Rigidbody rigidbody; 
public float speed;

Ensuite, il est temps d'ajouter une seule ligne de code à la fonction Start. Cela utilise une déclaration GetComponent pour affecter le composant rigidbody du cube à la variable rigidbody que vous avez créée.

 void Start() { 
    rigidbody = GetComponent < Rigidbody > ();
}

Vous pouvez maintenant ajouter du code qui fera bouger votre modèle de lecteur. Ce code est agréable et simple ; vous avez juste besoin de deux instructions if, une pour avancer et une pour reculer. Vous pouvez utiliser Input.GetKey pour déterminer quand une touche est enfoncée. Dans ce cas, vous recherchez des appuis sur les touches W et S.

Appuyer sur l'une de ces touches ajoute une force au cube rigidbody en utilisant rigidbody.AddForce. Vous pouvez calculer la direction et la vitesse de la force ajoutée en multipliant sa position sur l'axe Z (transform.forward) par la variable de vitesse. Il n'y a pas de classe transform.backward à utiliser pour le mouvement vers l'arrière, mais cela est réalisable en multipliant transform.forward par -1.

 if (Input.GetKey("w")) { 
    rigidbody.AddForce(transform.forward * speed);
}

if (Input.GetKey("s")) {
    rigidbody.AddForce((transform.forward * -1) * speed);
}

Enregistrez le fichier C # et revenez à Unity. Trouvez le script dans le volet Projet et faites-le glisser et déposez-le sur le cube de modèle de personnage à l'intérieur de la hiérarchie pour affecter le script à cet objet. Lorsque vous sélectionnez le cube, vous devriez voir le script en tant que composant dans le volet Inspecteur. Cliquez à l'intérieur de la boîte de variable rigidbody et sélectionnez le rigidbody de votre cube.

Vous pouvez maintenant utiliser le bouton Jouer pour lancer le jeu et tester votre code. Mais attendez! Il ya un problème; votre cube va rouler plutôt que d'avancer tout droit. Retournez à l'inspecteur du cube, trouvez le composant Rigidbody et cochez les cases pour geler la rotation sur les axes X et Z avant de relancer le jeu. Maintenant, cela devrait fonctionner.

Étape 4 : Utilisez C# pour créer un virage à gauche et à droite avec un couple

Contrairement au déplacement vers l'arrière et vers l'avant, la rotation de votre modèle de lecteur Cube nécessite une force appelée couple. Vous avez besoin d'une autre variable pour cela : un flotteur public pour attribuer une valeur de couple.

 public float torque;

Le code pour tourner à gauche et à droite dans ce script est également très similaire à celui utilisé pour avancer et reculer. Il y a un si déclaration pour chaque direction qui recherche les pressions sur la touche D (virage à droite) ou la touche A (virage à gauche).

La première étape de chaque instruction if consiste à déterminer la direction du virage à l'aide de la méthode Input.GetAxis et à affecter le résultat à une variable flottante. Ensuite, utilisez rigidbody.AddTorque pour appliquer une force de rotation au modèle de personnage Cube en multipliant le couple, la rotation et l'axe Z du cube.

 if (Input.GetKey("d")) { 
    float turn = Input.GetAxis("Horizontal");
    rigidbody.AddTorque(transform.up * torque * turn);
}

if (Input.GetKey("a")) {
    float turn = Input.GetAxis("Horizontal");
    rigidbody.AddTorque(transform.up * torque * turn);
}

Enregistrez votre code et retournez dans Unity pour le tester. Vous pouvez ajuster la vitesse et le temps d'accélération de la rotation de votre modèle de lecteur en sélectionnant le cube et en modifiant les variables de masse, de traînée et de couple du rigidbody dans votre script. Cet exemple de projet s'installe sur 1 masse, 1 traînée et 2 couples.

Étape 5 : Utilisez C# pour programmer le saut

En tant qu'élément final de ce contrôleur de personnage Unity, il est temps de créer votre saut. La création d'un saut est plus complexe que les autres contrôles de base sur lesquels vous avez travaillé, étant donné qu'un saut doit avoir une hauteur limitée. Commencez par ajouter une variable booléenne privée pour savoir si le joueur saute ou non.

 private bool isJumping = false;

Cette variable ne fera rien sans une instruction pour la tester. Dans ce cas, une instruction if de base pour vérifier si la variable est fausse fera l'affaire. L'ajout de la même condition aux autres déclarations de mouvement si empêchera le joueur de bouger pendant les sauts.

 if (!isJumping) { 
}

L'ajout de la même condition aux autres déclarations de mouvement si empêchera le joueur de bouger pendant les sauts.

 if (Input.GetKey("w") && !isJumping) { 
    rigidbody.AddForce(transform.forward * speed);
}

Dans l'instruction !isJumping if, vous avez besoin d'une autre instruction if, cette fois pour vérifier si vous avez appuyé sur le bouton de saut. Définir la variable isJumping sur true est la première chose à faire dans cette instruction if, suivie d'une déclaration rigidbody.angularVelocity pour supprimer les forces actuellement appliquées au cube.

Vous pouvez maintenant utiliser la déclaration rigidbody.AddForce pour ajouter de la force au cube sur son axe Z, créant ainsi le mouvement ascendant d'un saut. Enfin, il est temps d'utiliser une déclaration d'appel pour appeler une fonction différente après 0,8 seconde.

 if (!isJumping) { 
    if (Input.GetKeyDown("space")) {
        isJumping = true;
        rigidbody.AddForce(transform.up * speed * 120);
        rigidbody.angularVelocity = Vector3.zero;
        Invoke("Move_Setter", 0.8 f);
    }
}

Cette fonction remet la variable isJumping à false afin que le mouvement/saut soit à nouveau possible, et le délai de 0,8 seconde l'empêche de se déclencher trop tôt.

 void Move_Setter() { 
    isJumping = false;
}

Étape 6 : testez votre code de contrôleur de personnage

Enregistrez votre fichier et retournez dans Unity pour tester le code que vous avez écrit. Comme la plupart des compilateurs, Unity fournit des informations sur les erreurs et autres problèmes avec votre code pour vous permettre de voir plus facilement ce que vous pourriez avoir besoin de changer. Vous pouvez voir le code complet de ce projet sur notre GitHub page.

Création de contrôleurs de personnage Unity

Vous pouvez choisir parmi une variété d'approches différentes lors de la création d'un contrôleur de personnage dans Unity. L'utilisation de la physique est une option, mais vous pouvez également utiliser le système de contrôleur de personnage intégré si vous le souhaitez.

Explorer différentes options comme celle-ci est un excellent moyen d'en savoir plus sur des outils comme Unity.