Créer un FPS #3 – Tirer sur un ennemi – Tuto Unity FR

Dans cette partie, nous allons voir comment tirer sur les ennemis dans un FPS. L’essentiel du système de tir a été créé dans la partie 2 du tutoriel Créer un FPS sur Unity. On va créer un script qui nous permettra de gérer les dommages reçus.

Pré-requis

Importer un ennemi gratuit depuis l’asset store: Zombie

Ce zombie est assez bien fait, le seul défaut que l’on pourrait lui trouver, c’est qu’il n’y a pas réellement d’animation lorsqu’il prend des dégâts. Nous allons donc utiliser une animation où il chute au sol. Et lorsqu’il sera vaincu, nous lancerons une animation de chute différente. Pour un asset gratuit, c’est quand même très bien !

Vous devez aussi importer le FPS controller créé dans la partie 1 (mouvements de base),et la partie 2 (système de tir).

Le zombie

Glisser le prefab du zombie sur la scène.

Sélectionnez-le, puis clique droit de la souris > Unpack Prefab.

Cela permettra d’arranger les composants du zombie, sans toucher au prefab d’origine.

  • Scale: x,y et z = 2

Ajoutez un RigidBody.

  • Is Kinematic doit être coché

Ajouter un Capsule Collider

  • Center=1
  • Hieght=2

Modifiez le Layer > Interaction. (Créez -le s’il n’existe pas)

Important

Pour que tout fonctionne : dans Player > Main Camera > Gun > ShootAction : Layer, choisissez Interaction.

Recevoir des dommages

Il faut maintenant créer un script qui soit capable de gérer les dommages subis lorsque le joueur tire sur le zombie.

Ajoutez-le script ci-dessous au zombie :

ReceiveDamage.cs

</pre>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ReceiveDamage : MonoBehaviour
{

//Maximum de points de vie
public int maxHitPoint = 5;

//Points de vie actuels
public int hitPoint = 0;

//Après avoir reçu un dégât :
//La créature est invulnérable quelques instants
public bool isInvulnerable;

//Temps d'invulnérabilité
public float invulnerabiltyTime;

//Temps depuis le dernier dégât
private float timeSinceLastHit = 0.0f;

private void Start()
{
//Au début : Points de vie actuels = Maximum de points de vie
hitPoint = maxHitPoint;

isInvulnerable = false;
}

private void Update()
{
//Si invulnérable
if (isInvulnerable)
{
//Compte le temps depuis le dernier dégât
//timeSinceLastHit = temps depuis le dernier dégât
//Time.deltaTime = temps écoulé depuis la dernière frame
timeSinceLastHit += Time.deltaTime;

if (timeSinceLastHit > invulnerabiltyTime)
{
//Le temps est écoulé, il n'est plus invulnérable
timeSinceLastHit = 0.0f;
isInvulnerable = false;

}
}
}

//Permet de recevoir des dommages
public void GetDamage(int damage)
{
if (isInvulnerable)
return;

isInvulnerable = true;

//Applique les dommages aux points de vies actuels
hitPoint -= damage;

//S'il reste des points de vie
if (hitPoint > 0)
{
//SendMessage appellera toutes les méthodes "TakeDamage" de ce GameObject
//Exemple : "TakeDamage" est dans MonsterController
gameObject.SendMessage("TakeDamage", SendMessageOptions.DontRequireReceiver);
}
//Sinon
else
{
//SendMessage appellera toutes les méthodes "Defeated" de ce GameObject
//Exemple : "Defeated" est dans MonsterController
gameObject.SendMessage("Defeated", SendMessageOptions.DontRequireReceiver);
}
}
}
<pre>

Important : désactivez le composant Animator du Zombie

Mettre à jour Shoot Action

Pour que tout fonctionne bien, le script ShootAction doit être très légèrement modifié. Repérez le bout de code suivant, il se trouve dans Update().

...

SUPPRIMER A PARTIR D'ICI
                    //S'assure que la cible touchée a un composant ReceiveAction
                    if (hit.collider.gameObject.GetComponent<ReceiveAction>() != null)
                    {
                        //Envoie les dommages à la cible
                        hit.collider.gameObject.GetComponent<ReceiveAction>().GetDamage(gunDamage);
                    }
JUSQU'ICI

AJOUTER CECI
                    //S'assure que la cible touchée a un composant ReceiveDamage
                    if (hit.collider.gameObject.GetComponent<ReceiveDamage>() != null)
                    {
                        //Envoie les dommages à la cible
                        hit.collider.gameObject.GetComponent<ReceiveDamage>().GetDamage(gunDamage);
                    }
JUSQU'ICI
...

Quand vous tirez sur l’ennemi, vous verrez que les points de vie diminuent !

Attention les cibles ne fonctionnent plus pour l’instant !

Recevez les dernières actus

Nous ne spammons pas ! Consultez notre politique de confidentialité pour plus d’informations.

5 réflexions sur “Créer un FPS #3 – Tirer sur un ennemi – Tuto Unity FR”

      1. il y en a 3:

        [Package Manager Window] Cannot perform upm operation: Unable to perform online search:
        Cannot fetch authorization code. User access token is expired or invalid. You may need to sign out and sign in again. [Unknown].
        UnityEditor.EditorApplication:Internal_CallUpdateFunctions ()

        [Package Manager Window] Error searching for packages.
        UnityEditor.EditorApplication:Internal_CallUpdateFunctions ()

        [Package Manager Window] Error while getting auth code: System.InvalidOperationException: Failed to call Unity ID to get auth code.
        UnityEditor.AsyncHTTPClient:Done (UnityEditor.AsyncHTTPClient/State,int)

  1. Bonjour voici mes erreur pour ma part …

    Assets\ShootAction.cs(5,14): error CS0101: The namespace  » already contains a definition for ‘ShootAction’
    Assets\ShootAction.cs(30,10): error CS0111: Type ‘ShootAction’ already defines a member called ‘Start’ with the same parameter types

    Assets\ShootAction.cs(39,10): error CS0111: Type ‘ShootAction’ already defines a member called ‘Update’ with the same parameter types

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut