Страница 1 из 1

Создание перфабов

СообщениеДобавлено: 13 янв 2018, 14:31
molodoy
Привет, у меня код рабочий, все создается, только при каждом создании выдает ошибку, как исправить?

фрагмент кода:
Синтаксис:
Используется csharp
 public Transform[] spawnPoint;
 public Transform parent;
 public void Spawn()
    {
        int rnd = Random.Range(0, spawnPoint.Length);
        Instantiate(enemyPrefab, spawnPoint[rnd].position, spawnPoint[rnd].rotation, parent);
    }

 


Ошибка там где Instantiate

Re: Создание перфабов

СообщениеДобавлено: 13 янв 2018, 17:33
samana
molodoy писал(а):у меня код рабочий... только выдает ошибку


:D

А что за ошибка? В коде не вижу ничего подозрительного, если все переменные конечно назначены.

Re: Создание перфабов

СообщениеДобавлено: 13 янв 2018, 17:42
molodoy
Синтаксис:
Используется csharp
NullReferenceException: Object reference not set to an instance of an object
Spawner.Spawn () (at Assets/Scripts/Spawner.cs:64)
Spawner.Update () (at Assets/Scripts/Spawner.cs:46)

Spawn(); //46 строка функции Апдейт

Instantiate(enemyPrefab, spawnPoint[rnd].position, spawnPoint[rnd].rotation, parent); // 64 Спавн

 


Update:

Синтаксис:
Используется csharp
void Update () {

       
        waveText.text = "Wawe " + pointer + " / " + kstEnemy.Length;
        killstText.text = "Spawned mobs to finish: " + kstEnemy[pointer].ToString();
        curTimeToSpawn -= Time.deltaTime;
        curWaveReloading -= Time.deltaTime;
        if (curWaveReloading <= 0)
        {
            isReloaded = true;
            if (curTimeToSpawn <= 0 && kstEnemy[pointer] > 0 && isReloaded==true )
            {
                Spawn();
                curTimeToSpawn = timeToSpawn;
                kstEnemy[pointer]--;
                if(kstEnemy[pointer]==0)
                {
                    readyPanel.SetActive(true);
                    isReloaded = false;
                   
                }
            }

        }
        }

Re: Создание перфабов

СообщениеДобавлено: 13 янв 2018, 17:50
samana
По-прежнему не вижу ошибки.
А переменной parent точно назначен объект?

Re: Создание перфабов

СообщениеДобавлено: 13 янв 2018, 18:14
molodoy
Да, Canvas, может быть это через перегрузки?

Изображение

Re: Создание перфабов

СообщениеДобавлено: 13 янв 2018, 18:34
samana
Перегрузки точно не причём.
Я попробовал подобный код у себя и ошибок нет. Код был такой же (почти) как и у вас, но суть та же.

Синтаксис:
Используется csharp
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    public Transform parent; // назначил Canvas
    public Transform prefab; // назначил префаб
   
    [ContextMenu("test")]
    private void test()
    {
        Instantiate(prefab, Vector3.zero, Quaternion.identity, parent);
    }
}

Re: Создание перфабов

СообщениеДобавлено: 14 янв 2018, 13:35
Xtir
Instantiate(prefab, Vector3.zero, Quaternion.identity, parent) as GameObject; ?

Re: Создание перфабов

СообщениеДобавлено: 14 янв 2018, 15:10
mastersmit
Xtir писал(а):Instantiate(prefab, Vector3.zero, Quaternion.identity, parent) as GameObject; ?

В данном случае делать приведение не нужно, да и с ошибкой должно быть..

enemyPrefab назначен?

Re: Создание перфабов

СообщениеДобавлено: 14 янв 2018, 15:29
seaman
spawnPoint заполнен?

Re: Создание перфабов

СообщениеДобавлено: 14 янв 2018, 15:51
mastersmit
seaman писал(а):spawnPoint заполнен?

Так если массив будет null, то и была бы ошибка NullReference.. Если бы индекс был больше, чем имеется в массиве, то ошибка OutOfRange.. А тут не назначен какой-то объект для инстанса нового объекта, а это enemyPrefab.. Разве не так?

Re: Создание перфабов

СообщениеДобавлено: 14 янв 2018, 15:54
seaman
НУ во первых у него и есть NullReference. Во вторых не сам массив null, а его члены.
spawnPoint[rnd] == null
А может в массиве вообще ни одного члена нет.

Re: Создание перфабов

СообщениеДобавлено: 14 янв 2018, 16:11
mastersmit
Ёп.. и как я пропустил..