[DB-AL]Problème RigidBody introuvable

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
maliimaloo
Messages : 45
Inscription : 28 Sep 2017 19:06

[DB-AL]Problème RigidBody introuvable

Message par maliimaloo » 15 Jan 2018 18:47

Bonjour,

Depuis peut j'ai une erreur qui me survient qui est :

erreur: NullReferenceException: Object reference not set to an instance of an object
JouerController2d.Update () (at Assets/Scripts/Monde/ControllerPlayer-Data/JouerController2d.cs:136)

Si je comprend bien mon problème vient que mon objet référencé n'as pas d'instance, mais c'est la que vient le problème, j'ai regarder, encore et encore sans trouver la solution, donc je me tourne vers vous, peut être que la réponse est sous mon nez mais que je cherche trop compliquer, c'est pour sa que j'aimerais juste une petite aide :p

Je vous met une photo de mon Player:
https://image.noelshack.com/fichiers/20 ... -titre.png

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using HealthBarAPI;

public class JouerController2d : MonoBehaviour
{
    #region Declaration_LooseLifeTomber
    [Header("LooseLifeTomber")]
    public Transform destination;

    public int perteVieTomber;

    [Header("PanelDead")]
    public GameObject panelDead;
    #endregion

    #region Declaration_LettreBonusPrise
    [Header("LettreBonus")]
    public SpriteRenderer B;
    public SpriteRenderer O;
    public SpriteRenderer N;
    public SpriteRenderer U;
    public SpriteRenderer S;

    private bool lettreB = false;
    private bool lettreO = false;
    private bool lettreN = false;
    private bool lettreU = false;
    private bool lettreS = false;

    public int nbChapitre;

    public Color prise = new Color();
    #endregion

    #region Declaration_PanelFin
    [Header("PanelFin")]
    public GameObject panelFin;
    #endregion

    #region Declaration_HealBar
    [Header("HealthBar")]
    public HealBarAPI barreDeVie;
    public int barreDeVieMax;
    #endregion

    #region Declaration_Run
    [Header("Declaration Run")]
    public float moveSpeed;
    public float jumpForce;

    private bool _jump = true;

    private Rigidbody2D myRigidbody;

    private Animator jumping;
    #endregion

    #region Declaration_Ground
    [Header("Declaration Ground")]
    public bool ground;
    public LayerMask whatIsGround;

    private Collider2D myCollider;
    #endregion

    #region Declaration_Score+Piece
    [Header("Declaration Score+Piece")]
    public Text _moneyGame;
    public static int _moneyRecolter;
    #endregion

    #region Declaration_Timer
    [Header("Timer")]
    public Text timerText;
    private float startTime;
    private bool fin = false;
    #endregion

    #region Function Unity
    void Start()
    {
        #region Instansiation_Timer
        startTime = Time.time;
        #endregion

        #region Instansiation_HealthBar
        barreDeVie.max = barreDeVieMax;
        barreDeVie.valeur = barreDeVieMax;
        #endregion

        #region Instansiation_Run
        myCollider = GetComponent<Collider2D>();

        jumping = GetComponent<Animator>();
        #endregion

        #region Instansiation_Money
        _moneyRecolter = 0;
        #endregion
    }

    void Update()
    {
        #region Fonctionalité_timer
        if (fin /*|| mort*/)
            return;

        float t = Time.time - startTime;
        string minutes = ((int)t / 60).ToString();
        string seconds = (t % 60).ToString("f2");

        timerText.text = minutes + ":" + seconds;
        #endregion

        /*#Region Fonctionalité_HealthBar
        if (Input.GetKeyDown(KeyCode.KeypadMinus))
        {
            barreDeVie.valeur -= 10;
        }
        else if (Input.GetKeyDown(KeyCode.KeypadPlus))
        {
            barreDeVie.valeur += 10;
        }
        #endregion*/

        #region Fonctionalité_Ground
        ground = Physics2D.IsTouchingLayers(myCollider, whatIsGround);
        #endregion

        #region Fonctionalité_Run
        if (_jump)
        {
            myRigidbody.GetComponent<Rigidbody2D>().velocity = new Vector2(moveSpeed, myRigidbody.velocity.y);
        }
        else
        {
            _jump = true;
            myRigidbody.GetComponent<Rigidbody2D>().velocity = new Vector2(myRigidbody.velocity.x, jumpForce);
            Invoke("StopSauter", 0.5f);
        }
        #endregion

        #region Fonctionalité_Money
        _moneyGame.text = "" + _moneyRecolter;
        #endregion
    }
    #endregion

    #region Fonction_Run/Animation
    void StopSauter()
    {
        jumping.SetBool("jump", false);
    }
    public void ActivationJump()
    {
        if (ground)
        {
            _jump = false;
            jumping.SetBool("jump", true);
        }
    }
    #endregion

    #region Fonction_PanelFin
    private void PanelFin()
    {
        panelFin.SetActive(true);
    }
    #endregion

    #region Fonction_OnTriggerEnter
    private void OnTriggerEnter2D(Collider2D go)
    {
        #region Fonctionalité_LooseLifeTombetr
        if (go.tag.Equals("ZoneDead"))
        {
            if (barreDeVie.valeur != 0)
            {
                barreDeVie.valeur -= perteVieTomber;
                transform.position = destination.position;

                if (barreDeVie.valeur == 0)
                {
                    panelFin.SetActive(true);
                }
            }
        }
        #endregion

        #region Fonctionalité_Lettrebonus
        if (go.tag.Equals("B"))
        {
            if (DataController.allLoadedBonus.BonusNiveaux[nbChapitre - 1].b == false)
            {
                Debug.Log("B");
                lettreB = true;
                B.color = prise;
            }
        }
        if (go.tag.Equals("O"))
        {
            if (DataController.allLoadedBonus.BonusNiveaux[nbChapitre - 1].o == false)
            {
                lettreO = true;
                O.color = prise;
            }
        }
        if (go.tag.Equals("N"))
        {
            if (DataController.allLoadedBonus.BonusNiveaux[nbChapitre - 1].n == false)
            {
                lettreN = true;
                N.color = prise;
            }
        }
        if (go.tag.Equals("U"))
        {
            if (DataController.allLoadedBonus.BonusNiveaux[nbChapitre - 1].u == false)
            {
                lettreU = true;
                U.color = prise;
            }
        }
        if (go.tag.Equals("S"))
        {
            if (DataController.allLoadedBonus.BonusNiveaux[nbChapitre - 1].s == false)
            {
                lettreS = true;
                S.color = prise;
            }
        }
        #endregion

        #region Fonctionalité_Score+Piece
        if (go.tag.Equals("Piece"))
        {
            Destroy(go.gameObject);
            _moneyRecolter++;
        }
        #endregion

        #region Fonctionalité_FinNiveau
        if (go.tag.Equals("FinNiveau"))
        {
            PanelFin();
            Time.timeScale = 0;

            if (lettreB == true)
            {
                DataController.allLoadedBonus.BonusNiveaux[nbChapitre - 1].b = true;
                DataController.SaveGameBonus();
            }

            if (lettreO == true)
            {
                DataController.allLoadedBonus.BonusNiveaux[nbChapitre - 1].o = true;
                DataController.SaveGameBonus();
            }

            if (lettreN == true)
            {
                DataController.allLoadedBonus.BonusNiveaux[nbChapitre - 1].n = true;
                DataController.SaveGameBonus();
            }

            if (lettreU == true)
            {
                DataController.allLoadedBonus.BonusNiveaux[nbChapitre - 1].u = true;
                DataController.SaveGameBonus();
            }

            if (lettreS == true)
            {
                DataController.allLoadedBonus.BonusNiveaux[nbChapitre - 1].s = true;
                DataController.SaveGameBonus();
            }
        }
        #endregion
    }
    #endregion
}

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

Re: [DB-AL]Problème RigidBody introuvable

Message par Max » 15 Jan 2018 19:00

Bonsoir,

dans ton code, tu écris:

Code : Tout sélectionner

 myRigidbody.GetComponent<Rigidbody2D>().velocity = ...
myRigidbody est définis mais n'est jamais initialisé. Et tu cherches à récupérer le composant d'un composant.
Tu devrais écrire par exemple dans ta fonction Start():

Code : Tout sélectionner

myRigidbody = GetComponent<Rigidbody2D>();
puis dans la suite de ton code, faire appel à la référence du composant

Code : Tout sélectionner

myRigidbody.velocity =....
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

maliimaloo
Messages : 45
Inscription : 28 Sep 2017 19:06

Re: [DB-AL]Problème RigidBody introuvable

Message par maliimaloo » 15 Jan 2018 19:18

Je modifie mon message: je me suis tromper, je viens de faire comme tu mas dit de faire est cela fonctionne, bizzare car j'avais essayer est cela ne fonctionnais pas, après j'ai peut être fait une faute de frappe quand j'ai marquer myRigidBody au lieu de myRigidbody.

je te remercie du coup :p

Répondre

Revenir vers « (C#) CSharp »