Цвет меша как?

Программирование на Юнити.

Цвет меша как?

Сообщение Tolking 01 мар 2010, 17:36

Что-то я смотрю на масивы материалов и шейдеры и торможу неподецки... Как с этим работать?

Мне нужно самое простое действие покрасить меш в какой-то цвет. Навелся мышкой, предмет под мышкой стал красным... Что-то типа блицевского EntityColor ...

Пошлите меня, пожалуйста!
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Цвет меша как?

Сообщение gnoblin 01 мар 2010, 18:11

получаем цвет:
Код: Выделить всё
Color color = gameObject.renderer.material.GetColor("_Color"); //в зависимости от шейдера название свойства в шейдере может звучать по-разному


устанавливаем цвет:
Код: Выделить всё
gameObject.renderer.material.SetColor("_Color", color);
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Цвет меша как?

Сообщение Tolking 02 мар 2010, 09:02

в зависимости от шейдера название свойства в шейдере

Вот примерно про это я и говорю, как узнать как называется свойство?

Объект под мышей получить легко, у объекта материал тоже, как узнать какое свойство менять?
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Цвет меша как?

Сообщение Paul Siberdt 02 мар 2010, 09:44

Осознанно назначайте шейдеры || Создайте свой шейдер
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Цвет меша как?

Сообщение Tolking 02 мар 2010, 12:04

заниматься мне, конечно, больше совершенно нечем кроме изучения шейдеров. :(
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Цвет меша как?

Сообщение sp00n 02 мар 2010, 13:52

слюшай, дарагой, зачем шейдеры изучать, дада? (шутка, хотя, иметь понятие о том, что есть шейдер, нужно для написания чего-нибудь более чем простой кубик в юнити)
может, в начале надо разобраться что такое материалы в юнити? ну и потом, желательно почитать Scripting Reference, например здесь показано, как изменить цвет в первых строчках, дада.
Удачи.
з.ы. всем сомневающимся, цвет есть неотъемлимое свойство материала.
Ты молод, креативен, талантлив?
Амбициозен, уверен в себе, полон свежих идей?
А делать хоть что-нибудь умеешь?!
sp00n
UNITрон
 
Сообщения: 254
Зарегистрирован: 27 фев 2010, 20:43

Re: Цвет меша как?

Сообщение gnoblin 02 мар 2010, 14:08

sp00n, просьба не умничать :-c .

Для подсветки объекта достаточно кода который я написал выше.
Чтобы узнать как называется свойство с цветом - надо открыть исходник шейдера и посмотреть в самом начале как это свойство, собственно, называется:
Код: Выделить всё
Shader "seethrough" {
Properties {
      _Color ("Main Color", Color) = (1,1,1,1)
      _BlendColor ("BlendColor, Alpha", Color) = (1,1,1,1)
      _MainTex ("Base (RGB)", 2D) = "white" {}
   }

//тут цвет - это "_Color"

Исходники стандартных шейдеров по-умолчанию не открываются - но это можно исправить, скачав небольшой архивчик с оф. сайта http://unity3d.com/support/resources/assets/built-in-shaders.

В основном цвет так и будет называться: "_Color".
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Цвет меша как?

Сообщение Mr_Anderson 02 мар 2010, 15:01

Можно чё та типа того:
Код: Выделить всё
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

/// <summary>
/// Базовый класс-компонент для реализации подсветки объекта
/// </summary>
public class HighlightBase : MonoBehaviour
{   
    MeshRenderer[] renderers;
    List<Color> originMatColors;
    List<Color> highlightMatColors;
    List<Color> dragHighlightMatColors;
    int renderersCount;

    /// <summary>
    /// Инициализировать настройки рендеров заданного объекта
    /// </summary>
    /// <param name="go"></param>
    protected void InitRendersSettings(GameObject go)
    {
        // запоминаем оригинальные цвета всех материалов дочерних объектов
        originMatColors = new List<Color>();
        highlightMatColors = new List<Color>();
        dragHighlightMatColors = new List<Color>();
        renderers = go.GetComponentsInChildren<MeshRenderer>();
        renderersCount = renderers.Length;
        foreach (MeshRenderer r in renderers)
        {
            originMatColors.Add(r.material.color);
            // расчитываем подсвеченные цвета
            highlightMatColors.Add(Color.Lerp(Color.green, r.material.color, 0.1f));
            dragHighlightMatColors.Add(Color.Lerp(Color.yellow, r.material.color, 0.1f));
        }
    }

    /// <summary>
    /// Установить (вернуть) оригинальные цвета объекта
    /// </summary>
    protected void SetOriginalColors()
    {
        for (int i = 0; i < renderersCount; i++)
            renderers[i].material.color = originMatColors[i];
    }

    /// <summary>
    /// Установить подсвеченные цвета объекта
    /// </summary>
    protected void SetHighlightColors()
    {
        for (int i = 0; i < renderersCount; i++)
            renderers[i].material.color = highlightMatColors[i];
    }

    /// <summary>
    /// Установить подсвеченные цвета объекта при его перетаскивании или движении
    /// </summary>
    protected void SetDragHighlightColors()
    {
        for (int i = 0; i < renderersCount; i++)
            renderers[i].material.color = dragHighlightMatColors[i];
    }
}

потом наследников с нужным функционалом реализовать ;)
Mr_Anderson
UNIт
 
Сообщения: 143
Зарегистрирован: 16 апр 2009, 13:32

Re: Цвет меша как?

Сообщение sp00n 02 мар 2010, 15:14

больше не буду :^o
просто, если человек пишет скрипт, который выбирает обьект с неизвестным этому человеку шейдером материала, в котором неизвестно как обозвали цвет, то... это типичный случай плохой организации работы над проектом и шарингом ресурсов :)
Я хотел сказать, что можно не обращаться напрямую к шейдеру через параметр _Color в скрипте.
Вот так к примеру:
Синтаксис:
Используется csharp
public GameObject ob;
...
if (ob)
{
  ob.renderer.material.color = Color.red;
}

Успехов.
з.ы. а так да, gnoblin ты абсолютно прав и всем участникам проекта надо договориться между собой в шейдерах для материалов обозвать параметр цвет как _Color.

правка: хороший класс, Mr_Anderson, мб в тему Tips & Tricks его засунуть?:)
Последний раз редактировалось sp00n 02 мар 2010, 15:59, всего редактировалось 1 раз.
Ты молод, креативен, талантлив?
Амбициозен, уверен в себе, полон свежих идей?
А делать хоть что-нибудь умеешь?!
sp00n
UNITрон
 
Сообщения: 254
Зарегистрирован: 27 фев 2010, 20:43

Re: Цвет меша как?

Сообщение Mr_Anderson 02 мар 2010, 15:23

Ну после некоторой правки такой класс может кому и сгодится под задачу ;) меня такая подсветка пока устраивает.
Mr_Anderson
UNIт
 
Сообщения: 143
Зарегистрирован: 16 апр 2009, 13:32

Re: Цвет меша как?

Сообщение Tolking 02 мар 2010, 16:32

Не! ob.renderer.material.color = Color.red; лучше :)
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Цвет меша как?

Сообщение sp00n 02 мар 2010, 16:46

Зависит от задачи. Мне, например, класс от Mr_Anderson нравится больше, правда, могут возникнуть глюки с альфой на каких-нибудь специфических материалах, но это все можно доработать напильником.
з.ы. Tolking, если тебе подходит какой-нибудь из перечисленных вариантов и оно даже работает, как надо, то добавь в название темы (РЕШЕНО) :)
Ты молод, креативен, талантлив?
Амбициозен, уверен в себе, полон свежих идей?
А делать хоть что-нибудь умеешь?!
sp00n
UNITрон
 
Сообщения: 254
Зарегистрирован: 27 фев 2010, 20:43

Re: Цвет меша как?

Сообщение Tolking 05 мар 2010, 12:53

material.color = Color.red; Такое ощущение, что просто сносит все настройки материалов. Изначально меш полупрозрачный зеленый, если я назначаю цвет, то он становится непрозрачным, того цвета, какого я назначил...

Мне нужно другое поведение. При назначании красного цвета, объект должен оставаться таким какой он есть, но цвет должен быть сдвинут в красную сторону. Если объект зеленый полупрозрачный, то при дабавлении красного он должен стать желтым полупрозрачным.
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Цвет меша как?

Сообщение Neodrop 05 мар 2010, 12:59

Color.Lerp(Color.green, Color.red, .5f);

Это без альфы если. Альфу отдельно контроллируй к примеру.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Цвет меша как?

Сообщение Tolking 05 мар 2010, 14:28

Это опять приходим к началу. Нужно знать какой материал наложен на объект и как на него повлияет Color. :(

Теперь понятно нафига такой "гиморой" изобрел Mr_Anderson...

Кстати еще 2 связанных вопроса как сделать объект полупрозрачным (EntityAlpha)? Как сделать объект полностью освещенным со всех сторон (FullBright)?
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

След.

Вернуться в Скрипты

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8