Вопрос по foreach.

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

Вопрос по foreach.

Сообщение VitaMin00 03 окт 2012, 14:59

Всем привет. возник поврос, который не получается решить. Что делаю не правильно?
На сцене 5 кубов с именами Cube и камера. на каждый куб вешаю этот скрипт:
Синтаксис:
Используется csharp
public class Test_1 : MonoBehaviour {
       
        void Start () {
                Test_2.massiv.Add(this.gameObject);
        }
}

 

На камеру вешаю этот:
Синтаксис:
Используется csharp
public class Test_2 : MonoBehaviour {
       
        public static ArrayList massiv = new ArrayList();
       
        void Update () {
                foreach (object Cube in massiv) {
                        this.renderer.enabled = false;
                }
        }
}
 


Нужно, чтобы только кубы исчезли, но идет ругань, что у камеры нет renderera. но ведь я не добавляю в массив! В итоге кубы в массиве, но не исчезают, и постоянная ошибка, что у камеры нет рендерера. что не правильно делаю?
VitaMin00
UNITрон
 
Сообщения: 187
Зарегистрирован: 12 мар 2012, 19:54

Re: Вопрос по foreach.

Сообщение Woolf 03 окт 2012, 15:07

ну правильно, у камеры нет рендерера, зачем вы его пытаетесь удалить у камеры?

Синтаксис:
Используется csharp
               foreach (object Cube in massiv) {
                        Cube.GetComponent<Renderer>().enabled = false;
                }


Как-то так, хоть и не дословно, ибо пишу прямо на форуме. Разберётесь в чем ваша ошибка?
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Вопрос по foreach.

Сообщение Good1101 03 окт 2012, 15:10

во первых
Синтаксис:
Используется csharp
this.renderer.enabled = false;

указывает на объект на котором висит скрипт а не на текущий элемент цикла foreach.
нужно писать так

Синтаксис:
Используется csharp
Cube.renderer.enabled = false;


во вторых так тоже нельзя писать)
(хотя со ссылочными типами может и можно :) )
так как цикл foreach создает новые экземпляры и изменить элементы массива через этот цикл нельзя если все правильно понимаю,
используйте цикл for.
и еще зачем тут тип object
по моему это очень затратно. лучше трансформ или геймобжект
Последний раз редактировалось Good1101 03 окт 2012, 15:14, всего редактировалось 1 раз.
Как тут стрелять?
Аватара пользователя
Good1101
Адепт
 
Сообщения: 1100
Зарегистрирован: 17 ноя 2011, 14:07
  • ICQ

Re: Вопрос по foreach.

Сообщение Receptor 03 окт 2012, 15:13

так как цикл foreach создает новые экземпляры и изменить элементы массива через этот цикл нельзя если все правильно понимаю

можно, если список читаемый.
_VK.com
Аватара пользователя
Receptor
Адепт
 
Сообщения: 1706
Зарегистрирован: 22 ноя 2011, 07:09
Откуда: Волгодонск

Re: Вопрос по foreach.

Сообщение Woolf 03 окт 2012, 15:24

во вторых так тоже нельзя писать)


Если имеется в виду UnityEngine.object то можно, если System.object - то нельзя. Конечно, лучше в данном случае использовать типизацию GameObject и не ArrayList а List<GameObject >.

Да и вообще, использование сложных динамических типов (типа List) как static - есть дурной пример, как делать не надо. Используйте инстанирование лучше.
Последний раз редактировалось Woolf 03 окт 2012, 16:07, всего редактировалось 1 раз.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Вопрос по foreach.

Сообщение VitaMin00 03 окт 2012, 15:59

ну правильно, у камеры нет рендерера, зачем вы его пытаетесь удалить у камеры?

Я думал, что строчка foreach (GameObject Cube in massiv) { - должна обратиться только к тем обьектам, что носят имя Cube. Оказалось, что это не так. Тут если вписываешь за место Cube - dvcjabowuifgekj - Всё равно один и тот же эффект.
VitaMin00
UNITрон
 
Сообщения: 187
Зарегистрирован: 12 мар 2012, 19:54

Re: Вопрос по foreach.

Сообщение Woolf 03 окт 2012, 16:09

VitaMin00 писал(а):
ну правильно, у камеры нет рендерера, зачем вы его пытаетесь удалить у камеры?

Я думал, что строчка foreach (GameObject Cube in massiv) { - должна обратиться только к тем обьектам, что носят имя Cube. Оказалось, что это не так. Тут если вписываешь за место Cube - dvcjabowuifgekj - Всё равно один и тот же эффект.



вы же в цикле пишете this - что означает, обратиться именно к этому скрипту.

foreach (GameObject Cube in massiv) выберет все объекты в массиве и к каждому можно обратиться, как к Cube
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Вопрос по foreach.

Сообщение VitaMin00 03 окт 2012, 16:12

Всё, разобрался, спасибо)
VitaMin00
UNITрон
 
Сообщения: 187
Зарегистрирован: 12 мар 2012, 19:54


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

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

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