Привет всем , я делаю игру (Ранер) и хочу чтобы у меня была бесконечная дорога и что если персонаж уходит далеко то дорога сзади него уничтожаеться . Скрипт у меня уже есть , но при запуски (Тесте) игры выходит ошибка MissingReferenceException: The object of type 'GameObject' has been destroyed but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object. (Это моя первая игра так что не судите строго если это очень легко решить :) )
коды :
первый
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Road : MonoBehaviour
{
public List<GameObject> blocks; //Коллекция всех дорожных блоков
public GameObject player; //Игрок
public GameObject roadPrefab; //Префаб дорожного блока
public GameObject carPrefab; //Префаб машины NPC
public GameObject coinPrefab; //Префаб монеты
private System.Random rand = new System.Random(); //Генератор случайных чисел
void Update()
{
float x = player.GetComponent<Move>().rb.position.x; //Получение положения игрока
var last = blocks[blocks.Count - 1]; //Номер дорожного блока, который дальше всех от игрока
if (x > last.transform.position.x - 24.69f * 10f) //Если игрок подъехал к последнему блоку ближе, чем на 10 блоков
{
//Инстанцирование нового блока
var block = Instantiate(roadPrefab, new Vector3(last.transform.position.x + 24.69f, last.transform.position.y, last.transform.position.z), Quaternion.identity);
block.transform.SetParent(gameObject.transform); //Перемещение блока в объект Road
blocks.Add(block); //Добавление блока в коллекцию
}
foreach (GameObject block in blocks)
{
bool fetched = block.GetComponent<RoadBlock>().Fetch(x); //Проверка, проехал ли игрок этот блок
if (fetched) //Если проехал
{
blocks.Remove(block); //Удаление блока из коллекции
block.GetComponent<RoadBlock>().Delete(); //Удаление блока со сцены
}
}
}
}
второй
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RoadBlock : MonoBehaviour
{
public bool Fetch(float x) //Проверка, проехала ли машина игрока этот блок на достаточное расстояние
{
bool result = false;
if (x > transform.position.x + 10f)
{
result = true; //Если машина проехала на 10f от блока, то возвращается true
}
return result;
}
public void Delete()
{
Destroy(gameObject); //Удаление блока
}
}