[DB-AL] Animator et booléens de transitions

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
meTonne
Messages : 14
Inscription : 27 Fév 2017 16:29

[DB-AL] Animator et booléens de transitions

Message par meTonne » 02 Mars 2017 00:04

Bonsoir !

Dans le cas suivant :
J'ai un animator avec des animations et des Bool pour mes transitions.
Par script puis-je obliger un bool à toujours rester sur false ? Pour éviter qu'il "reboot" ?
 ! Message de : boubouk50
Merci de ne pas surcharger un post par de nouvelles questions sur un autre sujet. Le but n'est pas seulement de t'aider mais aussi de créer une base de solutions pour les autres qui auraient le même problème. ;)

meTonne
Messages : 14
Inscription : 27 Fév 2017 16:29

Re: [DB-AL] Animator et booléens de transitions

Message par meTonne » 02 Mars 2017 12:49

Ca marche Boubouk ! :)

Pour détailler un peu j'ai ça :

Code : Tout sélectionner

 
 //Section qui informe que l'unité prend des dégâts
 public virtual void TakeDamage(float damage, RTSObject from = null) {
			
            Health -= damage;
			lastEnemyAttack = from;
			if(Health <= 0.0f && CanControl) {
                {
                   //Pas de health negative, toujours égale à 0
                    health = 0;
                    Debug.Log("E1");

                    //Stop l'animation d'attack
                    anim.SetBool("Attack", false);
                    
                    //Pour déselectionner l'unité vis à vis du joueur
                    selectionManager.RemoveSelected(this.gameObject);
                   
                   //Active l'animation de mort
                   anim.SetBool("Dead", true);
          
                   Debug.Log("E2");
                }
               // OnDestroyed();
              // OnDestroyed en texte pour voir si tout ce passe bien
Mon soucis est que j'utilise le RTS kit comme base de mon projet.
Dans ce RTS kit lorsque l'unité prend des dégâts elle riposte par une "zone de détection".
Ce que j'ai fait fonctionne, l'animation d'attaque s'arrête et celle de mort commence sauf que vue que la cible prend toujours des dégâts la risposte ce réactive et l'animation d'attaque ce rejoue prenant le dessus sur l'animation de mort.

Ma question : Comment puis-je forcer l'animation d'attaque à rester désactiver le temps de jouer l'animation de mort puis de détruire le gameobject.

meTonne
Messages : 14
Inscription : 27 Fév 2017 16:29

Re: [DB-AL] Animator et booléens de transitions

Message par meTonne » 02 Mars 2017 15:50

J'ai réussi !

J'ai fait comme ça :

Code : Tout sélectionner

            public virtual void TakeDamage(float damage, RTSObject from = null) {
			if(health >0);
            Health -= damage;
			lastEnemyAttack = from;
			if(Health <= 0.0f && CanControl) {
                {
                    health = 0;
                    Debug.Log("E1");
                    anim.SetBool("Attack", false);
                    selectionManager.RemoveSelected(this.gameObject);
                    anim.SetBool("Dead", true);
                    
                    Debug.Log("E2");
                }
                OnDestroyed();
                
			}
		}

		public virtual void OnDestroyed() {
            selectionManager.RemoveSelected(this.gameObject);
            Destroy(this.gameObject);
		}
Mais le gameObject ce détruit instantanément, comme incorporer un timer de 3s ? J'ai essayé WaitForSecond mais ça me fait des erreurs

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

Re: [DB-AL] Animator et booléens de transitions

Message par boubouk50 » 02 Mars 2017 16:09

WaitForSeconds ne fonctionne qu'au sein d'une coroutine. Que je t'invite à apprendre d'ailleurs.

Tu peux utiliser: https://docs.unity3d.com/ScriptReferenc ... nvoke.html
Cette fonction te permet d'en lancer une après X secondes.

Code : Tout sélectionner

Invoke ("OnDestroyed", 3.0f);
à la place de OnDestroyed ().

Comme ta fonction est virtuelle, par contre je ne sais pas si cela fonctionnera tel quel.
"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

meTonne
Messages : 14
Inscription : 27 Fév 2017 16:29

Re: [DB-AL] Animator et booléens de transitions

Message par meTonne » 02 Mars 2017 16:31

Oui j'ai réussi et ça fonctionne nickel :

Code : Tout sélectionner

            public virtual void TakeDamage(float damage, RTSObject from = null) {
			if(health >0);
            Health -= damage;
			lastEnemyAttack = from;
			if(Health <= 0.0f && CanControl) {
                {
                    health = 0;
                    anim.SetBool("Attack", false);        
                    selectionManager.RemoveSelected(this.gameObject);
                    anim.SetBool("Dead", true);
                    Destroy(this.gameObject, TimeToDie);
                }
Ca fait un bon gros moment que je galère avec ça content que ça soit résolu ^^
Merci :)

meTonne
Messages : 14
Inscription : 27 Fév 2017 16:29

Re: [DB-AL] Animator et booléens de transitions

Message par meTonne » 02 Mars 2017 17:39

Enfaite après plusieurs tests c'est pas totalement fonctionnel...
L'animation ce joue mais l'unité reste active comme si de rien était.

Sur mon gameObject j'ai un script du nom de : SimpleUnitController qui est le script d'attaque.
J'aimerais que lorsque mon animation ce joue ce script ce désactive, ou que ça désactive tout les scripts sur ce gameObject.
Ou alors qu'il devienne "invisible" pour les autres unités.

J'ai essayé :

Code : Tout sélectionner

this.gameObject.GetComponent(UnitController).enable=false;
et

Code : Tout sélectionner

this.UnitController.enabled = !this.UnitController.enabled;
et

Code : Tout sélectionner

UnitController.enabled = !UnitController.enabled;
avec :

Code : Tout sélectionner

private SimpleUnitController UnitController;

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

Re: [DB-AL] Animator et booléens de transitions

Message par boubouk50 » 02 Mars 2017 18:10

Tu peux désactiver complètement le GameObject et ses Components avec la fonction SetActive ();

Code : Tout sélectionner

gameObject.SetActive (false);
"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

meTonne
Messages : 14
Inscription : 27 Fév 2017 16:29

Re: [DB-AL] Animator et booléens de transitions

Message par meTonne » 03 Mars 2017 19:00

Bonjour,

Mon script gère les bâtiments et les unités
le soucis c'est que les bâtiments n'ont pas de SimpleUnitController mais un SimpleBuildingController

Comment faire une fonction "ou" ?

J'ai essayé ça :

Code : Tout sélectionner

                    if (GetComponent<SimpleUnitController>().enabled)
                    {
                        GetComponent<SimpleUnitController>().enabled = false;
                        selectionManager.RemoveSelected(this.gameObject);
                        anim.SetBool("Dead", true);
                        Destroy(this.gameObject, TimeToDie);
                    }

                    Debug.Log("E2");

                    if (GetComponent<SimpleBuildingController>().enabled)
                    {
                        GetComponent<SimpleBuildingController>().enabled = false;
                        selectionManager.RemoveSelected(this.gameObject);
                        anim.SetBool("Dead", true);
                        Destroy(this.gameObject, TimeToDie);
                    }
                    Debug.Log("E3");

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

Re: [DB-AL] Animator et booléens de transitions

Message par boubouk50 » 06 Mars 2017 10:20

Dans une condition, il est matérialisé par ||

Code : Tout sélectionner

if (test1 || test2) { ... }
"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

meTonne
Messages : 14
Inscription : 27 Fév 2017 16:29

Re: [DB-AL] Animator et booléens de transitions

Message par meTonne » 06 Mars 2017 18:47

Ca marchait pas avec "ou" du coup j'ai essayé ça mais ça fonctionne pas non plus ...
Il s'arrête au E1.
Normalement lorsque la condition du "if" n'est pas remplit il passe au "else" non ?
Ou j'ai mal compris comment ça fonctionne :/

Code : Tout sélectionner

health = 0;
                    anim.SetBool("Attack", false);
                    Debug.Log("E1");

                    if (GetComponent<SimpleUnitController>().enabled)
                    {
                        GetComponent<SimpleUnitController>().enabled = false;
                        Debug.Log("E2");
....
                    }
                    else
                    if (GetComponent<SimpleBuildingController>().enabled)
                    {
                        GetComponent<SimpleBuildingController>().enabled = false;
                        Debug.Log("E3");
....
                    }
                    else
                    if (GetComponent<Building>().enabled)
                    {
                        GetComponent<Building>().enabled = false;
                        Debug.Log("E4");
...
                    }
                    else[code]
if (GetComponent<Unit>().enabled)
{
GetComponent<Unit>().enabled = false;
Debug.Log("E5");
...
}
}[/code]

Répondre

Revenir vers « (C#) CSharp »