GetComponent к масиву объектов

Программирование на Юнити.

GetComponent к масиву объектов

Сообщение Yellow12Phoenix 30 апр 2021, 18:57

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

IndexOutOfRangeException: Index was outside the bounds of the array.
Enemy1.Start () (at Assets/Scripts/Enemy1.cs:16)

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

public class Enemy1 : MonoBehaviour
{

    public GameController Controller;
    public GameObject[] Spaw ;

   

    // Start is called before the first frame update
    void Start()
    {
        Spaw[4].gameObject.GetComponent<Spawm>().quantityNOW ++;
    }
 
Yellow12Phoenix
UNец
 
Сообщения: 31
Зарегистрирован: 17 авг 2020, 20:44

Re: GetComponent к масиву объектов

Сообщение Alkos26Rus 30 апр 2021, 19:17

Размер массива меньше чем номер элемента на котрый ты ссылаешся Spaw[4], используй другое число вместо 4
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: GetComponent к масиву объектов

Сообщение Yellow12Phoenix 30 апр 2021, 19:22

Alkos26Rus писал(а):Размер массива меньше чем номер элемента на котрый ты ссылаешся Spaw[4], используй другое число вместо 4

Не подходит, попробовал 5 и 10, та же ошибка, а объектов в массиве также 4
Yellow12Phoenix
UNец
 
Сообщения: 31
Зарегистрирован: 17 авг 2020, 20:44

Re: GetComponent к масиву объектов

Сообщение Yellow12Phoenix 30 апр 2021, 19:28

этот скрипт на появление противника, но немного фиговый(не все объекты уничтожаются, некоторые спамят), если заметите что можно улучшить пишите
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Spawm : MonoBehaviour
{

    public GameObject Enemy;// массив врагов
    public int quantityNOW = 0;
    public int quantity;  
    public float EnemyInterval = 2f;




    // Start is called before the first frame update
    void Start()
    {
        quantity = Random.Range(0, 3);
       

    }

    // Update is called once per frame
    void Update()
    {
        if(quantity <= quantityNOW)
        {
            Debug.Log("количество");
            Destroy(this.gameObject);

        }

        Instantiate(Enemy, transform.position, Quaternion.identity);

    }

   
}

 
Yellow12Phoenix
UNец
 
Сообщения: 31
Зарегистрирован: 17 авг 2020, 20:44

Re: GetComponent к масиву объектов

Сообщение 1max1 30 апр 2021, 19:57

Индексация массивов с 0, если их всего 4, то последний элемент имеет номер 3. Скрипт Spawm вообще бредовый) Что он должен делать в принципе?
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: GetComponent к масиву объектов

Сообщение Yellow12Phoenix 30 апр 2021, 20:01

попробовал совет с данного сайта - https://forum.unity.com/threads/indexou ... ay.577657/ :
Spaw[0].gameObject.GetComponent<Spawm>().quantityNOW ++;
В принциппе получилось, ошибок нету но враги продолжают спамятся
Yellow12Phoenix
UNец
 
Сообщения: 31
Зарегистрирован: 17 авг 2020, 20:44

Re: GetComponent к масиву объектов

Сообщение Yellow12Phoenix 30 апр 2021, 20:06

1max1 писал(а):Индексация массивов с 0, если их всего 4, то последний элемент имеет номер 3. Скрипт Spawm вообще бредовый) Что он должен делать в принципе?


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

public class Spawm : MonoBehaviour
{

    public GameObject Enemy;// массив врагов
    public int quantityNOW = 0;
    public int quantity;  
   




    // Start is called before the first frame update
    void Start()
    {
        quantity = Random.Range(0, 3);
       

    }

    // Update is called once per frame
    void Update()
    {
        if(quantity <= quantityNOW)
        {
            Debug.Log("количество");
         //   Destroy(this.gameObject);
         this.gameObject.SetActive(false);

        }

        Instantiate(Enemy, transform.position, Quaternion.identity);

    }

   
}
 


он должен вызвать рандомное кол-во противников, данный скрипт прикрепляется на пустой объект, где должен появится противник, когда противников стало достаточно - удалится

но почему-то срабатывает только на половине объектов https://disk.yandex.ru/i/X-71_ph-AyBlvA
Yellow12Phoenix
UNец
 
Сообщения: 31
Зарегистрирован: 17 авг 2020, 20:44

Re: GetComponent к масиву объектов

Сообщение 1max1 30 апр 2021, 20:20

А не проще в старте заспавнить через цикл? Зачем тут апдейт?
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: GetComponent к масиву объектов

Сообщение Yellow12Phoenix 30 апр 2021, 20:59

1max1 писал(а):А не проще в старте заспавнить через цикл? Зачем тут апдейт?

Как-то проще
Решил все ошибки, всем спасибо, благодарю :D
Yellow12Phoenix
UNец
 
Сообщения: 31
Зарегистрирован: 17 авг 2020, 20:44


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5