Вы сейчас тут: Главная » Каталог статей » Обучающие статьи
Real Time объединение текстур через GUI
Категория: Обучающие статьи | Просмотров: 1107 | Добавил: Badman
Настройка персонажа обычно включает в себя выбор одной или нескольких текстур, которые определяют его внешность. В этом рецепте мы рассмотрим реализацию графического интерфейса, который позволит игроку создать своего персонажа путем объединения двух текстурных каналов.

Для этого рецепта нам понадобится 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 можно узнать о других текстурных именах

Комментарии пользователей
Количество комментариев к материалу: 0
Добавлять комментарии могут только зарегистрированные пользователи.
Регистрация   Вход
Авторизация
Форма входа на сайт
Чат
Удобное общение
200
Категории раздела
Категории материалов
Голосование
Опрос пользователей
Какую версию Unity3D вы используете?
Всего ответов: 124
Результаты
Статистика
Сатистика на сайте

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Все материалы опубликованные на сайте представлены исключительно для ознакомительного просьмота. Любое ваше несанкционированное использование "ассетов" в ваших коммерческих проектах карается уголовной ответственностью.
Хостинг от uCoz