Similar presentations:
Классы объектов
1.
Как работать с группойигровых объектов?
2. Группу похожих объектов можно отнести в отдельный класс
Например, враждебные NPCпредставляют отдельный класс —
«враги». У врагов есть общие
свойства — уровень и здоровье,
а также поведение — они нападают
на главного героя и наносят ему
урон.
«Doubt» monster
from Psychonauts 2.
«Bad idea» monster
from Psychonauts 2.
3. Класс может быть поделён на подклассы со своими особыми свойствами и поведением
На разных этапах игры главному персонажу попадаются враги с разнымуровнем и количеством здоровья, а также разными методами борьбы.
Враги подкласса «Сомнение» очень
медленные, но у них много здоровья и
они кусаются
Враги подкласса «Плохая идея» плюются
лампочками, которые взрываются при
столкновении с игроком
4. Классы объектов
5. Классы позволяют группировать объекты по общим признакам
Взгляните на приведённые ниже характеристики. Какой классобъектов они описывают?
Свойства
Поведение
Максимальная скорость
Движение вперёд/назад
Объём двигателя
Ускорение движения
Цвет корпуса
Торможение
Тип кузова
Поворот колёс
6. Эти характеристики описывают класс автомобилей!
Если бы мы делали игру по типу Need for Speed, то мы создали бы класс,описывающий все машины, хотя каждая из них является уникальным
объектом.
В NFS Heat все автомобили имеют
общие свойства: объём двигателя,
максимальную скорость, показатель
ускорения, значение закиси азота
Need for Speed Heat.
Ghost Games, 2019.
7. Сегодня мы начнём работать над 3D-платформером!
1.2.
3.
4.
5.
6.
Скачайте файл с проектом 3D Platformer.
Распакуйте этот файл в папку UnityProjects.
Откройте в Unity Hub вкладку Projects.
Найдите кнопку Open и нажмите на стрелку рядом с ней.
Выберите опцию Add project from disk.
Найдите папку с проектом и нажмите на кнопку Add Project.
8. На этом уроке вы создадите для платформера интерактивные объекты четырёх типов
Телепорты помогают игроку перемещаться между труднодоступнымилокациями, батуты и ускорители — меняют свойства игрока, а ловушки —
возвращают игрока в начало игры.
Телепорт
ы
Столкновение объектов
Батуты
Ускорители
Ловушки
9. Сейчас мы сфокусируемся на ускорителях!
Какие поля и методы вам могут понадобиться для создания классаускорителей?
Телепорт
ы
Столкновение объектов
Батуты
Ускорители
Ловушки
10. Создадим ментальную карту характеристик класса «Ускорители»
ПоляЗначение ускорения
Ускорители
Увеличение скорости при попадании
игрока в область ускорения
Методы
Уменьшение скорости при выходе
игрока из области ускорения
11. Но как класс ускорителей поймёт, что игрок попал в область ускорения?
12. Для этого игровым объектам нужно добавить специальный компонент — коллайдер
Коллайдер (от англ. «collide» — сталкиваться) — это невидимая оболочкаобъекта, которая позволяет ему отслеживать столкновения.
Помимо коллайдера кубической формы в Unity
встроены коллайдеры сферической и капсульной форм
Коллайдер есть
у любого примитива
в Unity, но не всегда есть
у моделей объектов,
которые загружены из
внешних источников.
Из-за этого их можно
проходить насквозь!
13. Добавим коллайдер стрелкам, которые ускоряют бег игрока
12
3
1.
Найдите в окне Hierarchy объект
Arrows.
2. В окне Inspector найдите опцию
Add Component.
3. В появившемся меню выберите
Physics → Box Collider —
кубический коллайдер отлично
подойдёт для стрелок.
Форма коллайдера
не обязательно повторяет форму
объекта — она может быть любой.
14. Настроим размер коллайдера — области столкновения
1.Активируйте режим
редактирования коллайдера,
нажав на значок Edit Collider,
— на области коллайдера
появятся специальные
отметки.
2. Нажмите на нужную отметку
и, зажав кнопку мыши,
растяните коллайдер на всю
длину объекта Arrows.
Отметки по краям меняют ширину и длину
коллайдера, а отметки в центре — высоту
15. Чтобы коллайдер сообщал о столкновениях скрипту, из него нужно сделать триггер
Чтобы коллайдер стал триггером,отметьте галочкой опцию Is Trigger
Триггер (от англ. «trigger» —
вызывать) — тип коллайдера,
который сообщает скрипту о
столкновении одного
коллайдера с другим и тем
самым вызывает специальные
методы, определяющие события
после столкновения.
Когда коллайдер объекта становится триггером, сам объект перстаёт быть твёрдым —
его можно пройти насквозь!
16. Всего таких методов три:
void OnTriggerEnter(Collider other){...
}
Исполняется, когда другой
(other) коллайдер входит
в область коллайдера-триггера.
void OnTriggerStay(Collider other){
...
}
Исполняется, когда другой
(other) коллайдер находится
в области коллайдера-триггера.
void OnTriggerExit(Collider other){
...
}
Исполняется, когда другой
(other) коллайдер выходит
за область коллайдера-триггера.
17. Создадим скрипт для ускорителей:
using System.Collections;using System.Collections.Generic;
using UnityEngine;
public class SpeedTrigger : MonoBehaviour
{
как объявить переменную
speedFactor и присвоить ей значение?
}
1.
Создайте скрипт и назовите его
SpeedTrigger.
2. Создайте в начале класса
SpeedTrigger поле speedFactor:
a. модификатор доступа — public;
b. тип данных — float;
c. значение — 2.5f.
18. Определим поведение ускорителей:
using System.Collections;using System.Collections.Generic;
using UnityEngine;
public class SpeedTrigger : MonoBehaviour
{
public float speedFactor = 2.5f;
void OnTriggerEnter(Collider other)
{
}
void OnTriggerExit(Collider other)
{
}
}
1.
Удалите методы Start( ) и Upload( )
— они нам не понадобятся.
2. Добавьте после поля speedFactor
два метода — OnTriggerEnter( )
и OnTriggerExit( ).
Важно! Методы, как и классы, содержат
сразу несколько команд, поэтому для них
нужно обозначить блок кода.
19. Как обратиться к свойствам игрока и изменить их? Получить значение нужного компонента объекта!
Метод класса GameObject,который получает значение
компонента указанного
игрового объекта
Свойство компонента,
значение которого нужно
найти в указанном
компоненте
объект.GetComponent<компонент>( ).свойство = новое значение;
Объект класса GameObject,
компонент которого нужно
получить
Имя нужного компонента.
Помните, что скрипты — это
те же самые компоненты
игрового объекта!
Заметьте, что для обращения к свойствам и методам класса используется точка.
20. Поэтапно разберём эту команду на примере команды для увеличения значения скорости бега игрока
Первое, что нам нужно — это обозначить объект, чьё значение скоростибега нам нужно поменять.
объект.GetComponent<компонент>( ).свойство = новое значение;
Скорость бега нужно поменять у того объекта,
который коснулся коллайдера-триггера. Сослаться
на такой объект мы можем с помощью ключевого
слова other (с англ. «другой»).
Триггер, к которому
прикреплён скрипт
ускорения
Другой по
отношению
к триггеру
объект
21. Теперь нам нужно найти компонент, который содержит такое свойство, как скорость бега
other.GetComponent<компонент>( ).свойство = новое значение;Такой компонент есть у игрового объекта Player.
В окне Inspector он называется First Person
Movement, но обращаться к компоненту нужно
по имени, которое дано скрипту —
FirstPersonMovement (без пробелов).
Это имя соответствует классу, который
и содержит поле с нужным нам значением!
22. Нужный компонент мы определили, теперь нужно понять, где в этом компоненте хранится скорость бега
other.GetComponent<FirstPersonMovement>( ).свойство = новое значение;Чтобы открыть нужный скрипт,
щёлкните по его имени в поле Script.
В Inspector это
свойство Run Speed!
Обратите внимание,
что в самом скрипте
нужное поле записано
как runSpeed!
23. Левая часть команды готова, осталась правая!
other.GetComponent<FirstPersonMovement>( ).runSpeed= новое значение;
24. Получите свойство игрока, отвечающее за скорость бега, и измените его значение:
using System.Collections;using System.Collections.Generic;
using UnityEngine;
public class SpeedTrigger : MonoBehaviour
{
public float speedFactor = 2.5f;
void OnTriggerEnter(Collider other)
{
//Увеличение скорости бега игрока
как полученное значение скорости бега
умножить на значение ускорения?
}
}
void OnTriggerExit(Collider other)
{
//Понижение скорости бега игрока
допишите эту часть самостоятельно
}
1.
Внутри блока кода метода
OnTriggerEnter( ) измените
свойство runSpeed компонента
FirstPersonMovement —
умножьте его на переменную
speedFactor.
2. Измените то же самое свойство
для метода OnTriggerExit( ) —
разделите его на переменную
speedFactor.
25. Отлично, скрипт для ускорителей готов!
using System.Collections;using System.Collections.Generic;
using UnityEngine;
public class SpeedTrigger : MonoBehaviour
{
public float speedFactor = 2.5f;
void OnTriggerEnter(Collider other)
{
//Увеличение скорости бега игрока
other.GetComponent<FirstPersonMovement>().runSpeed *= speedFactor;
}
}
void OnTriggerExit(Collider other)
{
//Понижение скорости бега игрока
other.GetComponent<FirstPersonMovement>().runSpeed /= speedFactor;
}
1.
Добавьте скрипт
к объекту Arrows.
2. Запустите игру
и проверьте работу
скрипта: когда игрок
пробегает по
стрелкам, его бег
должен ускоряться,
помогая игроку
допрыгнуть до
другой части моста.
Если игрок вдруг останавливается перед мостом, проверьте
расположение моста — он может быть расположен так, что игрок
запинается о него
26. Когда вы создаёте систему столкновений, очень важно, чтобы:
1. Оба объекта имели коллайдеры и только один — триггер-коллайдер.2. У всех или одного из объектов был компонент Rigidbody (с англ. «твёрдое
тело»).
Rigidbody применяет к объекту
физические законы. В нашем
проекте он уже добавлен к игроку
programming