Страница 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();
}