La situation :
- le personnage évolue dans l'obscurité, suivi par un drone qui plane au-dessus de sa tête et qui le protège grâce à une lumière qu'il peut allumer ou éteindre en appuyant sur une touche. (la lumière consomme de l'énergie et il faudra donc l'économiser, c'est pourquoi il peut allumer et éteindre, mais ça ce sera une prochaine étape).
- Tapies dans le noir, des hyènes se jetteront sur lui pour le tuer à mesure de sa progression dans le décors.
- Le joueur peut espérer courir assez vite pour s'en éloigner suffisamment, car au-delà d'une certaine distance, la hyène abandonne.
Jusque là, tout fonctionne à peu près.
l'étape que je n'arrive pas à mettre au point c'est la suivante :
- il peut aussi activer la lumière du drone, le faisceau lumineux le protège et il pourra continuer à avancer, les hyènes resteront à distance, autour du faisceau, tout en continuant de le suivre au pas car dès que la lumière s'éteindra (plus de batterie ou mauvaise manipulation du joueur) ou que le joueur ne sera plus sous le drone (par exemple le drone se retrouve bloqué par un élément de décors), elles se jetteront de nouveau sur lui.
bon c'est sûr que c'est un peu audacieux pour mon niveau mais j'essaie de trouver des solutions.
une petite capture pour illustrer tout ça :
(désolé, la capture est un peu longue et le proto est très brouillon, les collisions ne marchent pas bien etc.)
voici donc le code de ma hyène que j'ai commenté ci-dessous :
au passage, le script appelle celui du joueur sur lequel il y a une variable isDead et isLight (quand la lumière est actionnée).
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Script_Hyene : MonoBehaviour
{
public Transform Joueur; // Appelle le joueur.
private Animator hAnim; // L'animator de la hyène.
public float vitesseHyene = 4;
public float distanceCritique = 7; // Au-delà de cette distance, la hyene ne s'intéressera plus au joueur. En deça, elle le poursuivra.
public float perimetreLight = -2; // Quand la lumière du drone est allumée (isLight) la hyène reste au-dela de ce périmetre qui protège le joueur NOTE : cette valeur DOIT être négative pour que la hyene s'éloigne du joueur.
public Script_Controles_V3 ScriptJoueur; // Appeler le script du joueur pour chercher les variables "isDead" et "isLight".
void Start()
{
hAnim = GetComponent<Animator>(); // La désignation de l'animator sur le gameObject de la hyene.
}
void Update()
{
transform.LookAt(Joueur); // Pour que la hyène s'intéresse au joueur.
if (ScriptJoueur.isDead == true) // Si le joueur est mort, la hyène ne s'y interesse plus.
{
hAnim.SetBool("Chasse", false);
return;
}
if (Vector3.Distance(transform.position, Joueur.position) <= distanceCritique) // Si la distance entre la hyène et le joueur est plus petite ou égale au facteur "distanceCritique" alors, elle le poursuit (et l'attaque/tue).
{
transform.position += transform.forward * vitesseHyene * Time.deltaTime;
hAnim.SetBool("Chasse", true);
}
if (Vector3.Distance(transform.position, Joueur.position) > distanceCritique) // si la distance est plus grande, la hyène reste au repos, sur place.
{
hAnim.SetBool("Chasse", false);
}
if (ScriptJoueur.isLight == true) // Si la lumière est allumée et qu'elle est assez près pour s'intéresser au joueur, la hyène reste à distance (perimetreLight).
{
transform.position += -transform.forward * vitesseHyene * Time.deltaTime;
hAnim.SetBool("Chasse", false);
}
}
}
mais je ne sais pas très bien comment faire ce mouvement paradoxal pour que la hyène continue à aller vers le joueur tout en restant à une certaine distance. je me perds un peu dans la logique je crois, et il se peut que mon script soit déjà un peu confus...
Bref si vous aviez le chic de m'éclairer un peu, que ce soit simplement sur la logique ou me donner une piste de réfléxion
Merci !