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

Кэширование массива

СообщениеДобавлено: 21 июн 2018, 07:24
kor1b
Здравствуйте. Пытаюсь закэшировать массив allArrows.selectArrow[i].GetComponent<ArrowComponent>(). Как можно решить мою проблему, а то нигде не нашел ничего похожего?

Re: Кэширование массива

СообщениеДобавлено: 21 июн 2018, 07:38
1max1
щито?

Re: Кэширование массива

СообщениеДобавлено: 21 июн 2018, 13:08
kor1b
1max1 писал(а):щито?

Ну мы можем кэшировать данные, вроде
Синтаксис:
Используется csharp
GameObject arrow;
Arrow arrowScript;
void Start(){
arrowScript = arrow.GetComponent <Arrow>();
}

Так вот меня интересует вопрос, можем ли мы как-то закэшировать элемент массива, а потом получить к нему доступ?
То есть у меня есть пустой геймобжект, в котором висит массив из других геймобжектов, каждый из которых имеет скрипт (скажем SelectArrow). И для того, чтобы получить доступ к этому скрипту, нужно писать так:
Синтаксис:
Используется csharp
for (int i = 0; i  < arrow.Count; i++)
arrow[i].GetComponent<SelectArrow>().[получаем нужный компонент]

А мне нужно как-нибудь закэшировать arrow[i].GetComponent<SelectArrow>()

Re: Кэширование массива

СообщениеДобавлено: 21 июн 2018, 13:12
Tolking
SelectArrow[]

Re: Кэширование массива

СообщениеДобавлено: 21 июн 2018, 17:16
kor1b
Tolking писал(а):SelectArrow[]

Я этот момент так и прописал, меня больше интересует как написать все это дело в Start()

Re: Кэширование массива

СообщениеДобавлено: 21 июн 2018, 18:07
1max1
циклом пройдись и заполни

Re: Кэширование массива

СообщениеДобавлено: 21 июн 2018, 21:37
kor1b
1max1 писал(а):циклом пройдись и заполни

Не работает :(
Синтаксис:
Используется csharp
LetMoving[] letMovingScript;
void Start(){
                for (int i = 0; i < spawnLets.letsArr.Count; i++) {
                        letMovingScript[i] = spawnLets.letsArr [i].GetComponent<LetMoving> ();
                }
 

Re: Кэширование массива

СообщениеДобавлено: 21 июн 2018, 22:18
1max1
Не работает :(

Ммм, как детально описал проблему, прямо куча инфы чтобы помочь тебе...

Во-первых, нужна ссылка на массив, а не на тщетность бытия.
Синтаксис:
Используется csharp
LetMoving[] letMovingScript = new LetMoving[999];
 

Re: Кэширование массива

СообщениеДобавлено: 22 июн 2018, 16:39
Cr0c
Если GetComponent - то это монобех. Получать с него элементы напрямую - значит есть индексатор. Убрать индексатор и сделать публичный массив и его "кешировать".

Re: Кэширование массива

СообщениеДобавлено: 22 июн 2018, 17:36
kor1b
Cr0c писал(а):Если GetComponent - то это монобех. Получать с него элементы напрямую - значит есть индексатор. Убрать индексатор и сделать публичный массив и его "кешировать".

Не совсем понял как это. Не могли бы привести пример кода?

Re: Кэширование массива

СообщениеДобавлено: 22 июн 2018, 17:38
1max1
Я думаю имелось ввиду заполнять массив в инспекторе, а не в скрипте

Re: Кэширование массива

СообщениеДобавлено: 22 июн 2018, 17:44
kor1b
Спасибо, понял. Наверное, для моей ситуации это будет самый оптимальный вариант :D

Re: Кэширование массива

СообщениеДобавлено: 22 июн 2018, 19:25
Cr0c
Синтаксис:
Используется csharp
public struct ArrayStruct {
 public int[] data;
}

public class SomeClass : Monobehaviour {
 public ArrayStruct myArray;
}

public class Aggregator : Monobehaviour {
 public ArrayStruct[] arrays;
 public GameObject[] objs;
 void Start() {
  for (int i=0; i<objs.Length; i++)
   arrays[i] = objs[i].GetComponent<SomeClass>().myArray;
 }
 

Re: Кэширование массива

СообщениеДобавлено: 22 июн 2018, 19:52
kor1b
Cr0c писал(а):
Синтаксис:
Используется csharp
public struct ArrayStruct {
 public int[] data;
}

public class SomeClass : Monobehaviour {
 public ArrayStruct myArray;
}

public class Aggregator : Monobehaviour {
 public ArrayStruct[] arrays;
 public GameObject[] objs;
 void Start() {
  for (int i=0; i<objs.Length; i++)
   arrays[i] = objs[i].GetComponent<SomeClass>().myArray;
 }
 

Спасибо большое)