Вы сейчас тут: Главная » Каталог статей » Обучающие статьи
Real Time объединение текстур через GUI
Категория: Обучающие статьи | Просмотров: 1112 | Добавил: 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
Категории раздела
Категории материалов
Голосование
Опрос пользователей
Оцените сайт
Всего ответов: 62
Результаты
Статистика
Сатистика на сайте

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