Jump to content
Unity Insider Forum

Fehler bei automatischen Spawns von Prefab´s


Zerbo93
 Share

Recommended Posts

Guten Abend,

ich habe folgendes Problem. Ich lasse per Spawner 200 mal den selben Gegner spawnen. Jeder Gegner soll natürlich eigene Werte haben. Diese Werte sollen per Zufallsgenerator ausgewürfelt werden. Leider scheint er ein Problem damit zu haben, dass ich dasselbe Script auf so viele Objekte verwende. Auf jeden fall, wirft er mir folgende Fehlermeldung aus:

"NullReferenceException: Object reference not set to an instance of an object
ZombieScript.Start () (at Assets/Scripts/ZombieScript.cs:23)"

ZombieScript.cs (Script in dem der Fehler auftaucht)

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ZombieScript : MonoBehaviour
{
    public GameObject Zombie;
    private GameObject Gamecontroller;
    private int Leben = 1;
    private int Stärke = 0;
    private int Verteidigung = 0;
    private long expLoot = 0;
    private long GoldLoot = 0;
    private System.Random Zufall;
    private bool Death = false;
    private float DespawnTimer = 30.0f;
    void Start()
    {
        Gamecontroller = GameObject.Find("GameController");
        Zombie.GetComponent<Animator>().Play("Idle");

        Leben = Zufall.Next(80, 100);  //Zeile in der der Fehler gemeldet wird!
        Stärke = Zufall.Next(6, 9);
        Verteidigung = Zufall.Next(3, 5);

        expLoot = Zufall.Next(10, 20);
        GoldLoot = Zufall.Next(20, 40);
    }

    // Update is called once per frame
    void Update()
    {
        if(Death == true)
        {
            DespawnTimer = DespawnTimer - (1 * Time.deltaTime);
            int Despawn = Convert.ToInt32(DespawnTimer);

            if(Despawn <= 0)
            {
                DestroyImmediate(Zombie);
            }
        }
    }

    void besiegt()
    {
        if(Leben <= 0)
        {
            Zombie.GetComponent<Animator>().Play("Death");

            Gamecontroller.SendMessage("ZombieGold", GoldLoot, SendMessageOptions.DontRequireReceiver);
            Gamecontroller.SendMessage("ZombieExp", expLoot, SendMessageOptions.DontRequireReceiver);

            Death = true;
        }
    }
}

Spawner.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Spawner : MonoBehaviour
{
    public GameObject TestCube;
    public GameObject[] Mob;
    private int MobAnzahl = 0;
    private int MaxMobAnzahl = 200;
    private float MaxAchseX = 955.311f;
    private bool Abbruch = false;
    private float MaxAchseZ = 1945.473f;
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if(MobAnzahl < MaxMobAnzahl)
        {
            MobSpawn();
        }
    }

    void MobSpawn()
    {
        Vector3 pos = new Vector3();
        pos.x = Random.Range(-931.2954f, MaxAchseX);
        pos.y = 2.0f;
        pos.z = Random.Range(54.23655f, MaxAchseZ);

        Instantiate(TestCube, pos, Quaternion.identity);
        
        if(Abbruch == false)
        {
            Instantiate(Mob[Random.Range(0, Mob.Length)], pos, Quaternion.identity);

            MobAnzahl++;
        }
        else
        {
            Abbruch = false;
        }
    }

    public int Spawnabbruch(int wahl)
    {
        Abbruch = true;

        return wahl;
    }
}

Ich bin noch Anfänger und weiß daher nicht, wie ich das Problem angehen soll. Daher bitte ich hier um Hilfe.

Freundliche Grüße

Link to comment
Share on other sites

Du hast dein System.Random nicht initialisiert. Die Variable "Zufall" kann ein Objekt vom Typ System.Random referenzieren, das du dann benutzen kannst, aber da ist kein Objekt und die Variable zeigt auf nichts. Ist als ob du morgens mit deinem Auto zur Arbeit fahren willst, aber du besitzt gar keins.

Du kannst in Start ein Objekt erzeugen (am besten bevor du es dann benutzt ;)):

Zufall = new System.Random();

 

  • Like 1
Link to comment
Share on other sites

vor 6 Minuten schrieb Sascha:

Du hast dein System.Random nicht initialisiert. Die Variable "Zufall" kann ein Objekt vom Typ System.Random referenzieren, das du dann benutzen kannst, aber da ist kein Objekt und die Variable zeigt auf nichts. Ist als ob du morgens mit deinem Auto zur Arbeit fahren willst, aber du besitzt gar keins.

Du kannst in Start ein Objekt erzeugen (am besten bevor du es dann benutzt ;)):


Zufall = new System.Random();

 

Oh man! Danke! Was für ein dummer Fehler :D

Link to comment
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...
 Share

×
×
  • Create New...