[DB-AL] Erreur syntaxe rotation

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
FournierF3D
Messages : 38
Inscription : 16 Nov 2017 00:18

[DB-AL] Erreur syntaxe rotation

Message par FournierF3D » 01 Déc 2017 04:07

Bonjour


débutant en scripting, je regarde énormément de vidéo pour le moment

je bosse actuellement sur l'ouverture d'une porte
j'ai une erreur de syntaxe avec le rotation, mais je n'arrives pas a trouvé le pourquoi ni comment réglé le soucis, un petit coup de main serrait le bienvenue :D

Code : Tout sélectionner

--
        PorteEntree.rotation = new Vector3(
            PorteEntree.rotation.x,
            AngleOuverture,
            PorteEntree.rotation.z);
--
et voici les déclaration des variables si besoin

Code : Tout sélectionner

--
    public Transform PorteEntree;
    public float AngleOuverture = 0f;
--
je suis ce tuto
https://www.youtube.com/watch?v=uhlRoV_msPc
mis a pars que je souhaite une ouverture de porte standard en rotation plutôt qu'une porte coulissante



mikiiiiiiiiiiiiiiiiii


Fred

FournierF3D
Messages : 38
Inscription : 16 Nov 2017 00:18

Re: [DB-AL] Erreur syntaxe rotation

Message par FournierF3D » 01 Déc 2017 04:49

apres de nombreux teste, j'ai reussis grace a cette commande

Code : Tout sélectionner

        if(OpenPorte)
            {
            PorteEntree.Rotate(0, AngleOuverture , 0);
            }
dans le Void Update
mais je ne comprends pas comment enserrer la commande " Time.deltaTime"
j'ai testé cette ligne
--
PorteEntree.Rotate(0, AngleOuverture * Time.deltaTime , 0);
--
mais le script ne fonctionne pas dans ce cas là ?

FournierF3D
Messages : 38
Inscription : 16 Nov 2017 00:18

Re: [DB-AL] Erreur syntaxe rotation

Message par FournierF3D » 01 Déc 2017 08:29

bon, la nuit a été longue mais voici ou j'en suis.

Code : Tout sélectionner

    public Transform PorteEntree;
    public bool OpenPorte = false;
    public bool ClosePorte = false;
    public float AngleOuverture = 0f;
    public float AngleMax = -50f;
    private float AnglePorte = 0f;
    private float CranOuverturePorte = 0f;
    private int CPT = 0;


 Void Start()
       {
        CranOuverturePorte = (AngleMax-(AngleMax % AngleOuverture))/AngleOuverture;
       }




//Condition d'ouverture
    void OnTriggerEnter(Collider other)  

    {
        if (other.transform.tag == "Player")
            {
            OpenPorte = true;
            }


// Ouverture de Porte
        if(OpenPorte == true)
            {
            while ( CPT<CranOuverturePorte)
                {
                PorteEntree.Rotate(0, AngleOuverture * Time.deltaTime, 0);
                CPT++;
                }

                  PorteEntree.Rotate(0,  AngleOuverture , 0); 
                  if(AngleMax > AnglePorte)
                       {
                        OpenPorte = false;
                        Debug.Log(AnglePorte);
                        }
       
dans le principe, je me suis dis je fais une boucle avec un compteur initialisé a 0 et allant jusqu’à mon ouverture maximum divisée par mon angles et qui a chaque cran m'ouvre un peu plus la porte

mon problème est que "l'animation de la boucle" ce joue tellement vite qu'il est impossible de voir la porte s’ouvrir
y a t'il moyen de ralentir l’exécution de la boucle ?
.
 ! Message de : Max
Utilisez les balises code SVP !
Merci de lire la Netiquette.

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

Re: [DB-AL] Erreur syntaxe rotation

Message par boubouk50 » 01 Déc 2017 10:36

Héhé, dsl pour l'aide tardive, on dort la nuit ;-)

Le problème que tu as est que tout est fait dans le même temps, donc tes calculs se superposent et tu n'as que le résultat final.
Soit tu utilises l'Update (), et à chaque update tu ouvres un peu ta porte (deltaTime est le temps écoulé entre chaque update). -> Pas la meilleure idée
Soit tu crées une coroutine qui va être appelée dans ton OnTriggerEnter (). Une coroutine est indépendante, tu peux y régler le temps à ta sauce à l'intérieur (notamment une boucle) grâce à WaitForSeconds () ou WaitForEndOfFrame () et donc gérer la vitesse d'ouverture de ta porte. -> Bonne idée
Soit tu crées une animation de rotation via l'Animator que tu appelles depuis ton code -> Très bonne idée
"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

FournierF3D
Messages : 38
Inscription : 16 Nov 2017 00:18

Re: [DB-AL] Erreur syntaxe rotation

Message par FournierF3D » 01 Déc 2017 12:56

Dormir, mais quelle idée Bizarre :D

ne t’inquiète pas pour "l'aide tardive"
et merci pour ta réponse
j'ai tout mon temps et j'ai encore beaucoup de tutos a regarder :D

alors je dois admettre que je n'ai pratiquement rien compris a ton explication :p
mais ça me donnera des pistes a cherché et de nouveau trucs a apprendre

par contre, puis je te demandé pourquoi certaine "solutions" sont mieux ou moins bien que d'autres ?
en quoi cela va t'il changé le résulta ?

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

Re: [DB-AL] Erreur syntaxe rotation

Message par boubouk50 » 01 Déc 2017 13:05

Je vais essayer de faire simple:
La fonction Update () est appelée à chaque rafraîchissement d'images, donc tu peux l"utiliser pour tourner un petit peu ta porte à chaque appel.
Une coroutine est une fonction indépendante de tout ça dans laquelle tu peux gérer le temps comme tu veux donc ouvrir ta porte comme tu le souhaites.
Une fonction quant à elle ne s'exécutera qu'à la demande et on ne passera pas à la suite tant qu'elle n'est pas terminée, autrement dit seul le résultat compte, donc pas d'intermédiaire.

Ensuite, toutes les 3 donneront le même résultat (plus ou moins), mais en terme de conception et d'optimisation, certaines sont mieux que d'autres. Pour plusieurs raisons.
Un Update () est appelé toutes les frames, c'est à dire que cela entraîne des calculs à chaque frame.
Une coroutine elle, se termine à la fin, donc elle n'entraînera pas de calculs au delà de son appel.
Une animation, elle, est plus simple dans l'utilisation, tu peux aussi régler plus finement l'ouverture, et niveau code, un simple appel pour la jouer, tu peux gérer le temps, la jouer à l'envers à n'importe quel moment pour refermer, etc.
"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

FournierF3D
Messages : 38
Inscription : 16 Nov 2017 00:18

Re: [DB-AL] Erreur syntaxe rotation

Message par FournierF3D » 01 Déc 2017 19:17

ok, je te remercie pour tes explications

je vais essayé de regardé le fonctionnement des 3
mais appliqué celui qui contiens l'animation dans ce cas

FournierF3D
Messages : 38
Inscription : 16 Nov 2017 00:18

Re: [DB-AL] Erreur syntaxe rotation

Message par FournierF3D » 03 Déc 2017 12:39

après de nombreux essaies, je reviens vous redemander conseil :D

j'ai cette ligne là : "Porte.animation.Play(Anim_PorteEntree); "
qui semble être erronée
mais je ne comprends pas le pourquoi :(

voici le code complet

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Script_PorteEntree : MonoBehaviour
{
    public bool OpenPorte = false;
    public bool ClosePorte = false;
    public Animator Porte;


    void Start()
    {

    }




    //Condition d'ouverture
    void OnTriggerEnter(Collider other)

    {
        if (other.transform.tag == "Player")
        {
            Debug.Log("Ouverture porte d'entrée");
            Porte.animation.Play(Anim_PorteEntree);
            OpenPorte = true;
            ClosePorte = false;
        }
    }
    //Condition de fermeture
    void OnTriggerExit(Collider other)
    {
        if (other.transform.tag == "Player")
        {
            Debug.Log("Fermeture porte d'entrée");
            //           OpenPorte = false;
            ClosePorte = true;
            OpenPorte = false;
        }
    }

}
Cordialement

Fred

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

Re: [DB-AL] Erreur syntaxe rotation

Message par Max » 03 Déc 2017 12:54

Bonjour,
FournierF3D a écrit :
03 Déc 2017 12:39
j'ai cette ligne là : "Porte.animation.Play(Anim_PorteEntree); "
qui semble être erronée
mais je ne comprends pas le pourquoi :(
Plusieurs choses.
D'après la définition dans ton code, 'Porte' est un type Animator. Mais la classe Animator ne comporte pas de propriété appelée animation. (ne pas hésiter à consulter la doc)
En suite, pour la fonction Play(Anim_PorteEntree);
Dans ce cas, Anim_PorteEntree est quoi ? car il ne semble pas être défini dans le code que tu fournis.
Si tu te réfères à la doc, Anim_PorteEntree doit être soit un type string, soit un type int.
Sinon, en guise de conseil, si tu veux suivre les conventions d'écriture du code, évite les majuscules en tête des noms de tes variables (plutôt réservés aux fonctions/méthodes par exemple) ;)
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 »