Как добавить текущий объект в массив

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Как добавить текущий объект в массив

Сообщение bond007in 12 дек 2018, 09:29

Добрый день. Нужно добавить объект на котором висит скрипт в GameObject[] другого скрипта.

Нужен именно GameObject[]. List получается но не подходит.

Вот так я пытаюсь сделать.

Синтаксис:
Используется csharp
void Start ()
{
        Body = gameObject.transform.parent.gameObject;
        Body.GetComponent<bodyPartsManager>().TestArray.Add(gameObject);
}
Последний раз редактировалось bond007in 12 дек 2018, 10:01, всего редактировалось 1 раз.
bond007in
UNIт
 
Сообщения: 92
Зарегистрирован: 20 фев 2014, 12:49

Re: Как добавить текущий объект в массив

Сообщение 1max1 12 дек 2018, 09:32

получается но не подходит

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

Re: Как добавить текущий объект в массив

Сообщение bond007in 12 дек 2018, 09:40

1max1 писал(а):
получается но не подходит

Обоснуй.

Ели из List удаляются объекты то то остаются пустые строчки. А Array их удаляет. Мне нужно отслеживать количество объектов в Array.
bond007in
UNIт
 
Сообщения: 92
Зарегистрирован: 20 фев 2014, 12:49

Re: Как добавить текущий объект в массив

Сообщение 1max1 12 дек 2018, 09:50

Мне нужно отслеживать количество объектов в Array

Синтаксис:
Используется csharp
list.Add(obj);
Debug.Log(list.Count); // 1
list.Remove(obj);
Debug.Log(list.Count); // 0

Ели из List удаляются объекты то то остаются пустые строчки

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

Re: Как добавить текущий объект в массив

Сообщение bond007in 12 дек 2018, 09:55

1max1 писал(а):
Мне нужно отслеживать количество объектов в Array

Синтаксис:
Используется csharp
list.Add(obj);
Debug.Log(list.Count); // 1
list.Remove(obj);
Debug.Log(list.Count); // 0

Ели из List удаляются объекты то то остаются пустые строчки

А пример кода можно?


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

public class clothesInList : MonoBehaviour {
       
        public GameObject Body;

        void Start () {
               
                Body = gameObject.transform.parent.gameObject;
                Body.GetComponent<bodyPartsManager>().TestArray = ????;
        }
       
        void Update () {
               
        }
}
 

В другом скрипте пока ничего нет кроме переменных.
bond007in
UNIт
 
Сообщения: 92
Зарегистрирован: 20 фев 2014, 12:49

Re: Как добавить текущий объект в массив

Сообщение 1max1 12 дек 2018, 10:02

Тебе в массив нужно добавить объект?
Ну так:
Синтаксис:
Используется csharp
Body.GetComponent<bodyPartsManager>().TestArray.Add(gameObject);

А в скрипте bodyPartsManager объяви список.
Синтаксис:
Используется csharp
public List<GameObject> TestArray;
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Как добавить текущий объект в массив

Сообщение bond007in 12 дек 2018, 10:05

1max1 писал(а):Тебе в массив нужно добавить объект?
Ну так:
Синтаксис:
Используется csharp
Body.GetComponent<bodyPartsManager>().TestArray.Add(gameObject);

А в скрипте bodyPartsManager объяви список.
Синтаксис:
Используется csharp
public List<GameObject> TestArray;

Я ж пишу что в List<GameObject> при удалении объекта со сцены остаются пустые строчки с надписью Missing. А мне нужно в игре отслеживать количество объектов.
bond007in
UNIт
 
Сообщения: 92
Зарегистрирован: 20 фев 2014, 12:49

Re: Как добавить текущий объект в массив

Сообщение Ziza 12 дек 2018, 10:07

bond007in писал(а):Я ж пишу что в List<GameObject> при удалении объекта со сцены остаются пустые строчки с надписью Missing. А мне нужно в игре отслеживать количество объектов.

Ну так удаляйте из списка при удалении со сцены. С массивом тоже самое будет.
Аватара пользователя
Ziza
UNIт
 
Сообщения: 81
Зарегистрирован: 02 ноя 2018, 23:07

Re: Как добавить текущий объект в массив

Сообщение bond007in 12 дек 2018, 10:15

Ziza писал(а):
bond007in писал(а):Я ж пишу что в List<GameObject> при удалении объекта со сцены остаются пустые строчки с надписью Missing. А мне нужно в игре отслеживать количество объектов.

Ну так удаляйте из списка при удалении со сцены. С массивом тоже самое будет.

Этот массив должен проверять наличие объектов. А объекты долны сами в него добавляться. Поиск по тэгам неудобно так как много тегов надо делать. Как мне удалить пустые строки из List<GameObject>?
https://cdn1.savepice.ru/uploads/2018/1 ... f-full.jpg
bond007in
UNIт
 
Сообщения: 92
Зарегистрирован: 20 фев 2014, 12:49

Re: Как добавить текущий объект в массив

Сообщение Ziza 12 дек 2018, 10:20

Ну если уж вам так горит использовать именно массив, то вот так добавлять
Синтаксис:
Используется csharp
var length = TestArray.Length;
Array.Resize(TestArray, length + 1);
TestArray[length] = gameObject;

Но это извращение на самом деле, для этого список есть)
Этот массив должен проверять наличие объектов.

Как у вас массив сам будет проверять наличие объектов? Это что за магия?)
И не понятно при чем тут теги. Допустим есть список.
Синтаксис:
Используется csharp
public List<GameObject> list = new List<GameObject>();
// Где-то добавление
list.Add(gameObject);
// Где-то удаление со сцены
list.Remove(gameObject);
Destroy(gameObject);

И все, никаких пропущенных элементов
Аватара пользователя
Ziza
UNIт
 
Сообщения: 81
Зарегистрирован: 02 ноя 2018, 23:07

Re: Как добавить текущий объект в массив

Сообщение bond007in 12 дек 2018, 10:24

Ziza писал(а):Ну если уж вам так горит использовать именно массив, то вот так добавлять
Синтаксис:
Используется csharp
var length = TestArray.Length;
Array.Resize(TestArray, length + 1);
TestArray[length] = gameObject;

Но это извращение на самом деле, для этого список есть)
Этот массив должен проверять наличие объектов.

Как у вас массив сам будет проверять наличие объектов? Это что за магия?)
И не понятно при чем тут теги. Допустим есть список.
Синтаксис:
Используется csharp
public List<GameObject> list = new List<GameObject>();
// Где-то добавление
list.Add(gameObject);
// Где-то удаление со сцены
list.Remove(gameObject);
Destroy(gameObject);

И все, никаких пропущенных элементов


Если в переменной есть объекты значит они есть на сцене.
bond007in
UNIт
 
Сообщения: 92
Зарегистрирован: 20 фев 2014, 12:49

Re: Как добавить текущий объект в массив

Сообщение 1max1 12 дек 2018, 10:32

Я понял...
У тебя есть массив объектов, потом ты добавляешь в него объекты со сцены, а потом удаляешь объекты со сцены и при этом ты хочешь чтобы волшебным способом объекты удалились еще и из массива :))
Есть такой метод https://docs.unity3d.com/ScriptReferenc ... stroy.html срабатывает при дестрое объекта.
В него добавь строку на удаления объекта из того самого списка.
Синтаксис:
Используется csharp
void OnDestroy()
{
    Body.GetComponent<bodyPartsManager>().TestArray.Remove(gameObject);
}
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Как добавить текущий объект в массив

Сообщение Ziza 12 дек 2018, 10:35

Если все так, как говорит 1max1 у вас явно проблемы с архитектурой в проекте)
Аватара пользователя
Ziza
UNIт
 
Сообщения: 81
Зарегистрирован: 02 ноя 2018, 23:07

Re: Как добавить текущий объект в массив

Сообщение 1max1 12 дек 2018, 10:44

А да, вот еще 1 костыль))
Синтаксис:
Используется csharp
void Update()
{
    for (int i = 0; i < list.Count; ++i)
    {
        if (list[i] == null)
        {
            list.RemoveAt(i--);
        }
    }
}
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51


Вернуться в Почемучка

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

Сейчас этот форум просматривают: Google [Bot] и гости: 21