[DB-AL] Animator et booléens de transitions
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
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
[DB-AL] Animator et booléens de transitions
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" ?
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" ?
Re: [DB-AL] Animator et booléens de transitions
Ca marche Boubouk !
Pour détailler un peu j'ai ça :
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.
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
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.
Re: [DB-AL] Animator et booléens de transitions
J'ai réussi !
J'ai fait comme ça :
Mais le gameObject ce détruit instantanément, comme incorporer un timer de 3s ? J'ai essayé WaitForSecond mais ça me fait des erreurs
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);
}
- boubouk50
- ModoGenereux
- Messages : 6216
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: [DB-AL] Animator et booléens de transitions
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.à la place de OnDestroyed ().
Comme ta fonction est virtuelle, par contre je ne sais pas si cela fonctionnera tel quel.
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);
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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: [DB-AL] Animator et booléens de transitions
Oui j'ai réussi et ça fonctionne nickel :
Ca fait un bon gros moment que je galère avec ça content que ça soit résolu ^^
Merci
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);
}
Merci
Re: [DB-AL] Animator et booléens de transitions
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é :
et
et
avec :
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;
Code : Tout sélectionner
this.UnitController.enabled = !this.UnitController.enabled;
Code : Tout sélectionner
UnitController.enabled = !UnitController.enabled;
Code : Tout sélectionner
private SimpleUnitController UnitController;
- boubouk50
- ModoGenereux
- Messages : 6216
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: [DB-AL] Animator et booléens de transitions
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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: [DB-AL] Animator et booléens de transitions
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 :
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");
- boubouk50
- ModoGenereux
- Messages : 6216
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: [DB-AL] Animator et booléens de transitions
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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: [DB-AL] Animator et booléens de transitions
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
if (GetComponent<Unit>().enabled)
{
GetComponent<Unit>().enabled = false;
Debug.Log("E5");
...
}
}[/code]
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]
{
GetComponent<Unit>().enabled = false;
Debug.Log("E5");
...
}
}[/code]