Страница 1 из 2
Смена материала по нажатию кнопки
Добавлено:
13 июл 2018, 17:40
Woody1000
Идет бесконечный поток создания объектов. Не могу реализовать изменение цвета по нажатию кнопки. В вижуал студио при дебагинге когда ставлю брейкпоинт на "void Start" идет перемещение до конца блока "Start", а дальше не переходит.
Используется csharp
public class Script_1 : MonoBehaviour
{
public Material[] material;
Renderer rend;
// Use this for initialization
void Start()
{
rend = GetComponent<Renderer>();
rend.enabled = true;
rend.sharedMaterial = material[0];
}
void Update()
{
if (Input.GetKey(KeyCode.E))
{
rend.sharedMaterial = material[1];
}
if (Input.GetKey(KeyCode.R))
{
rend.sharedMaterial = material[2];
}
}
Re: Смена материала по нажатию кнопки
Добавлено:
13 июл 2018, 17:55
1max1
В вижуал студио при дебагинге когда ставлю брейкпоинт на "void Start" идет перемещение до конца блока "Start", а дальше не переходит.
Так а дальше то и некуда))
Re: Смена материала по нажатию кнопки
Добавлено:
13 июл 2018, 18:01
Woody1000
А почему Update не работает?
Re: Смена материала по нажатию кнопки
Добавлено:
13 июл 2018, 18:18
1max1
Почему не работает? просто ты на него брикпоинт не поставил вот и всё.
Re: Смена материала по нажатию кнопки
Добавлено:
13 июл 2018, 18:33
Woody1000
У меня при запуске игры нет никакой реакции на нажатие кнопок
Re: Смена материала по нажатию кнопки
Добавлено:
13 июл 2018, 18:39
1max1
Не стоит быть столь категоричным, сначала проверь дебагом:
Используется csharp
void Update()
{
if (Input.GetKey(KeyCode.E))
{
rend.sharedMaterial = material[1];
Debag.Log(1);
}
if (Input.GetKey(KeyCode.R))
{
rend.sharedMaterial = material[2];
Debag.Log(2);
}
}
p.s. кстати зачем тебе именно rend.sharedMaterial если ты просто хочешь объекту материал изменить, то достаточно обычно простого rend.material
Re: Смена материала по нажатию кнопки
Добавлено:
13 июл 2018, 18:50
Woody1000
IndexOutOfRangeExeption : Array index is out of range.
Re: Смена материала по нажатию кнопки
Добавлено:
13 июл 2018, 18:52
1max1
В инспекторе тебе нужно задать количество элементов массива и затолкать в ячейки нужные материалы.
Re: Смена материала по нажатию кнопки
Добавлено:
13 июл 2018, 18:55
Woody1000
p.s. кстати зачем тебе именно rend.sharedMaterial если ты просто хочешь объекту материал изменить, то достаточно обычно простого rend.material
До этого прописывал такой код
gameObject.GetComponent<SpriteRenderer>().material.color = Color.red;
но у меня менялись все объекты. Мне необходимо чтобы каждый вновь создаваемый объект менялся и сохранял свой цвет. Здсеь на форуме мне посоветовали делать через sharedMaterial
Re: Смена материала по нажатию кнопки
Добавлено:
13 июл 2018, 18:56
Woody1000
да, там уже задал количество элементов в массиве, даже больше прописал, толку - ноль
Re: Смена материала по нажатию кнопки
Добавлено:
13 июл 2018, 19:00
1max1
Вот тут
https://docs.unity3d.com/ScriptReferenc ... erial.html написано о том, что этот материал влияет на все объекты, если тебе нужно изменить какой-то конкретный объект, то нужно брать material, ибо если ты поменяешь sharedMaterial, то такие же изменения произойдут с другими объектами, которые используют этот материал.
Вообще если тебе только цвет нужно менять, то совсем не обязательно создавать 3 материала, достаточно и одного:
Используется csharp
public class Script_1 : MonoBehaviour
{
Renderer rend;
void Start()
{
rend = GetComponent<Renderer>();
rend.enabled = true;
rend.material.color = Color.blue;
}
void Update()
{
if (Input.GetKey(KeyCode.E))
{
rend.material.color = Color.green;
}
if (Input.GetKey(KeyCode.R))
{
rend.material.color = Color.red;
}
}
}
Re: Смена материала по нажатию кнопки
Добавлено:
13 июл 2018, 19:22
Woody1000
По твоему скрипту так же меняются все объекты при нажатии.
Re: Смена материала по нажатию кнопки
Добавлено:
13 июл 2018, 19:24
1max1
Ну так если скрипт висит на всех этих объектах, то естественно оно сработает на всех ><
Re: Смена материала по нажатию кнопки
Добавлено:
13 июл 2018, 19:39
Woody1000
Похже рогом уперся в эти материалы, а нужно то мне всего лишь создание объектов с рандомным цветом. Попробую засунуть массив объектов с рандомом в Instantiate. И создам еще префабы объектов
Re: Смена материала по нажатию кнопки
Добавлено:
13 июл 2018, 19:47
1max1
Мне кажется ты забиваешь гвозди микроскопом. Нужен рандомный цвет? Для этого есть класс Random:
Используется csharp
void Start ()
{
GetComponent<Renderer>().material.color = Random.ColorHSV();
}