Jump to content
Unity Insider Forum
Sign in to follow this  
HilfeBitte

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

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;
    }
}
 

Share this post


Link to post
Share on other sites
vor 14 Stunden schrieb Peanut:

Also der Fehler ist in Zeile 15 . Hast du den alle Transforms im Inspector angehängt ? 

Weiß ich leider nicht bin ein Anfänger

hab das aus einem Video 😅 

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

Bitte keine Screenshots von Code -.-

Einfach hier über dem Textfeld auf <> klicken und den Code da einfügen.

Share this post


Link to post
Share on other sites
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;
    }
}

 

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

Hallo

 

Schau dir mal den link an, den ich gepostet habe. Damit kannst du versuchen, die Vermutung von @Saschazu bestätigen oder eben nicht. Du kannst ja immer auf auch gegen Null abfragen oder eben mit Debug.Log arbeiten.

 

Christoph 

Share this post


Link to post
Share on other sites
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);

 

Share this post


Link to post
Share on other sites

Dann hast du einfach mal einen Teil meines Posts ignoriert. Gleich der erste Code ist eine neue Komponente, die du dann auch in dein Projekt tun müsstest.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...