[DB-AL] Problème ennemie (résolu discord)

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
sachadors
Messages : 1
Inscription : 04 Juin 2020 13:46

[DB-AL] Problème ennemie (résolu discord)

Message par sachadors » 04 Juin 2020 15:10

Bonjour tous le monde, je suis bloqué depuis quelques jours sur un problème. Je suis débutant et mon code est plutôt complexe (j'ai prit la base d'un asset gratuit: easy fps que je modifie complétement). Donc voila, lorsque je tire une balle sur un ennemie. C'est le dernier qui a spawn via un script avec Instantiate qui perd la vie.. Cela doit être un problème de référencement mais j'arrive pas du tout à le résoudre. Il faudrait que la vie descende sur l'ennemie touché et non sur le dernier ennemie qui a spawn. Merci encore. Je met a disposition les scripts:

1.Script de la balle qui spawn:

Code : Tout sélectionner

      public float maxDistance = 1000000;
	RaycastHit hit;
	public GameObject decalHitWall;
	public float floatInfrontOfWall;
	public GameObject bloodEffect; /*pour effet de sang*/
	public LayerMask ignoreLayer;

	private GameObject corps;
	private GameObject tete;

	void Start()
    {
		corps = GameObject.FindGameObjectWithTag("Dummie"); /*Tag présent sur l'ennemie*/
		tete = GameObject.FindGameObjectWithTag("Tete");  /*Tag présent sur la tete de l'ennemie pour tirer dans la      tete*/
	}

	void Update() {

		if (Physics.Raycast(transform.position, transform.forward, out hit, maxDistance, ~ignoreLayer)) {
			if (decalHitWall) {
				if (hit.transform.tag == "LevelPart") {
					Instantiate(decalHitWall, hit.point + hit.normal * floatInfrontOfWall, Quaternion.LookRotation(hit.normal));
					Destroy(gameObject);
				}
				if (hit.transform.tag == "Dummie") {
					Instantiate(bloodEffect, hit.point, Quaternion.LookRotation(hit.normal));
					[highlight=yellow]perteVieCorps(50);[/highlight]
					Destroy(gameObject);
				}
				if (hit.transform.tag == "Tete"){
					Instantiate(bloodEffect, hit.point, Quaternion.LookRotation(hit.normal));
					[highlight=yellow]perteVieCorps(100);[/highlight]
					Destroy(gameObject);
				}
			}
			Destroy(gameObject);
		}
		[highlight=yellow]void perteVieCorps (int parametre){
			corps.GetComponent<zombieAI>().vie -= parametre;[/highlight]
		}

		Destroy(gameObject, 0.1f); /*detruit la balle*/
	}	
}


2.le script de l'ennemie:

Code : Tout sélectionner

 
   [b] public int vie = 100;[/b]
    NavMeshAgent nm; 
    private Transform player;

    private Animator animator;
    public Rigidbody[] ragdollRigibodies;

    void Start()
    {
        player = GameObject.FindGameObjectWithTag("Player").transform;

        nm = GetComponent<NavMeshAgent>();
        animator = GetComponentInChildren<Animator>();
        ragdollRigibodies = GetComponentsInChildren<Rigidbody>();
        foreach (Rigidbody rb in ragdollRigibodies)
        {
            rb.isKinematic = true;
        }
    }
    void Update()
    {
        nm.SetDestination(player.position); /*pour que l'ennemie se dirige vers le joueur*/

      [b] if (vie <= 0) //
        {
            animator.enabled = false;
            Dead();
        }

        void Dead() {
            foreach (Rigidbody rb in ragdollRigibodies) 
            {
                rb.isKinematic = false;  /*ennemie devient moue*/
            }
            Destroy(gameObject, 15); /*destruction de l'ennemie qui se trouve par terre*/
        }[/b]


Merci encore, n’hésiter pas de me poser des questions. :-D
Dernière édition par sachadors le 04 Juin 2020 19:46, édité 1 fois.

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: [DB-AL] Problème ennemie

Message par djulio74 » 04 Juin 2020 18:01

Salut.
Avoir comme cela, c'est dans ton premier script le soucis. Tu défini tête et corps avec une recherche par tag. Hors cela te retourne le dernier créé avec ce tag.

Tu devrais créer une variable Transform ennemiTouche dans ton script et l'assigner quand le raycast touche quelque chose.
EnemiTouche = hit. Transform.

Et ensuite dans ta void PertvieCorps, remplacer corps par EnemiTouche.

Je suis sur le tel donc pas facile pour te faire un vrai bout de code.
Essai ma solution et si vraiment tu n'y arrive pas redemande et dans la soirée je te ferais le script ( sauf si quelqu'un d'autre a compris et veux bien te montrer)

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] Problème ennemie

Message par boubouk50 » 04 Juin 2020 18:50

djulio74 a écrit :
04 Juin 2020 18:01
Essai ma solution et si vraiment tu n'y arrive pas redemande et dans la soirée je te ferais le script ( sauf si quelqu'un d'autre a compris et veux bien te montrer)
Je suis avec lui sur le discord, il a bien avancé déjà. Je vais lui demander de poster une MàJ de son avancement.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

Re: [DB-AL] Problème ennemie (résolu discord)

Message par Max » 05 Juin 2020 18:04

Bonsoir,

@Sachadors: poster ici la solution aurait été sympa :triste1:
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Répondre

Revenir vers « (C#) CSharp »