Учебные материалы для школы программирования. Часть 8
Spoiler
Предыдущие уроки можно найти здесь:
Продолжим "природную" тематику. Ранее, мы учились делать деревья, построили простой домик, а сегодня добавим чуточку света! Создав простую сцену, мы научимся основам работы с динамическим освещением, различными видами источников света и создадим фонарик.
Материалы к уроку здесь. Ну что, поехали!
Порядок выполнения
Начнем с нового проекта, и, для экономии времени и сил, добавим в него ассет Nature Starter Kit 2.
Откроем демо-сцену.
![](https://habrastorage.org/getpro/habr/upload_files/15f/2fb/cda/15f2fbcda1144ebc241fc163682dd96d.png)
Удалим из неё камеру, добавим игрока от первого лица из ассета Characters, и импортируем дом из прошлого урока.
![](https://habrastorage.org/getpro/habr/upload_files/59a/5b9/228/59a5b92286fdd76dd30a9ded222c0b03.png)
Видно, что дом абсолютно белый и мы проходим сквозь него. Перейдём в настройки импорта модели и выставим галочку Generate Colliders.
![](https://habrastorage.org/getpro/habr/upload_files/bcb/927/401/bcb92740164c9548b05109eb370ba8b5.png)
Далее, перейдём во вкладку материалов модели и сменим тип импорта материалов с Internal на External. Кликаем "принять", при этом происходит импорт материалов из папок SketchUp. В итоге, дом становится материальным и раскрашивается в нормальные цаета.
![](https://habrastorage.org/getpro/habr/upload_files/bef/6da/927/bef6da927ea7ae6098cf79e7f604c110.png)
Но дом "просвечивает" по углам - давайте избавимся от этой проблемы:
Для этого выставим компонентам Mesh Renderer параметр Cast Shadows в значение Two sided. Теперь, свет проходит только через окна.
![](https://habrastorage.org/getpro/habr/upload_files/ea3/864/4b8/ea38644b8da18e61b97d95bba4e9b177.png)
Уберём синеву и снизим яркость света. Для этого откроем панель Lighting и выставим Ambient Color значение пониже.
![](https://habrastorage.org/getpro/habr/upload_files/cf3/70f/3e2/cf370f3e2c9bb7377c002778d15c5407.png)
Теперь, найдём источник направленного света и изменим его цвет и интенсивность. Сделаем почти чёрный цвет с лёгким синеватым оттенком.
Добавим на вход светильник — создадим сферу и новый для неё материал, выставим светимость материала в виде светло-серого цвета.
У сферы отключим отбрасывание теней.
Внутри сферы создадим Point Light, у которого увеличим дальность и выставим тип теней Soft Shadows.
Теперь, займёмся созданием фонарика. Для этого в игрока, во вложенный объект, который содержит камеру, добавим компонент Light и выставим его в режим Spot.
Добавим фонарику дальности и направим всего игрока на стену — так проще настраивать.
Зачастую, не обязательно увеличивать интенсивность света, бывает достаточно добавить дальность — это убережёт от "пересветов" на ближних дистанциях.
Также, свету можно добавить в параметр Cookie световое пятно. Импортированный пак содержит как минимум 2 готовые текстуры.
Это световое пятно добавит нашему фонарику необходимый эффект.
Теперь, сделаем так, чтобы фонарик можно было выключать. Для этого, создадим новый скрипт.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Flashlight : MonoBehaviour {
bool isOn = false;
public Light lightComponent;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(KeyCode.F)) {
isOn = !isOn;
lightComponent.enabled = isOn;
}
}
}
Закидываем его и указываем скрипту компонент, которым хотим управлять. При этом, мы должны отключить компонент света фонарика, чтобы при старте игры он был выключен.
![](https://habrastorage.org/getpro/habr/upload_files/ebd/aad/cf3/ebdaadcf3345ee7b503fcd7d90f98022.png)
Если учащиеся справились раньше, можно добавить звук включения / выклчюния фонарика: импортируем приложенный звуковой файл (в папке материалов к уроку), на объекте фонарика добавим компонент AudioSource и закинем в него звук, уберем чекбокс PlayOnAwake.
![](https://habrastorage.org/getpro/habr/upload_files/e83/55e/79f/e8355e79fbb5a2137ec4bbad6d31e0ad.png)
Код тоже придётся модифицировать, добавив обращение к AudioSource.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Flashlight : MonoBehaviour {
bool isOn = false;
public Light lightComponent;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(KeyCode.F)) {
isOn = !isOn;
lightComponent.enabled = isOn;
GetComponent<AudioSource>().Play(); // Звук фонарика
}
}
}
На этом этапе разбор динамического света и основных его источников можно считать завершённым.
В начале статьи, вы найдете ссылку на полный проект, но в случае с неустановленным SketchUp на ваш компьютер, модель дома не распознается.