IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Unity Discussion :

[Programmation] Erreur de script C#


Sujet :

Unity

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2014
    Messages : 37
    Points : 23
    Points
    23
    Par défaut [Programmation] Erreur de script C#
    Bonsoir,

    En suivant ce second tutoriel de la chaîne Unity3D-dev; je viens de rencontrer un problème sur un script C#. Il s'agit là de travailler sur le mouvement des objets, avec les flèches du clavier. Cependant en suivant la vidéo, je me rend donc sur la documentation pour avoir la bonne fonction du rigidbody.
    J'inscris donc la fonction dite, l'enregistre et la place sur ma sphère, mais je me rends compte à ce moment là qu'il y a un message d'erreur.

    " Assets/Script/PlayerController.cs(18,43): error CS1061: Type `UnityEngine.Rigidbody' does not contain a definition for `Addforce' and no extension method `Addforce' of type `UnityEngine.Rigidbody' could be found (are you missing a using directive or an assembly reference?) "

    Quelqu'un a t-il rencontré le même problème sur la dernière version Unity ?

  2. #2
    Membre émérite Avatar de Cirrus Minor
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2014
    Messages
    953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2014
    Messages : 953
    Points : 2 612
    Points
    2 612
    Par défaut
    Bonjour,
    C# est sensible à la casse, je suppose que tu dois utiliser la méthode "AddForce" et non "Addforce".

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2014
    Messages : 37
    Points : 23
    Points
    23
    Par défaut
    Pourtant non j'ai bien noté le programme..

    Je te laisse voir.

    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    using UnityEngine;
    using System.Collections;
     
    public class PlayerController : MonoBehaviour {
     
    	// Use this for initialization
    	void Start () {
     
    	}
     
    	// Update is called once per frame
    	void Update () {
     
    		float mouveHorizontal = Input.GetAxis ("Horizontal");
    		float mouveVertical = Input.GetAxis ("Vertical");
     
    		Vector3 mouvment = new Vector3 (mouveHorizontal, 0, mouveVertical); 
    		GetComponent<Rigidbody>().Addforce (mouvment); 
     
    	}
    }

  4. #4
    Membre émérite Avatar de Cirrus Minor
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2014
    Messages
    953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2014
    Messages : 953
    Points : 2 612
    Points
    2 612
    Par défaut
    Et bien, essaye "AddForce" à la place de "Addforce".

    Sur la doc d'Unity, il y a bien Rigidbody.AddForce: http://docs.unity3d.com/ScriptRefere....AddForce.html

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2014
    Messages : 37
    Points : 23
    Points
    23
    Par défaut
    Je viens d'essayé avec Addforce, rien n'as changé .. comme tu viens de me l'indiqué je pense que la fonction doit être différente en fonction des versions.
    J'ai eu ces deux messages d'erreurs.

    Assets/Script/PlayerController.cs(18,17): error CS0619: `UnityEngine.Component.rigidbody' is obsolete: `Property rigidbody has been deprecated. Use GetComponent<Rigidbody>() instead. (UnityUpgradable)'

    Internal error: Recursion detected while updating scripts (assembly index: 4)

    Mise à part cela, sur la doc que tu m'as envoyé je vois qu'il y a plusieurs fonctions pour rigidbody addforce :

    void Start() {
    rb = GetComponent<Rigidbody>();
    }


    void FixedUpdate() {
    rb.AddForce(transform.forward * thrust);
    }

  6. #6
    Membre émérite Avatar de Cirrus Minor
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2014
    Messages
    953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2014
    Messages : 953
    Points : 2 612
    Points
    2 612
    Par défaut
    Citation Envoyé par Arcas64 Voir le message
    ...rien n'as changé ..
    Et bien, si, puisque ce n'est plus le même message d'erreur.

    Par contre, je ne comprends pas ton nouveau message d'erreur: il te demande d'utiliser GetComponent, mais c'est pourtant bien ce que tu fais si on se réfère au code de ton premier message.

    EDIT: Pourrais-tu de nouveau copier le script PlayerController.cs dans ton prochain message ?

  7. #7
    Membre averti
    Avatar de ChipsAlaMenthe
    Homme Profil pro
    Ingénieur en eau chaude et ballon rond
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur en eau chaude et ballon rond
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 394
    Points
    394
    Par défaut
    Devant GetComponent il faut que tu rajouter "gameObject".

    Ca te donnerai quelque chose comme gameObject.GetCompotent.... ^^

  8. #8
    Membre à l'essai
    Homme Profil pro
    Terminal S
    Inscrit en
    Mai 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Terminal S

    Informations forums :
    Inscription : Mai 2013
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    Essaye de déclarer les variables au tout début, comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    using UnityEngine;
    using System.Collections;
     
    public class PlayerController : MonoBehaviour {
     
            float mouveHorizontal;
            float mouveVertical;
     
    	void Update () {
     
    		mouveHorizontal = Input.GetAxis ("Horizontal");
    		mouveVertical = Input.GetAxis ("Vertical");
     
    		Vector3 mouvment = new Vector3 (mouveHorizontal, 0, mouveVertical); 
    		this.gameObject.GetComponent<Rigidbody>().AddForce (transform.forward * mouvement); 
     
    	}
    }
    Voila, fait un copier/coller pour me dire

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2014
    Messages : 37
    Points : 23
    Points
    23
    Par défaut
    Bonsoir tout le monde !

    Merci pour vos réponses. Alors je vais tenté de répondre à tout le monde :

    @ Cirrus Minor : Concernant le script du fichier PlayerController.cs, je suis reparti à 0 .. :/ Je vais copier le nouveau à la fin de ce message.

    @ ChipsAlaMenthe : En suivant ton message et celui de GameOfMax j'ai effectué la modification, j'ai donc mis retapé le script de Chips :

    " using UnityEngine;
    using System.Collections;

    public class PlayerController : MonoBehaviour {

    float mouveHorizontal;
    float mouveVertical;
    // Update is called once per frame
    void Update () {

    mouveHorizontal = Input.GetAxis ("Horizontal");
    mouveVertical = Input.GetAxis ("Vertical");

    Vector3 mouvment = new Vector3 (mouveHorizontal, 0, mouveVertical);
    this.gameObject.GetComponent<Rigidbody> ().AddForce (transform.forward * mouvement);

    }
    } "


    En voulant insérer ce nouveau script j'ai eu 3 msg d'erreurs.

    - " Assets/Script/PlayerController.cs(15,60): error CS1503: Argument `#1' cannot convert `object' expression to type `UnityEngine.Vector3' "

    - " Assets/Script/PlayerController.cs(15,60): error CS1502: The best overloaded method match for `UnityEngine.Rigidbody.AddForce(UnityEngine.Vector3)' has some invalid arguments "

    - " Assets/Script/PlayerController.cs(15,90): error CS0103: The name `mouvement' does not exist in the current context "

  10. #10
    Membre actif
    Profil pro
    Programmeur Audio
    Inscrit en
    Décembre 2010
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur Audio
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 127
    Points : 221
    Points
    221
    Par défaut
    Tu as déclaré ta variable avec le nom mouvment et non mouvement

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2014
    Messages : 37
    Points : 23
    Points
    23
    Par défaut
    Exact, je viens de rectifier le tire .. seulement j'ai encore une autre erreur ..

    " Assets/Script/PlayerController.cs(15,80): error CS0019: Operator `*' cannot be applied to operands of type `UnityEngine.Vector3' and `UnityEngine.Vector3' "

  12. #12
    Membre actif
    Profil pro
    Programmeur Audio
    Inscrit en
    Décembre 2010
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur Audio
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 127
    Points : 221
    Points
    221
    Par défaut
    Essaye ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Vector3 mouvement = new Vector3 (mouveHorizontal, 0, mouveVertical);
    mouvement *= transform.forward;
    this.gameObject.GetComponent<Rigidbody> ().AddForce (mouvement);

  13. #13
    Membre expérimenté
    Avatar de Greg Latiner
    Homme Profil pro
    Développeur JV
    Inscrit en
    Février 2014
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Développeur JV

    Informations forums :
    Inscription : Février 2014
    Messages : 341
    Points : 1 313
    Points
    1 313
    Par défaut
    Hello Arcas64,

    Si tu veux multiplier deux Vector3, tu dois passer par Vector3.Scale()

    Sinon, dans ton cas, tu peux avantageusement écrire simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Vector3 mouvement = new Vector3 (mouveHorizontal*transform.forward.x, 0, mouveVertical*transform.forward.z);
    GetComponent<Rigidbody>().AddForce (mouvement);
    De plus, en guise de conseil, évite les GetComponent() dans les callbacks liés à la boucle de rendu & co, écris plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Rigidbody rigidbody;
    ...
    void Start()
    {
    rigidbody = GetComponent<Rigidbody>();
    }
    ...
    void Update()
    {
    ...
    rigidbody.AddForce(mouvement);
    ...
    }

  14. #14
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par Arcas64 Voir le message
    En voulant insérer ce nouveau script j'ai eu 3 msg d'erreurs.

    - " Assets/Script/PlayerController.cs(15,60): error CS1503: Argument `#1' cannot convert `object' expression to type `UnityEngine.Vector3' "

    - " Assets/Script/PlayerController.cs(15,60): error CS1502: The best overloaded method match for `UnityEngine.Rigidbody.AddForce(UnityEngine.Vector3)' has some invalid arguments "

    - " Assets/Script/PlayerController.cs(15,90): error CS0103: The name `mouvement' does not exist in the current context "
    Je veux pas être méchant, mais bien qu'Unity soit simple à prendre en main, il faut quand même savoir dev un minimum et en particulier savoir lire les messages d'erreurs.

    Si ce genre d'erreurs te pose problème tu devrais mettre Unity de coté quelques temps et te concentrer sur le C# et sur la lecture / compréhension des messages d'erreurs.

Discussions similaires

  1. Simple Programme Recreateur De Script
    Par Syntax-ERROR dans le forum C++
    Réponses: 3
    Dernier message: 20/02/2006, 15h28
  2. [Système] executer un programme via un script php
    Par jeanfrancois dans le forum Langage
    Réponses: 9
    Dernier message: 08/02/2006, 15h51
  3. Réponses: 5
    Dernier message: 16/01/2006, 07h37
  4. erreur sur script de sauvegarde
    Par zouetchou dans le forum Langage
    Réponses: 5
    Dernier message: 08/12/2005, 08h50
  5. [pgAdminIII] Comment ignorer les erreurs de script
    Par Escandil dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 22/07/2005, 12h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo