DB blendtree shoot 2D

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
klarkk
Messages : 12
Inscription : 27 Fév 2020 10:58

DB blendtree shoot 2D

Message par klarkk » 27 Fév 2020 12:38

Bonjour a tous, je suis débutant dans le codage c sharp dans unity, jusque la j'avais réussi a me débrouiller mes la je suis coincer , je vais essayer d expliquer le plus clairement possible merci d'avance pour votre aide , mon jeux et un plateforme 2d pour android , mon player tir a 90 degrés avec pour animation un blendtree, les différents image png de l animation et son bras qui par du bas vers le haut avec a peu prêt 30 images, pour la plateforme android, je vais tirer avec un deuxième joystick, j ai réussi a utiliser l'animation avec le joystick, le souci sa n est pas instantané le bras fonctionne progressivement ,
ces a dire quand mon joystick je le met vers le haut le bras monte a une certaine vitesse donc pour pouvoir viser et tuer un ennemie ses injouable , mon but ses que son bras vise en temps réelle que l’on bouge le joystick et que sa s"arrête a la position de viser de l ennemie merci pour votre aide voici ci dessous le code utiliser:


Animator anim;

Code : Tout sélectionner

    public float blendIdle = 0;
    public float blendSpeed = 3.0f;
    public float blendMax = 50.0f;
    
    void Start()
    {
        anim = GetComponent<Animator>();
        
    }

    void FixedUpdate()
    {
        float aim = CrossPlatformInputManager.GetAxis("Vertical_2");
    
        anim.SetFloat("Aim", blendIdle);
        if(aim < 0) anim.SetFloat("Aim", blendIdle = blendIdle -= blendSpeed);
        if(aim > 0) anim.SetFloat("Aim", blendIdle = blendIdle += blendSpeed);

        if(blendIdle < -blendMax) blendIdle = -blendMax;
        if(blendIdle > blendMax) blendIdle = blendMax;
        
    }
}
 ! Message de : boubouk50
Aucun effort de rédaction ni de relecture. Si ceci est une explication claire, je serais curieux de savoir quand ça ne l'est pas.
Bonjour à tous,
je suis débutant dans le développement C# pour Unity.
J'ai réussi à me débrouiller jusqu'ici, mes là je suis coincé. Merci d'avance pour votre aide.
Mon jeu est un plateformer 2D pour Android. Mon player à la capacité de tirer, gérée par un blend d'animation et un Joystick numérique en Input. J'ai réussi à utiliser l'animation avec le joystick, le souci est que le bras fonctionne progressivement et non pas instantanément comme voulu.
Quand je mets mon joystick vers le haut, le bras monte à une certaine vitesse, cela rend la visée injouable. Je souhaiterai donc avoir le bras dirigé dans le sens du Joystick.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 5292
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: DB blendtree shoot 2D

Message par boubouk50 » 27 Fév 2020 13:07

Sans rien connaître de l'animation 2D par BlendTree, je constate tout de même que tu gères le blend via une addition selon une "vitesse". Cela conditionne donc un comportement progressif, car à chaque FixedUpdate (), tu vas monter/descendre un peu le bras.
Il faudrait plutôt affecter directement blendIdle en fonction du Joystick à mon avis.

Admettons que vertical_2 renvoie un float compris entre -1 et 1 et qu'il te faut que blendIdle soit compris entre blendMax et -blendMax. Il suffit de multiplier les 2 pour avoir la relation entre blend et input.

Code : Tout sélectionner

public float blendMax = 50.0f;
    
    void Start()
    {
        anim = GetComponent<Animator>();
    }
    
    void FixedUpdate()
    {
	anim.SetFloat("Aim", CrossPlatformInputManager.GetAxis("Vertical_2") * blendMax);
    }
}
Ainsi, lorsque le joystick sera en haut, Aim vaudra blendMax, quand le joystick sera en bas, il vaudra -blendMax et prendra également toutes les valeurs intermédiaires.

Aussi,

Code : Tout sélectionner

blendIdle = blendIdle -= blendSpeed
me semble un petit peu pas très juste. Tu affectes blendIdle par lui-même auquel tu as déjà enlevé blendSpeed. je suis étonné que cela fonctionne.

Code : Tout sélectionner

blendIdle -= blendSpeed
ou

Code : Tout sélectionner

blendIdle = blendIdle - blendSpeed
serait déjà plus juste, à mon avis.
"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

klarkk
Messages : 12
Inscription : 27 Fév 2020 10:58

Re: DB blendtree shoot 2D

Message par klarkk » 27 Fév 2020 15:37

Salut boubouk50,
tout d'abord merci de ton aide et désolé pour l'imprécision. Ce n'est pas toujours évident d'expliquer un souci. Je suis débutant et ça ne me rend pas la tâche facile.
Je reviens vers toi, encore merci.

klarkk
Messages : 12
Inscription : 27 Fév 2020 10:58

Re: DB blendtree shoot 2D

Message par klarkk » 28 Fév 2020 13:24

Salut boubouk50,
merci pour ton aide sa fonctionne cependant j'ai deux souci, quand je bouge le joystick ses très rapide et si je mes blenspeed a 0 sa change rien, j’ai aussi baisser la sensibilité des inputs vertical horizontal sa change rien non plus , mon deuxième souci ses la transition entre courir et tirer, quand je tire il courre plus il reste droit.

Avatar de l’utilisateur
Max
Newser
Newser
Messages : 7726
Inscription : 30 Juil 2011 13:57

Re: DB blendtree shoot 2D

Message par Max » 29 Fév 2020 11:04

suite aux modifications suggérées par Boubouk, peux-tu poster ton script modifié ?
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

klarkk
Messages : 12
Inscription : 27 Fév 2020 10:58

Re: DB blendtree shoot 2D

Message par klarkk » 29 Fév 2020 13:40

Salut Max merci pour ta réponse oui le voici .

Code : Tout sélectionner

Animator anim;

    public float blendIdle;
    public float blendSpeed;
    public float blendMax;

    public float aim;

    void Start()
    {
        anim = GetComponent<Animator>();
        
    }

    void FixedUpdate()
    {
        anim.SetFloat("Aim", CrossPlatformInputManager.GetAxis("Vertical_2") * blendMax);
        

        if(aim < 0) anim.SetFloat("Aim", blendIdle -= blendSpeed);
        if(aim > 0) anim.SetFloat("Aim", blendIdle += blendSpeed);
        
        if(blendIdle < -blendMax) blendIdle = -blendMax;
        if(blendIdle > blendMax) blendIdle = blendMax;
        
    }

    
}

Aelhan
Messages : 65
Inscription : 11 Déc 2019 23:00

Re: DB blendtree shoot 2D

Message par Aelhan » 29 Fév 2020 14:40

Code : Tout sélectionner

 anim.SetFloat("Aim", CrossPlatformInputManager.GetAxis("Vertical_2") * blendMax);
Ce ne serait pas blendIdle plutôt que blendMax ici ?
Celui qui pose une question risque cinq minutes d'avoir l'air bête.
Celui qui ne pose pas de question restera bête toute sa vie.

klarkk
Messages : 12
Inscription : 27 Fév 2020 10:58

Re: DB blendtree shoot 2D

Message par klarkk » 29 Fév 2020 15:11

salut Aelhan merci pour ta réponse sa fonctionne aussi et mème un peut mieux mes ses encore sensible se qui et bizarre ses que blendSpeed je le mes a zéro sa change rien.

Aelhan
Messages : 65
Inscription : 11 Déc 2019 23:00

Re: DB blendtree shoot 2D

Message par Aelhan » 29 Fév 2020 16:40

Tu as aussi la string "Aim" avec majuscule et la float aim tout en minuscule. Peut-être qu'uniformiser serait bien ?
Celui qui pose une question risque cinq minutes d'avoir l'air bête.
Celui qui ne pose pas de question restera bête toute sa vie.

klarkk
Messages : 12
Inscription : 27 Fév 2020 10:58

Re: DB blendtree shoot 2D

Message par klarkk » 29 Fév 2020 22:18

D accord merci mes tu veux dire quoi par uniformiser ?

Répondre

Revenir vers « (C#) CSharp »