Учебные материалы для школы программирования. Часть 8

Spoiler

Продолжим “природную” тематику. Ранее, мы учились делать деревья, построили простой домик, а сегодня добавим чуточку света! Создав простую сцену, мы научимся основам работы с динамическим освещением, различными видами источников света и создадим фонарик.

Материалы к уроку здесь. Ну что, поехали!

Порядок выполнения

Начнем с нового проекта, и, для экономии времени и сил, добавим в него ассет Nature Starter Kit 2.

Откроем демо-сцену.

Удалим из неё камеру, добавим игрока от первого лица из ассета Characters, и импортируем дом из прошлого урока.

Видно, что дом абсолютно белый и мы проходим сквозь него. Перейдём в настройки импорта модели и выставим галочку Generate Colliders.

Далее, перейдём во вкладку материалов модели и сменим тип импорта материалов с Internal на External. Кликаем “принять”, при этом происходит импорт материалов из папок SketchUp. В итоге, дом становится материальным и раскрашивается в нормальные цаета.

Но дом “просвечивает” по углам – давайте избавимся от этой проблемы:

Для этого выставим компонентам Mesh Renderer параметр Cast Shadows в значение Two sided. Теперь, свет проходит только через окна.

Уберём синеву и снизим яркость света. Для этого откроем панель Lighting и выставим Ambient Color значение пониже.

Теперь, найдём источник направленного света и изменим его цвет и интенсивность. Сделаем почти чёрный цвет с лёгким синеватым оттенком.

Добавим на вход светильник — создадим сферу и новый для неё материал, выставим светимость материала в виде светло-серого цвета.

У сферы отключим отбрасывание теней.

Внутри сферы создадим 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;
    }
  } 
}

Закидываем его и указываем скрипту компонент, которым хотим управлять. При этом, мы должны отключить компонент света фонарика, чтобы при старте игры он был выключен.

Если учащиеся справились раньше, можно добавить звук включения / выклчюния фонарика: импортируем приложенный звуковой файл (в папке материалов к уроку), на объекте фонарика добавим компонент AudioSource и закинем в него звук, уберем чекбокс PlayOnAwake.

Код тоже придётся модифицировать, добавив обращение к 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 на ваш компьютер, модель дома не распознается.

Let’s block ads! (Why?)

Read More

Recent Posts

VK купила 40% билетной платформы Intickets.ru

VK объявляет о приобретении 40% компании Intickets.ru (Интикетс). Это облачный сервис для контроля и управления продажей билетов на мероприятия. Сумма…

6 часов ago

OpenAI готовится запустить поисковую систему на базе ChatGPT

OpenAI готовится запустить собственную поисковую систему на базе ChatGPT. Информацию об этом публикуют западные издания. Ожидается, что новый поисковик может…

15 часов ago

Роскомнадзор рекомендовал хостинг-провайдерам ограничить сбор данных с сайтов для иностранных ботов

Центр управления связью общего пользования (ЦМУ ССОП) Роскомнадзора рекомендовал компаниям из реестра провайдеров ограничить доступ поисковых ботов к информации на российских сайтах.…

2 дня ago

Apple возобновила переговоры с OpenAI и Google для интеграции ИИ в iPhone

Apple возобновила переговоры с OpenAI о возможности внедрения ИИ-технологий в iOS 18, на основе данной операционной системы будут работать новые…

6 дней ago

Российская «дочка» Google подготовила 23 иска к крупнейшим игрокам рекламного рынка

Конкурсный управляющий российской «дочки» Google подготовил 23 иска к участникам рекламного рынка. Общая сумма исков составляет 16 млрд рублей –…

7 дней ago

Google завершил обновление основного алгоритма March 2024 Core Update

Google завершил обновление основного алгоритма March 2024 Core Update. Раскатка обновлений была завершена 19 апреля, но сообщил об этом поисковик…

7 дней ago