[Решено] Массивы
wolfness Дата: Пн, 07 Янв 2013, 17:28 | Сообщение # 1
Сообщений: 7
Награды:
0
Репутация:
0
Статус: Offline
Добрый день. Вопрос дилетантский, но все же. Объявляю массив: cur_pointКод
const int mass_point = 4; int[] zeroes = new int[mass_point]; int[] cur_point = {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4};
где элементы массива cur_point получаются из 4 других скриптов (их значения 1,0,0,1). При выводе всех в консоль, их значения в данный скрипт передаются правильно, но если я пытаюсь обратиться к ним вот так: Код
void Update () { if(globalvars.gl_ai == 1) { int k = 0; for(int i = 0; i < cur_point.Length; i++) { if(cur_point[i] == 0) { zeroes[k] = i + 1; Debug.Log("zeroes " + k + " = " + cur_point[i] + " +++ " + rise2.curpoint2); k++; } } /*for (int j = 1; j <= mass_point; j++) { if (zeroes[j-1] > max) { max = zeroes[j-1]; Debug.Log(max); } }*/ globalvars.gl_ai = 0; } } }
В выводе Код
Debug.Log("zeroes " + k + " = " + cur_point[i] + " +++ " + rise2.curpoint2);
значение выводится правильно, а вот в все время получаю нули. И проблему понять не могу. По мануалам вроде бы правильно обращаюсь к элементам массива.
Сообщение отредактировал wolfness - Вт, 08 Янв 2013, 10:49
Сообщение Добрый день. Вопрос дилетантский, но все же. Объявляю массив: cur_pointКод
const int mass_point = 4; int[] zeroes = new int[mass_point]; int[] cur_point = {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4};
где элементы массива cur_point получаются из 4 других скриптов (их значения 1,0,0,1). При выводе всех в консоль, их значения в данный скрипт передаются правильно, но если я пытаюсь обратиться к ним вот так: Код
void Update () { if(globalvars.gl_ai == 1) { int k = 0; for(int i = 0; i < cur_point.Length; i++) { if(cur_point[i] == 0) { zeroes[k] = i + 1; Debug.Log("zeroes " + k + " = " + cur_point[i] + " +++ " + rise2.curpoint2); k++; } } /*for (int j = 1; j <= mass_point; j++) { if (zeroes[j-1] > max) { max = zeroes[j-1]; Debug.Log(max); } }*/ globalvars.gl_ai = 0; } } }
В выводе Код
Debug.Log("zeroes " + k + " = " + cur_point[i] + " +++ " + rise2.curpoint2);
значение выводится правильно, а вот в все время получаю нули. И проблему понять не могу. По мануалам вроде бы правильно обращаюсь к элементам массива. Автор - wolfness Дата добавления - 07 Янв 2013 в 17:28
seaman Дата: Пн, 07 Янв 2013, 18:04 | Сообщение # 2
Гуру
Сообщений: 1748
Награды:
10
Репутация:
660
Статус: Offline
int[] cur_point = {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4}; Эта строка в Start/Awake, или прямо в теле класса? Если да - разбейте ее на две: int[] cur_point; //в теле класса Код
... cur_point = {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4}; //в Start
Сообщение int[] cur_point = {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4}; Эта строка в Start/Awake, или прямо в теле класса? Если да - разбейте ее на две: int[] cur_point; //в теле класса Код
... cur_point = {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4}; //в Start
Автор - seaman Дата добавления - 07 Янв 2013 в 18:04
wolfness Дата: Пн, 07 Янв 2013, 18:18 | Сообщение # 3
Сообщений: 7
Награды:
0
Репутация:
0
Статус: Offline
Цитата (seaman )
Эта строка в Start/Awake, или прямо в теле класса?
Прямо в теле класса. Цитата (wolfness )
Если да - разбейте ее на две:
оставляю в теле класса, а в Start помещаю Код
void Start () { int[] cur_point = {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4}; }
В результате получаю NullReferenceException: Object reference not set to an instance of an object ai.Update () (at Assets/Scripts/ai.cs:26) А в 26 строке у меня Код
for(int i = 0; i < cur_point.Length; i++)
если я в старт помещаю точно так же как вы советуете: Код
cur_point = {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4}; //в Start
то получаю error CS1525: Unexpected symbol `{'
Сообщение отредактировал wolfness - Пн, 07 Янв 2013, 18:22
Сообщение Цитата (seaman )
Эта строка в Start/Awake, или прямо в теле класса?
Прямо в теле класса. Цитата (wolfness )
Если да - разбейте ее на две:
оставляю в теле класса, а в Start помещаю Код
void Start () { int[] cur_point = {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4}; }
В результате получаю NullReferenceException: Object reference not set to an instance of an object ai.Update () (at Assets/Scripts/ai.cs:26) А в 26 строке у меня Код
for(int i = 0; i < cur_point.Length; i++)
если я в старт помещаю точно так же как вы советуете: Код
cur_point = {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4}; //в Start
то получаю error CS1525: Unexpected symbol `{'Автор - wolfness Дата добавления - 07 Янв 2013 в 18:18
seaman Дата: Пн, 07 Янв 2013, 19:02 | Сообщение # 4
Гуру
Сообщений: 1748
Награды:
10
Репутация:
660
Статус: Offline
Ну да, ступил. В-общем как я понимаю смысл в том, что строка помещенная в теле класса выполняется в статическом конструкторе. Тогда Ваши rise... не определены и по умолчанию заносится 0. Как избежать?- переместить назначение элементов массива в Start. Только,конечно не так как я написал. Код
int[] cur_point; //в теле класса ... cur_point = new int[] {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4}; //в Start
Или так Код
int[] cur_point = new int[4]; //в теле класса ... cur_point[0] = rise1.curpoint1;//В Start cur_point[1] = rise2.curpoint2; cur_point[2] = rise3.curpoint3; cur_point[3] = rise4.curpoint4;
Сообщение Ну да, ступил. В-общем как я понимаю смысл в том, что строка помещенная в теле класса выполняется в статическом конструкторе. Тогда Ваши rise... не определены и по умолчанию заносится 0. Как избежать?- переместить назначение элементов массива в Start. Только,конечно не так как я написал. Код
int[] cur_point; //в теле класса ... cur_point = new int[] {rise1.curpoint1, rise2.curpoint2, rise3.curpoint3, rise4.curpoint4}; //в Start
Или так Код
int[] cur_point = new int[4]; //в теле класса ... cur_point[0] = rise1.curpoint1;//В Start cur_point[1] = rise2.curpoint2; cur_point[2] = rise3.curpoint3; cur_point[3] = rise4.curpoint4;
Автор - seaman Дата добавления - 07 Янв 2013 в 19:02
wolfness Дата: Пн, 07 Янв 2013, 21:05 | Сообщение # 5
Сообщений: 7
Награды:
0
Репутация:
0
Статус: Offline
Спасибо большое, разобрался. Только я то, что у вас помещено в Start, я поместил в Update, потому что значения rise.curpoint у меня постоянно меняются. Самое главное, что с массивами разобрался. Еще раз спасибо. Все заработало, как надо.
Сообщение Спасибо большое, разобрался. Только я то, что у вас помещено в Start, я поместил в Update, потому что значения rise.curpoint у меня постоянно меняются. Самое главное, что с массивами разобрался. Еще раз спасибо. Все заработало, как надо. Автор - wolfness Дата добавления - 07 Янв 2013 в 21:05