2013-12-16 5 views
2

Я создаю приложение Vuforia, которое использует виртуальные кнопки. Я использовал пример виртуальных кнопок, и я нашел эту часть по сценариюКак я могу изменить цвет материала в Unity?

public void OnButtonPressed(VirtualButtonBehaviour vb) 
{ 
    Debug.Log("OnButtonPressed"); 

    if (!IsValid()) 
    { 
     return; 
    } 

    // Add the material corresponding to this virtual button 
    // to the active material list: 
    switch (vb.VirtualButtonName) 
    { 
     case "red": 
      mActiveMaterials.Add(m_TeapotMaterials[0]); 
      break; 

     case "blue": 
      mActiveMaterials.Add(m_TeapotMaterials[1]); 
      break; 

     case "yellow": 
      mActiveMaterials.Add(m_TeapotMaterials[2]); 
      break; 

     case "green": 
      mActiveMaterials.Add(m_TeapotMaterials[3]); 
      break; 
    } 

    // Apply the new material: 
    if (mActiveMaterials.Count > 0) 
     mTeapot.renderer.material = mActiveMaterials[mActiveMaterials.Count - 1]; 
} 

Как видно, я просто необходимо добавить код в каждом конкретном случае «делать что-то». Ну, я хочу, чтобы изменить цвет объекта. Объект fbx экспортируется из Maya и имеет анимацию. Я хочу изменить цвет сетки внутри объекта. Объект называется «путь», внутри которого есть 3 ячейки (polySurface1_MeshPart0, ..1, ..2), и каждая сетка имеет разные материалы, соответствующие различным частям сетки, они являются материалами без текстуры, просто сплошной цвет с рассеиванием шейдеров. Мне нужно изменить цвет одного из этих материалов в конкретной сетке объекта :)

Любая помощь очень ценится.

ответ

1

Из документации Unity3D: http://docs.unity3d.com/Documentation/ScriptReference/Material-color.html

Вы должны либо найти GameObjects во время выполнения с помощью GameObject.Find() или назначить их сценариев общественных членов. Каждая сетка должна быть восстановлена ​​как объект GameObject. Если у вас есть ссылка на GameObject в вопросе вы должны быть в состоянии получить доступ к его материал так:

myGameObject.renderer.material.color = Color.Red; 

Пример использования кода, предоставленного будет:

switch (vb.VirtualButtonName) 
{ 
    case "red": 
     mActiveMaterials.Add(m_TeapotMaterials[0]); 
     GameObject go = GameObject.Find("The Name Of The Object You Are Looking For"); 
     go.renderer.material.color = Color.Red; 
     break; 
} 
+0

Спасибо за ответ Xerosigma. Но у меня все еще есть проблемы, я использовал решение, которое вы мне дали, но это не сработало, я не знаю, что было не так, это просто не меняет цвет. Вот скриншот работы http://imageshack.com/a/img843/9475/if3b.png – Osuka42

+0

@ Osuka42 попробуйте следующее внутри красного футляра: Материал [] mats = go.renderer.materials; для (int i = 0; i

Смежные вопросы