Jump to content
Unity Insider Forum

NullReferenceException: Object reference not set to an instance of an object LevelGenereter.Awake () (at Assets/Player/Block/Scenes/preft/LevelGenereter.cs:15)


HilfeBitte

Recommended Posts

Mir wird immer diese Fehlermeldung Angezeigt aber ich weiß nicht warum 

Würde mich über eine Antwort freuen 

 

 

 

using System.Collections;
using System.Collections.Generic;
using System.Security.Cryptography;
using UnityEngine;

public class LevelGenereter : MonoBehaviour
{
    [SerializeField] private Transform levelPart_Start;
    [SerializeField] private Transform levelPart_1;
  
    private void Awake()
    {
        Transform lastLevelPartTransform;
        lastLevelPartTransform = SpawnLevelPart(levelPart_Start.Find("EndPosition").position);
        lastLevelPartTransform = SpawnLevelPart(lastLevelPartTransform.Find("EndPosition").position);
        lastLevelPartTransform = SpawnLevelPart(lastLevelPartTransform.Find("EndPosition").position);
        lastLevelPartTransform = SpawnLevelPart(lastLevelPartTransform.Find("EndPosition").position);
        lastLevelPartTransform = SpawnLevelPart(lastLevelPartTransform.Find("EndPosition").position);
        lastLevelPartTransform = SpawnLevelPart(lastLevelPartTransform.Find("EndPosition").position);
    }

    private Transform SpawnLevelPart(Vector3 spawnPosition)
    {
        Transform levelPartTransform = Instantiate(levelPart_1, spawnPosition, Quaternion.identity);
        return levelPartTransform;
    }
}
 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Könntest du ein Screenshot von dem Script machen und ein ein Screenshot von dem Gameobject(Mit Inspector) an dem das Script attached ist :)

Also Unity versucht dir zu sagen das in Zeile 15 deines Scriptes eine NullPointerException ausgelöst wird das heißt soviel das dein Script auf irgendetwas zugreifen möchte das nicht zugewiesen wurde.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 13 Stunden schrieb Peanut:

Könntest du ein Screenshot von dem Script machen und ein ein Screenshot von dem Gameobject(Mit Inspector) an dem das Script attached ist :)

Also Unity versucht dir zu sagen das in Zeile 15 deines Scriptes eine NullPointerException ausgelöst wird das heißt soviel das dein Script auf irgendetwas zugreifen möchte das nicht zugewiesen wurde.

hoffe das Ist das was du Brauchst 

Bild.thumb.PNG.6e50507dcdd37c314abc548b8212ebbc.PNG

using System.Collections;
using System.Collections.Generic;
using System.Security.Cryptography;
using UnityEngine;

public class LevelGenereter : MonoBehaviour
{
    [SerializeField] private Transform levelPart_Start;
    [SerializeField] private Transform levelPart_1;
  
    private void Awake()
    {
        Transform lastLevelPartTransform;
        lastLevelPartTransform = SpawnLevelPart(levelPart_Start.Find("EndPosition").position);
        lastLevelPartTransform = SpawnLevelPart(lastLevelPartTransform.Find("EndPosition").position);
        lastLevelPartTransform = SpawnLevelPart(lastLevelPartTransform.Find("EndPosition").position);
        lastLevelPartTransform = SpawnLevelPart(lastLevelPartTransform.Find("EndPosition").position);
        lastLevelPartTransform = SpawnLevelPart(lastLevelPartTransform.Find("EndPosition").position);
        lastLevelPartTransform = SpawnLevelPart(lastLevelPartTransform.Find("EndPosition").position);
    }

    private Transform SpawnLevelPart(Vector3 spawnPosition)
    {
        Transform levelPartTransform = Instantiate(levelPart_1, spawnPosition, Quaternion.identity);
        return levelPartTransform;
    }
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

NullReferenceExceptions treten immer nur auf, wenn links von einem Punkt ein Ausdruck steht, der zu null evaluiert. Zum Beispiel eine Variable, deren Wert null ist oder ein Methodenaufruf, der null zurückgibt. Man kann sich also auf der Suche innerhalb der von der Exception angegeben Zeile auf die Ausdrücke links von einem Punkt beschränken. Zeile 15 ist, wenn ich mich nicht verzählt habe, eine von denen hier:

lastLevelPartTransform = SpawnLevelPart(lastLevelPartTransform.Find("EndPosition").position);

Das heißt, mögliche Kandidaten sind

lastLevelPartTransform

und

lastLevelPartTransform.Find("EndPosition")

Ersteres scheint mir sehr unwahrscheinlich, weil ich dafür keine Möglichkeit sehe, außer dass Instantiate null zurückgibt, was es, soweit ich weiß, nicht kann. Würde man null als Parameter übergeben, fliegt eher eine Exception.

Bleibt also Zweiteres, und das ist schon wahrscheinlicher. Offenbar dein levelPart_1-GameObject kein Kind-Objekt, das "EndPosition" heißt. Dass der Debugger dir hier nicht helfen kann, sondern verzweifelt eine NullReferenceException zur Laufzeit ausspucken muss, ist genau der Grund, warum von diesem Find-Funktionen abzuraten ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 45 Minuten schrieb HilfeBitte:

ok was sollte ich dann am Besten dafür nehmen ?

Z.B. so etwas:

public class LevelGenerationElement : MonoBehaviour
{
  public Transform endPoint;
}

Das packst du auf deine Elemente, und in deinem Generator-Script steht dann auch

[SerializeField] private LevelGenerationElement levelPart_1;

statt

[SerializeField] private Transform levelPart_1;

Der Endpunkt wird im Editor reingezogen, und statt per Namen nach dem Objekt zu suchen, machst du dann

lastLevelPartTransform = SpawnLevelPart(lastLevelPartTransform.endPoint.position);

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...