[RESOLU] NullReferenceException !!! Besoin d'aide SVP !

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
SkillerStudio
Messages : 2
Inscription : 19 Nov 2021 18:28

[RESOLU] NullReferenceException !!! Besoin d'aide SVP !

Message par SkillerStudio » 20 Nov 2021 14:16

Bonjour à tous, c'est mon premier jeux et je ne trouve pas de solutions, en éspérant que vous pourrez m'aider.

Quand je fait une action spécifique dans mon jeu (le jeu fonctionne très bien sans faire cette action), Unity se met en "Pause" et j'ai un NullReferenceExeption. Quand je clique sur "Play" le jeu continue et fonctionne normalement. Je ne sait pas comment régler le problème. Merci pour votre aide :

Message dans ma console :
NullReferenceException: Object reference not set to an instance of an object
GrappleHookHandler.RappelForce (UnityEngine.GameObject hook, System.Int32 dir, System.Single rappelSpeed) (at Assets/GrapHook2D/Scripts/GrappleHookHandler.cs:481)
GrappleHookHandler.Reel (System.Int32 dir) (at Assets/GrapHook2D/Scripts/GrappleHookHandler.cs:148)
PlayerExample.Update () (at Assets/GrapHook2D/Example/PlayerExample.cs:96)





Code (GrappleHookHandler.cs) autours de la ligne 481, la ligne numéro 481 est "playerRB.gravityScale = 0;" :

Code : Tout sélectionner

// Rappel Force, Goes

    /// <summary>
    /// Get pulled into the hook  position
    /// </summary>
    /// <param name="hook">hook gameobject</param>
    /// <param name="dir">1,-1 - go up or down</param>
    /// <param name="rappelSpeed">how quick</param>
    public void RappelForce(GameObject hook, int dir, float rappelSpeed)
    {

        DistanceJoint2D distJoint = hook.GetComponent<DistanceJoint2D>();

        //save state
        bool enforcedDist = distJoint.maxDistanceOnly;


        Rigidbody2D playerRB = distJoint.connectedBody;

        //make it float and move
        playerRB.gravityScale = 0; 
        playerRB.velocity = rappelSpeed * (hook.transform.position - playerRB.transform.position).normalized;


        distJoint.enabled = false;

        playerRB.useFullKinematicContacts = true;


        distJoint.maxDistanceOnly = enforcedDist;
    }





Code (GrappleHookHandler.cs) autours de la ligne 148, la ligne 148 est "RappelDelegate(curHook, dir, reelSpeed);" :

Code : Tout sélectionner

// Public function used to Reeling player
    public void Reel(int dir)
    {

        //only allow if player attached
        if (curHook == null)
            return;

        //set player as travelling
        playerTraveling = true;


        RappelDelegate(curHook, dir, reelSpeed);
    }




Code (GrappleHookHandler.cs) ligne 25, 26 et 27 :

Code : Tout sélectionner

// what function is executed to travel player
    delegate void RappelDeleg(GameObject hook, int dir, float rappelSpeed);
    RappelDeleg RappelDelegate;





Code (PlayerExample.cs) autours de la ligne 96, la ligne numéro 96 est "grappleHandler.Reel(1);" :

Code : Tout sélectionner

void Update()
    {
        //left and right on air
        if (Input.GetAxisRaw("Horizontal") != 0)
        {
            rb.velocity = new Vector2(Input.GetAxisRaw("Horizontal") * movementSpeed, rb.velocity.y);

            //if not hooked, player stops moving when no key is pressed. This allows for gravity to work when object is indeed hooked
        }

        //detect if on floor
        bool grounded = Physics2D.OverlapCircle(transform.position - Vector3.down * groundOffset, groundRadius);


        if (grounded)
        {

            //jump
            if (Input.GetKeyDown(KeyCode.Space))
            {
                rb.AddForce(Vector2.up * jumpForce);
            }

            //left and right on floor
            if (grappleHandler.HookHooked == false)
            {
                rb.velocity = new Vector2(Input.GetAxisRaw("Horizontal") * movementSpeed, rb.velocity.y);
            }

        }

        //Launch Hook example
        if (Input.GetMouseButtonDown(0))
        {

            //Calculate mouse position in the world
            var v3 = Input.mousePosition;
            v3.z = 10.0f;
            v3 = Camera.main.ScreenToWorldPoint(v3);
            Vector2 dir = v3 - transform.position;


            grappleHandler.Throw(v3);
        }

        //Detach Hook
        if (Input.GetMouseButtonDown(1))
        {
            grappleHandler.RemoveHook();
        }


        //Rappelling Down
        if (Input.GetKey(KeyCode.S))
        {
            grappleHandler.Reel(1);
        }
        //Rappel Up, If mode is rappelcontrolled
        else if (Input.GetKey(KeyCode.F))
        {
            //only works if reel mode is controlled
            grappleHandler.Reel(-1);
        }


        float characterVelocity = Mathf.Abs(rb.velocity.x);
        animator.SetFloat("Speed", characterVelocity);
    }



Merci pour votre aide. ;-D
Dernière édition par SkillerStudio le 21 Nov 2021 23:40, édité 1 fois.

Avatar de l’utilisateur
jmhoubre
Messages : 851
Inscription : 05 Oct 2019 22:05

Re: NullReferenceException !!! Besoin d'aide SVP !

Message par jmhoubre » 20 Nov 2021 19:18

La solution qui marche à tous les coups est ici : https://www.youtube.com/watch?v=5irv30-bTJw

SkillerStudio
Messages : 2
Inscription : 19 Nov 2021 18:28

Re: NullReferenceException !!! Besoin d'aide SVP !

Message par SkillerStudio » 21 Nov 2021 23:36

Merci beaucoup j'ai trouvé, c'était une case vide à remplir avec un rigidBody2D dans le component DistanceJoint2D.
Pas facile à trouvé mais j'ai réussi. Merci encore.

Répondre

Revenir vers « Scripting »