forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Renderer.material.color сбрасывается (http://forum.boolean.name/showthread.php?t=20100)

ABTOMAT 24.11.2015 22:06

Renderer.material.color сбрасывается
 
Добрый день!
Столкнулся с такой фигнёй:

Создаю меш ручками из вершин в OnEnable.

Код:

_mesh = new Mesh();
gameObject.AddComponent<MeshFilter>().mesh = _mesh;
_renderer = gameObject.AddComponent<MeshRenderer>();

Далее вставляю буфера вершин/треугольников, и — главное — выставляю цвет материалу новоиспечённого рендерера:

Код:

_renderer.material.color = new Color(1,0,0);
Проверяю Debug.Log'ом — всё верно. 1,0,0,1 (красный).
Смотрю, что в игре делается. А в игре оно белое.
Проверяю тем же Debug.Log'ом material.color, но уже в Update. А там 1,1,1,1.

То есть в какой-то момент между созданием рендерера и собственно игрой цвет материала вновь становится белым.
Вотзефак?

Выставление цвета работает, если его прописать в Start().
Так что решается вопрос тем, что переносим в Start это дело.
Но хотелось бы разобраться в природе этого бага! Не люблю, когда что-то делается, а я даже не знаю, почему. Кто тут знаток, который может объяснить сей феномен?

ILonion 24.11.2015 23:43

Ответ: Renderer.material.color сбрасывается
 
У меня белым не становится. Запустил твой скрипт (без вершино-буферов):
http://puu.sh/lxlBC/bb5398b859.png

PHP код:

public class xclassMonoBehaviour
{
    private 
Mesh _mesh;
    private 
Renderer _renderer;

    
void Start()
    {
        
Debug.Log("start");
    }

    
void Update()
    {
        
Debug.Log("update: " _renderer.material.color);
    }

    
void OnEnable()
    {
        
Debug.Log("on enable");

        
_mesh = new Mesh();
        
gameObject.AddComponent<MeshFilter>().mesh _mesh;
        
_renderer gameObject.AddComponent<MeshRenderer>();

        
_renderer.material.color = new Color(100);

    }



ABTOMAT 25.11.2015 00:00

Ответ: Renderer.material.color сбрасывается
 
Блин ладно. Буду у себя искать.

pax 25.11.2015 14:21

Ответ: Renderer.material.color сбрасывается
 
Ты стандартный материал правишь, зачем?
Можешь рендереру выставить цвет, вместо самого материала, потому что _renderer.material делает копию материала.
PHP код:

Renderer.SetPropertyBlock(MaterialPropertyBlock properties



Часовой пояс GMT +4, время: 18:05.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot