[RÉSOLU]NullReferenceExeption

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
jlap537
Messages : 39
Inscription : 01 Mai 2024 12:43
Localisation : saint-saturnin-sur-Loire (49)

[RÉSOLU]NullReferenceExeption

Message par jlap537 » 04 Mai 2024 17:21

J'ai compilé ces deux scripts si dessous et j'ai reçu un trèèèèèèès looonnng message d'erreur qui me donne des hyperlien vers des scripts inexistants et qui me dit que " La référence d'objet n'est pas définie sur une instance d'objet" et je ne sais pas comment régler cette erreur.(Remarque: avant que je compile les deux scripts, dans l'inspecteur, c'était marqué missing (mono script). Je vous est mis une image
Capture d’écran 2024-05-04 à 17.17.19.png
les deux scripts.
Capture d’écran 2024-05-04 à 17.17.19.png (28.73 Kio) Consulté 738 fois


Pouvez-vous m'aider ?


Voici la première partie du message d'erreur:

UnityEngine.UIElements.EventCallbackFunctor`1[TEventType].Invoke (UnityEngine.UIElements.EventBase evt, UnityEngine.UIElements.PropagationPhase propagationPhase) (at /Users/bokken/build/output/unity/unity/ModuleOverrides/com.unity.ui/Core/Events/EventCallback.cs:79)
UnityEngine.UIElements.EventCallbackRegistry.InvokeCallbacks (UnityEngine.UIElements.EventBase evt, UnityEngine.UIElements.PropagationPhase propagationPhase) (at /Users/bokken/build/output/unity/unity/ModuleOverrides/com.unity.ui/Core/Events/EventCallbackRegistry.cs:353)
UnityEngine.UIElements.CallbackEventHandler.HandleEvent (UnityEngine.UIElements.EventBase evt) (at /Users/bokken/build/output/unity/unity/ModuleOverrides/com.unity.ui/Core/Events/EventHandler.cs:259)
UnityEngine.UIElements.CallbackEventHandler.HandleEventAtCurrentTargetAndPhase (UnityEngine.UIElements.EventBase evt) (at /Users/bokken/build/output/unity/unity/ModuleOverrides/com.unity.ui/Core/Events/EventHandler.cs:189)
UnityEngine.UIElements.CallbackEventHandler.UnityEngine.UIElements.IEventHandler.HandleEvent (UnityEngine.UIElements.EventBase evt) (at /Users/bokken/build/output/unity/unity/ModuleOverrides/com.unity.ui/Core/Events/EventHandler.cs:206)
UnityEngine.UIElements.EventDispatchUtilities.HandleEventAcrossPropagationPath (UnityEngine.UIElements.EventBase evt) (at /Users/bokken/build/output/unity/unity/ModuleOverrides/com.unity.ui/Core/Events/IEventDispatchingStrategy.cs:143)
UnityEngine.UIElements.EventDispatchUtilities.PropagateEvent (UnityEngine.UIElements.EventBase evt) (at /Users/bokken/build/output/unity/unity/ModuleOverrides/com.unity.ui/Core/Events/IEventDispatchingStrategy.cs:90)
UnityEngine.UIElements.DefaultDispatchingStrategy.DispatchEvent (UnityEngine.UIElements.EventBase evt, UnityEngine.UIElements.IPanel panel) (at /Users/bokken/build/output/unity/unity/ModuleOverrides/com.unity.ui/Core/Events/DefaultDispatchingStrategy.cs:15)
UnityEngine.UIElements.EventDispatcher.ApplyDispatchingStrategies (UnityEngine.UIElements.EventBase evt, UnityEngine.UIElements.IPanel panel, System.Boolean imguiEventIsInitiallyUsed) (at /Users/bokken/build/output/unity/unity/ModuleOverrides/com.unity.ui/Core/EventDispatcher.cs:422)
UnityEngine.UIElements.EventDispatcher.ProcessEvent (UnityEngine.UIElements.EventBase evt, UnityEngine.UIElements.IPanel panel) (at /Users/bokken/build/output/unity/unity/ModuleOverrides/com.unity.ui/Core/EventDispatcher.cs:363

Et voici les deux scripts:

Code : Tout sélectionner

using System;
using UnityEngine;

[RequireComponent(typeof(PlayerMotor))]
public class PlayerController : MonoBehaviour
{
    [SerializeField]
    private float speed;

    private PlayerMotor motor;

    private void Awake()
    {
        motor = GetComponent<PlayerMotor>();
    }
    private void Start()
    {
        motor.Init();
        {
            private void Udapte()
            {
                // Calculer la vélocité (vitesse) du mouvement de notre joueur
                float xMov = Input.GetAxisRaw("Horizontal");
                float zMov = Input.GetAxisRaw("Vertical");

                Vector3 moveHorizontal = transform.right * xMov;
                Vector3 moveVertical = transform.forward * zMov;

                Vector3 velocity = (moveHorizontal + moveVertical).normalized * speed;


                //On calcule la rotation du joueur en un vector3
                float yRot = Input.GetAxis("Mouse X");
        }   }
     private class PlayerMotor
     { 
        internal void Init()
        {
            throw new NotImplementedException();
        }

        internal void Move(Vector3 velocity)
        {
            throw new NotImplementedException();
        }
     }
}

Code : Tout sélectionner

using System;
using UnityEngine;

[RequireComponent(typeof(Rigidbody))]
public class PlayerMotor : MonoBehaviour
{
    private Vector3 velocity;
    private Rigidbody rb;

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

    public void Move(Vector3 _velocity)
    {
        velocity = _velocity;
    }

    private void FixedUdapte()
    {
        PerformMovement();
    }

    private void PerformMovement()
    {
        if(velocity != Vector3.zero)
        {
            rb.MovePosition(rb.position + velocity * Time.fixedDeltaTime);
        }


    }
}
/code]
Dernière édition par jlap537 le 10 Mai 2024 15:25, édité 3 fois.
"Avant Internet, on acceptait tout le temps un petit cookie sucré. Maintenant, vaut mieux ne pas les accepter, car ils riquent d'avoir un gout amère..."

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

Re: NullReferenceExeption

Message par Max » 04 Mai 2024 17:58

Bonjour,

niveau script, il faudrait que tu reprennes un petit peu les bases avec Unity et le C#.
En particulier l'organisation des scripts MonoBehaviour.

Ton script PlayerController devrait plutôt se corriger un peu comme:

Code : Tout sélectionner

using UnityEngine;

[RequireComponent(typeof(PlayerMotor))]
public class PlayerController : MonoBehaviour
{
    [SerializeField]
    private float speed;

    private PlayerMotor motor;

    private void Awake()
    {
        motor = GetComponent<PlayerMotor>();
    }

 
    private void Udapte()
    {
        // Calculer la vélocité (vitesse) du mouvement de notre joueur
        float xMov = Input.GetAxisRaw("Horizontal");
        float zMov = Input.GetAxisRaw("Vertical");

        Vector3 moveHorizontal = transform.right * xMov;
        Vector3 moveVertical = transform.forward * zMov;

        Vector3 velocity = (moveHorizontal + moveVertical).normalized * speed;


        //On calcule la rotation du joueur en un vector3
        float yRot = Input.GetAxis("Mouse X");
    }

}


et PlayerMotor

Code : Tout sélectionner

using UnityEngine;

[RequireComponent(typeof(Rigidbody))]
public class PlayerMotor : MonoBehaviour
{
    private Vector3 velocity;
    private Rigidbody rb;

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

    public void Move(Vector3 _velocity)
    {
        velocity = _velocity;
    }

    private void FixedUdapte()
    {
        PerformMovement();
    }

    private void PerformMovement()
    {
        if (velocity != Vector3.zero)
        {
            rb.MovePosition(rb.position + velocity * Time.fixedDeltaTime);
        }

    }
}
Ce qui d'ailleurs rend inutile la référence à PlayerMotor dans PlayerController.
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

jlap537
Messages : 39
Inscription : 01 Mai 2024 12:43
Localisation : saint-saturnin-sur-Loire (49)

Re: NullReferenceExeption

Message par jlap537 » 04 Mai 2024 18:08

Merci beaucoup d'avoir entièrement corrigé mes deux scripts et réglé mon problème.
"Avant Internet, on acceptait tout le temps un petit cookie sucré. Maintenant, vaut mieux ne pas les accepter, car ils riquent d'avoir un gout amère..."

Winuty
Messages : 21
Inscription : 18 Oct 2023 00:58

Re: [RÉSOLU] NullReferenceExeption

Message par Winuty » 05 Mai 2024 03:41

Sinon pour l'erreur sur ta capture d’écran:

Le premier script n'est pas sélectionner.

Le deuxième est soit effacer de tes fichiers Project ou alors tu as déplacer ton projet et il ne trouve plus le chemin pour lire le script.
Si ton script existe encore, déplace le dans la case pour corriger l'erreur.

jlap537
Messages : 39
Inscription : 01 Mai 2024 12:43
Localisation : saint-saturnin-sur-Loire (49)

Re: [RÉSOLU] NullReferenceExeption

Message par jlap537 » 05 Mai 2024 09:06

Ok. Donc il faut que prenne directement le script dans mes fichiers et que je le mette dans la case du script. Mais pourtant, j'arrive a ouvrir directement mes scripts a partir de mon projet.Et c'est quand je clique sur la case d'un des deux scripts et que j'en "associe" un que ça me donne cette erreur. Mais je vais quand même essayer ce que tu ma dit.
"Avant Internet, on acceptait tout le temps un petit cookie sucré. Maintenant, vaut mieux ne pas les accepter, car ils riquent d'avoir un gout amère..."

Winuty
Messages : 21
Inscription : 18 Oct 2023 00:58

Re: [RÉSOLU] NullReferenceExeption

Message par Winuty » 05 Mai 2024 11:28

.
Dernière édition par Winuty le 09 Mai 2024 01:52, édité 1 fois.

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

Re: [RÉSOLU] NullReferenceExeption

Message par Max » 05 Mai 2024 11:50

Bonjour,

quelques petites précisions qui pourraient éclaircir certaines choses.

La plupart du temps (et c'était le cas ici visiblement), quand tes scripts n'apparaissent plus au niveau de l'inspector
et qu'il te sort des liens "none", c'est d'abord dû au fait que tu as des erreurs sur au moins un des scripts qui te servent
de component. Une fois les erreurs corrigées, tu retrouveras l'ensemble des components scripts de nouveau affichés
dans ton inspector sur les GameObjects.

Concernant le changement de place de fichiers (comme les scripts) dans ta partie Project au sein de l'éditeur
(Unity ouvert donc), ce n'est pas un problème. Même si tu déplaces un script d'un répertoire vers un autre,
Unity gardera toujours le lien et cela sera transparent au niveau de la construction du projet.
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

Winuty
Messages : 21
Inscription : 18 Oct 2023 00:58

Re: [RÉSOLU] NullReferenceExeption

Message par Winuty » 05 Mai 2024 12:19

Concernant le changement de place de fichiers (comme les scripts) dans ta partie Project au sein de l'éditeur
(Unity ouvert donc), ce n'est pas un problème. Même si tu déplaces un script d'un répertoire vers un autre,
Unity gardera toujours le lien et cela sera transparent au niveau de la construction du projet.
Exact, il reste lié si Unity est ouvert.
Par contre, il faut éviter de les modifier/déplacer en dehors d'Unity car c'est là qu'il perd sa cible, vu qu'il n'est pas au courant des modifications en son absence. :hehe:

jlap537
Messages : 39
Inscription : 01 Mai 2024 12:43
Localisation : saint-saturnin-sur-Loire (49)

Re: [RÉSOLU] NullReferenceExeption

Message par jlap537 » 05 Mai 2024 14:05

Winuty a écrit :
05 Mai 2024 11:28
Quand tu changes le nom de ton projet (quand Unity n'est pas en route) ou de version, sela change le chemin de son emplacement et du coup au démarrage il ne le trouve plus.
J'avais justement changé ma version d'Unity en passant de 2022.23f à 2022.26f
"Avant Internet, on acceptait tout le temps un petit cookie sucré. Maintenant, vaut mieux ne pas les accepter, car ils riquent d'avoir un gout amère..."

jlap537
Messages : 39
Inscription : 01 Mai 2024 12:43
Localisation : saint-saturnin-sur-Loire (49)

Re: [RÉSOLU] NullReferenceExeption

Message par jlap537 » 05 Mai 2024 14:10

Max a écrit :
05 Mai 2024 11:50
La plupart du temps (et c'était le cas ici visiblement), quand tes scripts n'apparaissent plus au niveau de l'inspector
et qu'il te sort des liens "none", c'est d'abord dû au fait que tu as des erreurs sur au moins un des scripts qui te servent
de component. Une fois les erreurs corrigées, tu retrouveras l'ensemble des components scripts de nouveau affichés
dans ton inspector sur les GameObjects.
Et c'est justement après que tu es corrigé mes erreurs que tout était rentré dans l'ordre.
"Avant Internet, on acceptait tout le temps un petit cookie sucré. Maintenant, vaut mieux ne pas les accepter, car ils riquent d'avoir un gout amère..."

Répondre

Revenir vers « Scripting »