Ressources

Catégorie scripts.

Le panda anti Adblock

enemyAi.cs

Script de l'intelligence artificielle d'un ennemi
Copier
								
									  
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class enemyAi : MonoBehaviour {
 
    //Distance entre le joueur et l'ennemi
    private float Distance;
 
    // Cible de l'ennemi
    public Transform Target;
 
    //Distance de poursuite
    public float chaseRange = 10;
 
    // Portée des attaques
    public float attackRange = 2.2f;
 
    // Cooldown des attaques
    public float attackRepeatTime = 1;
    private float attackTime;
 
    // Montant des dégâts infligés
    public float TheDammage;
 
    // Agent de navigation
    private UnityEngine.AI.NavMeshAgent agent;
 
    // Animations de l'ennemi
    private Animation animations;
 
    // Vie de l'ennemi
    public float enemyHealth;
    private bool isDead = false;
 
    void Start () {
        agent = gameObject.GetComponent< UnityEngine.AI.NavMeshAgent>();
        animations = gameObject.GetComponent< Animation>();
        attackTime = Time.time;
    }
 
 
 
    void Update () {
 
        if (!isDead)
        {
 
            // On cherche le joueur en permanence
            Target = GameObject.Find("Player").transform;
 
            // On calcule la distance entre le joueur et l'ennemi, en fonction de cette distance on effectue diverses actions
            Distance = Vector3.Distance(Target.position, transform.position);
 
            // Quand l'ennemi est loin = idle
            if (Distance > chaseRange)
            {
                idle();
            }
 
            // Quand l'ennemi est proche mais pas assez pour attaquer
            if (Distance < chaseRange && Distance > attackRange)
            {
                chase();
            }
 
            // Quand l'ennemi est assez proche pour attaquer
            if (Distance < attackRange)
            {
                attack();
            }
 
        }
    }
 
    // poursuite
    void chase()
    {
        animations.Play("walk");
        agent.destination = Target.position;
    }
 
    // Combat
    void attack()
    {
        // empeche l'ennemi de traverser le joueur
        agent.destination = transform.position;
 
        //Si pas de cooldown
        if (Time.time > attackTime) {
            animations.Play("hit");
            Target.GetComponent< PlayerInventory>().ApplyDamage(TheDammage);
            Debug.Log("L'ennemi a envoyé " + TheDammage + " points de dégâts");
            attackTime = Time.time + attackRepeatTime;
        }
    }
 
    // idle
    void idle()
    {
        animations.Play("idle");
    }
 
    public void ApplyDammage(float TheDammage)
    {
        if (!isDead)
        {
            enemyHealth = enemyHealth - TheDammage;
            print(gameObject.name + "a subit " + TheDammage + " points de dégâts.");
 
            if(enemyHealth <= 0)
            {
                Dead();
            }
        }
    }
 
    public void Dead()
    {
        isDead = true;
        animations.Play("die");
        Destroy(transform.gameObject, 5);
    }
}