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

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

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

Сообщение kor1b 21 июн 2018, 07:24

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

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

Сообщение 1max1 21 июн 2018, 07:38

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

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

Сообщение kor1b 21 июн 2018, 13:08

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>()
kor1b
UNITрон
 
Сообщения: 172
Зарегистрирован: 25 дек 2017, 20:32

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

Сообщение Tolking 21 июн 2018, 13:12

SelectArrow[]
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

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

Сообщение kor1b 21 июн 2018, 17:16

Tolking писал(а):SelectArrow[]

Я этот момент так и прописал, меня больше интересует как написать все это дело в Start()
kor1b
UNITрон
 
Сообщения: 172
Зарегистрирован: 25 дек 2017, 20:32

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

Сообщение 1max1 21 июн 2018, 18:07

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

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

Сообщение kor1b 21 июн 2018, 21:37

1max1 писал(а):циклом пройдись и заполни

Не работает :(
Синтаксис:
Используется csharp
LetMoving[] letMovingScript;
void Start(){
                for (int i = 0; i < spawnLets.letsArr.Count; i++) {
                        letMovingScript[i] = spawnLets.letsArr [i].GetComponent<LetMoving> ();
                }
 
kor1b
UNITрон
 
Сообщения: 172
Зарегистрирован: 25 дек 2017, 20:32

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

Сообщение 1max1 21 июн 2018, 22:18

Не работает :(

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

Во-первых, нужна ссылка на массив, а не на тщетность бытия.
Синтаксис:
Используется csharp
LetMoving[] letMovingScript = new LetMoving[999];
 
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

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

Сообщение Cr0c 22 июн 2018, 16:39

Если GetComponent - то это монобех. Получать с него элементы напрямую - значит есть индексатор. Убрать индексатор и сделать публичный массив и его "кешировать".
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

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

Сообщение kor1b 22 июн 2018, 17:36

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

Не совсем понял как это. Не могли бы привести пример кода?
kor1b
UNITрон
 
Сообщения: 172
Зарегистрирован: 25 дек 2017, 20:32

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

Сообщение 1max1 22 июн 2018, 17:38

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

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

Сообщение kor1b 22 июн 2018, 17:44

Спасибо, понял. Наверное, для моей ситуации это будет самый оптимальный вариант :D
kor1b
UNITрон
 
Сообщения: 172
Зарегистрирован: 25 дек 2017, 20:32

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

Сообщение Cr0c 22 июн 2018, 19:25

Синтаксис:
Используется 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;
 }
 
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

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

Сообщение kor1b 22 июн 2018, 19:52

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;
 }
 

Спасибо большое)
kor1b
UNITрон
 
Сообщения: 172
Зарегистрирован: 25 дек 2017, 20:32


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

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

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