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

C# Discussion :

C# problème de script sur unity


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2021
    Messages : 2
    Points : 1
    Points
    1
    Par défaut C# problème de script sur unity
    Bonjour, je décide de me lancer dans le C# dans le but de développer mes propres jeux. Cela dit je n'ai jamais programmé et suite donc un néophyte total (notamment pour ce qui est du vocabulaire). Aussi désolé pour l'intitulé vague.

    Voici mon problème : je suis en train de programmer les déplacements de mon personnage dans un jeu en 2D (je suis sur unity avec un système de Rigidbody 2D et programme sur Visual Studio). Je suivais parfaitement les consignes du tutoriel pour faire cela mais j'arrive à un résultat différent.

    Mon problème est lié au saut, puisque je ne souhaite pas que mon personnage puisse sauter une fois en l'air. J'ai donc créé deux objets que j'ai placé sous mon personnage pour faire une ligne de détection du sol (qui doit être dans la zone du sol pour pouvoir autoriser le saut). Cela dit bien qu'ayant suivi les instructions le script ne fonctionne pas et l'erreur annoncée ne m'aide pas des masses...

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    using UnityEngine;
     
    public class PlayerMovement : MonoBehaviour
    {
    	public float moveSpeed;
    	public float jumpForce;
     
    	public bool isJumping = false;
    	public bool isGrounded = true;
     
    	public Transform groundCheckLeft;
    	public Transform groundCheckRight;
     
    	public Rigidbody2D rb;
    	private Vector3 velocity = Vector3.zero;
     
     
    	void FixedUpdate()
        {
    		isGrounded = Physics2D.OverlapArea(groundCheckLeft.position, groundCheckRight.position);
     
    		float horizontalMovement = Input.GetAxis("Horizontal") * moveSpeed * Time.deltaTime;
     
     
    		if(Input.GetButtonDown("Jump") && isGrounded)
    		{
    			isJumping = true;
    		}
     
    		MovePlayer(horizontalMovement);
        }
     
    	void MovePlayer(float _horizontalMovement)
    	{
    		Vector3 targetVelocity = new Vector2(_horizontalMovement, rb.velocity.y);	
    		rb.velocity = Vector3.SmoothDamp(rb.velocity, targetVelocity, ref velocity, .05f);	
     
    		if(isJumping == true)
    		{
    			rb.AddForce(new Vector2(0f, jumpForce));
    			isJumping = false;
    		}
    	}
    }
    Je vois une différence majeure avec le tuto en question, le terme "Physics2D" (qui est censé faire appel à un composant d'unity de ce que je comprends) n'est pas en vert dans mon script alors qu'il devrait vraisemblablement l'être. Cela dit je ne comprend pas pourquoi. Je pense que c'est le problème principal puisque peu importe mes tentatives pour changer quelque chose c'est toujours cette ligne qui à un problème. Des idées pour régler le problème ou me corriger si je me trompe ?
    Merci

  2. #2
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 639
    Points : 2 148
    Points
    2 148
    Par défaut
    Bonsoir,

    Il aurait été judicieux de poster l'erreur quand même. La seule raison pour laquelle Unity aurait un problème avec Physics2D serait un using manquant mais il est bien là.

    As-tu bien renseigner les références de tes 2 Transform dans l'Inspector ? Car à part ça je vois pas le problème avec ce script.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2021
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Tu as raison, j'aurais du poster le message d'erreur mais il changeait à chaque modification même si la ligne concernée était la même. Et bien vu, je me suis planté dans le renseignement du Transform, la non coloration du Physics2D m'a fait occulter le reste...

    Cela dit même si le script n'affiche plus d'erreur, mon personnage ne peut sauter qu'une fois sur 4, et ce même lorsque isGrounded = true, as-tu une idée sur le pourquoi ?
    N'hésite pas si tu veux des précisions !

  4. #4
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 639
    Points : 2 148
    Points
    2 148
    Par défaut
    Le problème vient du fait que tu vérifies l'appui sur la touche dans FixedUpdate. Je ne sais pas si tu le sais déjà mais FixedUpdate est la méthode ou tu mets en gros tout ce qui concerne la physique. Il te suffit de sortir tout ce qui ne concerne pas la physique et mettre ça dans la méthode Update.

    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
        void Update()
        {
            if (Input.GetButtonDown("Jump") && isGrounded)
            {
                isJumping = true;
            }
        }
     
        void FixedUpdate()
        {
            isGrounded = Physics2D.OverlapArea(groundCheckLeft.position, groundCheckRight.position);
     
            float horizontalMovement = Input.GetAxis("Horizontal") * moveSpeed * Time.deltaTime;
     
            MovePlayer(horizontalMovement);
        }
    FixedUpdate a un fonctionnement très particulier du coup ça explique pourquoi l'appui est détecté ou non.

    Normalement ça devrait régler ton problème.

Discussions similaires

  1. c# script sur unity
    Par Praticks dans le forum Unity
    Réponses: 0
    Dernier message: 26/04/2015, 11h36
  2. Problème dans un script sur un if
    Par mcbrett dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 02/02/2010, 14h24
  3. Problème de script VB pour comparateurs sur plusieurs feuille
    Par Kerberos69 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/03/2009, 13h49
  4. [SQL] Problème avec script de pagination et requête sql sur deux tables
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/06/2006, 14h06
  5. [MySQL] Problème après le transfert de mon script sur internet
    Par LordBob dans le forum PHP & Base de données
    Réponses: 22
    Dernier message: 26/01/2006, 21h02

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