@maxemga

Не могу получить функцию из другого скрипта, почемууу?

У меня есть скрипт где создаются объекты и мне нужно к нему обратиться через Другой скрипт чтоб игрок когда его задевал, с ним происходили какие-то действия (код скину), но когда я пытаюсь обратиться к нему, вылетает следующая ошибка

NullReferenceException: Object reference not set to an instance of an object
RandomSpawn.SpawnRandom () (at Assets/Scripts/RandomSpawn.cs:19)
PlayerController.OnTriggerEnter2D (UnityEngine.Collider2D collision) (at Assets/Scripts/PlayerController.cs:83)


https://jsfiddle.net/35a1dywL/ (вот скрипты по ссылке)

Я погуглил и дело было в том, что я основном классе не инициализировал объект, я это сделал:
RandomSpawn Spawn = new RandomSpawn();
Но эта ошибка все равно вылетатет...
Есть предположения, что нужно инициализовать еще и объекты в этой функции, тоесть Coin и Массив listObjects
Но как это сделать?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RandomSpawn : MonoBehaviour
{
    public GameObject[] listObjects;
    public GameObject Coin;
   

    int random;
    void Start()
    {
        random = Random.Range(0, listObjects.Length);  
        SpawnRandom();  
    }   
    public void SpawnRandom()

    {   
        Instantiate(Coin, listObjects[random].transform.position, Quaternion.identity);
    }
}


Сюды нужно вставить SpawnRandom

RandomSpawn Spawn = new RandomSpawn();
      
    private void OnTriggerEnter2D (Collider2D collision)
    {
    
      

        if (collision.tag.Equals("Coin"))
        {
            HealthBar.fill += 0.2f;
            Destroy(collision.gameObject);
            Spawn.SpawnRandom();
        }
}
  • Вопрос задан
  • 138 просмотров
Решения вопроса 2
DanceM
@DanceM Куратор тега Unity Game Engine
Кто хочет -ищет способ, кто не хочет -ищет причину
Ошибка говорит, что объекта, к которому ваш код обращается, не существует. Пусто там в переменной, не указан:
Instantiate(Coin, listObjects[random].transform.position, Quaternion.identity);

Либо в Coin пусто, либо в listObjects[] объекта где-то нет (или самого listObjects[]). Проверяйте в инспекторе.

Вызовы методов тут не при чём.

PS: объект, для вызова из него метода, надо УКАЗЫВАТЬ, ссылку через переменную, а не СОЗДАВАТЬ новый, с пустыми переменными (что и приводит к ошибке).
рекомендую первым делом прочесть и пройти уроки по этой книге. Сразу многие вещи станут понятны:
Unity в действии. Мультиплатформенная разработка на C#

Книга есть тут, в цифровом виде для ПК, планшетов и телефонов, с удобным поиском. Но можно найти и в других местах:
Google Books: Unity в действии
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы