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

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

СообщениеДобавлено: 12 дек 2018, 09:29
bond007in
Добрый день. Нужно добавить объект на котором висит скрипт в GameObject[] другого скрипта.

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

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

Синтаксис:
Используется csharp
void Start ()
{
        Body = gameObject.transform.parent.gameObject;
        Body.GetComponent<bodyPartsManager>().TestArray.Add(gameObject);
}

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

СообщениеДобавлено: 12 дек 2018, 09:32
1max1
получается но не подходит

Обоснуй.

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

СообщениеДобавлено: 12 дек 2018, 09:40
bond007in
1max1 писал(а):
получается но не подходит

Обоснуй.

Ели из List удаляются объекты то то остаются пустые строчки. А Array их удаляет. Мне нужно отслеживать количество объектов в Array.

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

СообщениеДобавлено: 12 дек 2018, 09:50
1max1
Мне нужно отслеживать количество объектов в Array

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

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

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

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

СообщениеДобавлено: 12 дек 2018, 09:55
bond007in
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 () {
               
        }
}
 

В другом скрипте пока ничего нет кроме переменных.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

СообщениеДобавлено: 12 дек 2018, 10:20
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);

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

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

СообщениеДобавлено: 12 дек 2018, 10:24
bond007in
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);

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


Если в переменной есть объекты значит они есть на сцене.

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

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

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

СообщениеДобавлено: 12 дек 2018, 10:35
Ziza
Если все так, как говорит 1max1 у вас явно проблемы с архитектурой в проекте)

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

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