Ссылка на объект не установлена ​​для экземпляра объекта C# Unity с использованием триггера Collider2D - PullRequest
0 голосов
/ 25 апреля 2020

Просто интересно, может ли кто-нибудь помочь мне с небольшой проблемой в моем коде. В строке 60 есть ошибка, которая, по сути, говорит мне, что то, на что я ссылаюсь, не существует. Насколько мне известно, это так, но я очень новичок в Unity. Я пытаюсь создать генератор случайных подземелий для университетского проекта. Ниже приведены мои классы:

using System.Collections.Generic;
using UnityEngine;

public class RoomSpawner : MonoBehaviour
{
    public int openingDirection;
    //1 = need bottom door
    //2 = need top door
    //3 = need left door
    //4 = need right door
    //So for a room with a door on the right, you will type 3, as a left door is needed in the next room to connect the two rooms. 

    private RoomTemplates templates;
    private int rand;
    private bool spawned = false;
    private Destroyer destroyer;


    void Start()
    {
        templates = GameObject.FindGameObjectWithTag("Rooms").GetComponent<RoomTemplates>();
        Invoke("Spawn", 0.1f);
    }

    void Spawn()
    {
        if (spawned == false)
        {
            rand = Random.Range(0, templates.bottomRooms.Length);
            if (openingDirection == 1)
            {
                //Need to spawn room with BOTTOM door
                Instantiate(templates.bottomRooms[rand], transform.position, templates.bottomRooms[rand].transform.rotation);
            }
            else if (openingDirection == 2)
            {
                //Need to spawn room with TOP door
                Instantiate(templates.topRooms[rand], transform.position, templates.topRooms[rand].transform.rotation);
            }
            else if (openingDirection == 3)
            {
                //Need to spawn room with LEFT door
                Instantiate(templates.leftRooms[rand], transform.position, templates.leftRooms[rand].transform.rotation);
            }
            else if (openingDirection == 4)
            {
                //Need to spawn room with RIGHT door
                Instantiate(templates.rightRooms[rand], transform.position, templates.rightRooms[rand].transform.rotation);
            }
            spawned = true;
        }

    }

    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.CompareTag("Spawn Point"))
        {
            if (other.GetComponent<RoomSpawner>().spawned == false && spawned == false)
            {
                Instantiate(templates.closedRoom, transform.position, Quaternion.identity);

            }
            spawned = true;
        }
    }
}
using System.Collections.Generic;
using UnityEngine;

public class Destroyer : MonoBehaviour
{

    void OnTriggerEnter2D(Collider2D other)
    {
        Destroy(other.gameObject);

    }
}

Эта проблема вызывает блокировку входной комнаты закрытыми комнатами, которые предназначены для блокировки выходов в вид сцены. Я следовал руководству BlackThornProd по этому вопросу, но не могу понять, что я сделал неправильно. Здесь - ссылка на учебник. Большое спасибо!

РЕДАКТИРОВАТЬ Здесь я включил класс RoomTemplates, если это поможет. Огромное спасибо!

using System.Collections.Generic;
using UnityEngine;

public class RoomTemplates : MonoBehaviour
{
    public GameObject[] bottomRooms;
    public GameObject[] topRooms;
    public GameObject[] leftRooms;
    public GameObject[] rightRooms;

    public GameObject closedRoom;
}

1 Ответ

0 голосов
/ 25 апреля 2020

Являются ли шаблоны игровым объектом? Если это так, я думаю, вы можете попробовать что-то вроде этого:

private GameObject templates;

void Start()
    {
        templates = GameObject.FindGameObjectWithTag("Rooms");
        RoomTemplates Templates = templates.GetComponent<RoomTemplates>();
        Invoke("Spawn", 0.1f);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...