Войти
ПрограммированиеФорумФизика

Что означают 2 строчки на C#

#0
11:35, 27 дек. 2015

Добрый день, есть код:

public void SetRotation (string opt)
  {
    bool rotate;
    
    
    if (opt == "yes")
      rotate = true;
    else
      rotate = false;
    
    
    foreach (GameObject go in GameObject.FindGameObjectsWithTag ("CubeTag")) {
      go.GetComponent<Rotate> ().SetRotation (rotate);
    }
    
    
  }

О первых пяти строчках я имею представление, хотелось бы узнать что описывают последние две. Пытаюсь сделать подобное только для смены цвета.


#1
12:26, 27 дек. 2015

anarbus
Говнокод какой-то передавать аргумент строкой.
Находит все объекты, помеченные тегом "CubeTag", у каждого из них берёт компонент Rotate и вызывает его метод SetRotation. Компонент Rotate видимо самодельный, такого в самом Unity вроде нет.

#2
12:41, 27 дек. 2015

Спасибо.

#3
12:46, 27 дек. 2015

Это самая странная функция поворота в движке/скрипте во всей моей жизни.

#4
15:11, 27 дек. 2015

gammaker
> Находит все объекты, помеченные тегом "CubeTag",

А интересно, не один ли там единственный такой куб?
#5
19:19, 27 дек. 2015

Странный код :) Я бы сделал так:

public void SetColor (color col, string tag) // например, Color.green
  {
    foreach (GameObject go in GameObject.FindGameObjectsWithTag (tag)) {
      go.renderer.material.color = col; // присваиваем цвет всем объектам с тегом
    }  
  }
либо, если хочешь свой цвет:
public void SetColor (float r, float g, float b, float a, string tag) // например, 0, 0, 0, 0
  {
    foreach (GameObject go in GameObject.FindGameObjectsWithTag (tag)) {
      go.renderer.material.color = new Color (r, g, b, a); // присваиваем цвет всем объектам с тегом
    }  
  }

#6
19:33, 27 дек. 2015

Вызывает скриптовую функцию, скрипта Rotate, SetRotare с параметром rotate, для всех дочерних("this") объектов, найденых с тэгом CubeTag.

#7
21:22, 27 дек. 2015

anarbus
> хотелось бы узнать что описывают последние две.

Как-то так

GameObject[] go = GameObject.FindGameObjectsWithTag ("CubeTag"));
for (int i=0; i<go.Length; i++)
{
    go[i].GetComponent<Rotate> ().SetRotation (rotate);
}
#8
3:54, 28 дек. 2015

Folleah
> Странный код :) Я бы сделал так:
> public void SetColor (color col, string tag) // например, Color.green
> {
> foreach (GameObject go in GameObject.FindGameObjectsWithTag (tag)) {
> go.renderer.material.color = col; // присваиваем цвет всем объектам с
> тегом
> }
> }

Я бы вместо этого, чтобы не размножать материалы, их Рендеру добавил бы MaterialPropertyBlock с переопределённым цветом.

ПрограммированиеФорумФизика

Тема в архиве.