Настройка персонажа обычно включает в себя выбор одной или нескольких текстур, которые определяют его внешность. В этом рецепте мы рассмотрим реализацию графического интерфейса, который позволит игроку создать своего персонажа путем объединения двух текстурных каналов.
Для этого рецепта нам понадобится 3d объект и графические файлы.
Скачать материал к уроку.
Для наложения текстур, выполните следующие действия:
Импортируйте Unity пакет с именем selectTexture в свой проект
Откройте сцену с именем selTextScene
Давайте создадим наш базовый материал: в окне Project, используйте выпадающее меню для создания нового материала. Назовите его selectableMaterial
Измените параметр Shader материала selectableMaterial на Decal. Затем примените текстуру с именем face1 в слот Base, а prop1 в слот Decal, как показано на следующем скриншоте:
Примените материал к объекту Avatar. Вы можете это сделать путем перетаскивания материала из окна Project на имя игрового объекта в окне Hierarchy
В окне Project создайте новый C# скрипт и назовите его SelectTexture
Откройте SelectTexture в редакторе скриптов и все замените следующим кодом:
using UnityEngine;
using System.Collections;
public class SelectTexture : MonoBehaviour{
public Texture2D[] faces;
public Texture2D[] props;
void OnGUI(){
for (int i = 0; i < faces.Length; i++)
if (GUI.Button(new Rect(0, i * 64, 128, 64),faces[i]))
ChangeMaterial("faces", i);
for (int j = 0; j < props.Length; j++)
if (GUI.Button(new Rect(128, j * 64, 128, 64),props[j]))
ChangeMaterial("props", j);
}
void ChangeMaterial(string category, int index){
if (category == "faces")
renderer.material.mainTexture = faces[index];
if (category == "props")
renderer.material.SetTexture("_DecalTex", props[index]);
}
}using UnityEngine;
using System.Collections;
public class SelectTexture : MonoBehaviour{
public Texture2D[] faces;
public Texture2D[] props;
void OnGUI(){
for (int i = 0; i < faces.Length; i++)
if (GUI.Button(new Rect(0, i * 64, 128, 64),faces[i]))
ChangeMaterial("faces", i);
for (int j = 0; j < props.Length; j++)
if (GUI.Button(new Rect(128, j * 64, 128, 64),props[j]))
ChangeMaterial("props", j);
}
void ChangeMaterial(string category, int index){
if (category == "faces")
renderer.material.mainTexture = faces[index];
if (category == "props")
renderer.material.SetTexture("_DecalTex", props[index]);
}
} Сохраните ваш скрипт и добавьте его к объекту Avatar
В окне Inspector измените значения Faces и Props на 2
В Faces, в Element 0 и Element 1 примените изображения face1 и face2 соответственно. Тоже самое сделайте и с Element 0 и Element 1 у Props, установив туда prop1 и prop2:
Запустите сцену. Вы сможете выбрать сочетание текстур, нажав на соответствующие кнопки:
Скрипт позволяет пользователю создать две коллекции текстур: первый для карты Base (с именем Faces), а другой для карты Decal (с именем Props). Когда сцена запущена, текстуры отображаются внутри GUI кнопок, которые можно использовать для изменения текстуры в материале игрового объекта Avatar путем вызова функции ChangeMaterial. Эта функция получает в качестве параметров обе категории (Face и Prop), индекс изображения, и назначение текстурной карты.
Этот рецепт может быть легко адаптирован для изменения параметров различных материальных шейдеров. В документации Unity можно узнать о других текстурных именах