Создание игр с нуля на Unity. Часть 3.
Содержание
Продолжим разбираться с движком Unity и созданием игр с нуля. Как вы помните, в прошлой статье Создаем игру с нуля на Unity. Часть 2 мы рассмотрели некие основы движка и написали наш первый код на C#. Конечно, он был скучным и неинтересным, так как выводил только сообщение в консоль. Но, несмотря на это, мы рассмотрели пару методов и разобрались где брать информацию о классах. В продолжении разберем больше примеров и базовых операций с объектами используя наш код.
Доступ к объекту в коде
В прошлой статье мы написали пару строк кода. Теперь попробуем написать немного больше. Очень часто нам нужно получить доступ к объекту внутри кода, что бы так или иначе воздействовать на него в процессе игры.
Я создал для этого новый 3D объект, Capsule. Вы можете выбрать какой вам больше по душе, заодно попробовать добавить материал/текстуру на него, что бы вспомнить как это делается. Теперь создадим новый скрипт CapsuleScript и поместим его на нашу сцену. Сделать это можно описаным в предыдущей статье способом, или же нажать кнопку Add Component и выбрать созданный нами скрипт.
Теперь откроем его в нашем редакторе. Добавим в метод Start следующую строку:
GameObject.Find("Capsule");
Как мы получили доступ к объекту.
Давайте в двух словах разберемся что же мы такого только что сделали. Мы использовали метод Find в классе GameObject. Название метода говорит само за себя. Передаваемый параметр у нас это строка “Capsule”. Грубо говоря, мы просим наш код найти объект с таким именем. Данный метод возвратит нам наш объект или null если такого нет. Сам же объект GameObject – это базовый класс для всех объектов в Unity. Более детально про данный класс и метод можно почитать в документации. Это будет очень полезно на начальных этапах знакомства.
Повернем объект с помощью кода.
Давайте сделаем с объектом что-то видимое. Для этого добавьте такой код в метод Start, запустите, а после – мы его детально разберем.
GameObject.Find("Capsule").transform.Rotate(new Vector3(25, 25, 25));
Вот что у меня получилось в итоге с объектом Capsule: он немного наклонился.
Теперь приступим к разборкам. Когда мы нашли объект Capsule, мы вызвали его свойство transform. Данное свойство хранит объект Transform. В итоге, мы вызываем у этого объекта Transform метод Rotate, который принимает другой объект – трехмерный вектор: наклоны по осям. Я установил эти углы по 25 градусов. Попробуйте свои варианты и посмотрите как это будет влиять на конечный результат. Перейдите в документацию и посмотрите все эти методы и параметры, что бы разобраться какие их них и как вы можете использовать, ведь документацией вам прийдется пользоваться постоянно.
Помещаем скрипт на текущий объект.
Перед тем, как идти дальше, давайте сделаем еще кое-что. Вспомним, что мы добавляли наш скрипт на пустой объект MainScript. В этот раз давайте удалим его. Теперь наш код при запуске не будет отрабатывать. Давайте добавим наш скрипт непосредственно на наш объект Capsule. Для этого выберите его и нажмите кнопку Add Component. Найдите наш скрипт CapsuleScript, или как вы его там у себя назвали.
Проверим что он у нас работает запустив игру. Теперь откройте наш скрипт и отредактируйте его таким образом
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CapsuleScript : MonoBehaviour { // Start is called before the first frame update void Start() { transform.Rotate(new Vector3(25, 25, 25)); } // Update is called once per frame void Update() { transform.Rotate(Vector3.left * (50 * Time.deltaTime)); } }
Здесь мы удалили поиск нашего объекта. А все потому что нам незачем его искать здесь, так как мы добавили этот скрипт на сам объект. Потому, используя свойство transform, применятся все будет на наш объект. Если же вы, вдруг, захотите получить доступ к любому другому объекту с текущего – тогда вам прийдется использовать метод Find.
Также, в скрипте мы добавили поворот в метод Update. Теперь наш главный объект будет поворачиваться постоянно. Запустите игру и убедитесь сами.
Двигаемся под музыку.
Звуковые эффекты и музыка составляет неотъемлемую часть любой игры. Именно музыка дополняет атмосферу, а звук привносит детали. Давайте и мы добавим что-то такое в нашу созданную, пока еще нельзя назвать, игру.
Как всегда, давайте скачаем готовую музыку. Можете найти что-то на свое усмотрение, я же решил добавить вот эту, с названием “Spooky 60sSciFi Loop” Теперь создадим пустой объект на нашей сцене, назовем его, например, Audio и поместим туда выбранную аудиодорожку.
В инспекторе есть немного настроек. Вот как настроил их я:
Давайте взглянем на них вкратце. Здесь есть чекбокс Loop – это значит что наша мелодия будет повторятся по-кругу постоянно. Play on awake – воспроизводится сразу при запуске, так же настройки громкости и звука. Проще разобраться практическим путем.
В итоге, вот такой трешачок у меня вышел:
RigidBody – Жесткие тела. Добавление физики в игру
Не знаю, как вам, но мне не хватает жесткости в созданном игровом мире. Если бы тела вели себя как жесткие – это развеяло бы мою грусть. Как вы заметили, добавленные объекты у нас просто висят в воздухе. Такое может быть. В каком-то мире без гравитации. Но, если мы хотим имитировать наш мир – то будет неплохо применить физику в игре: что бы объекты падали, отскакивали, реагировали друг на друга, были твердыми и упругими как попа у Ким. Давайте добавим сферу на нашу сцену, а дальше – будем разбираться с физикой в игре. Заставим наш шар упасть.
Что бы это сделать, нужно выбрать наш объект и в Инспекторе добавить компонент RigitBody. Запустив игру, вы моментально увидите что объект начнет падать под действием силы гравитации.
Соответственно, как и везде, вы можете редактировать параметры в инспекторе: массу, гравитацию и прочее. Несмотря на то, что объект падает, все же что-то неестественное происходит при соприкосновении с поверхностью. Вы наверное заметили, что объект, падая, не отскакивает обратно, как это происходит в реальном мире. Поправим это. Для этого добавим физический материал. Он не будет влиять на отображение нашего объекта. Он будет влиять на то, как материал ведет себя при взаимодействии с другими объектами. Резиновый и стеклянный шар будут по разному прыгать при броске.
Создадим наш физический материал. Для этого выберите в контекстном меню Create > Physic Material.
Как и везде, для этого материала существуют свои параметры и вы можете их настроить. Давайте установим для нашего материала Bounciness = 0.8 и Bounce Combine = Maximum
Не забываем применить этот материал на наш объект, просто перетянув его. Запустим игру и убедимся что все работает: наш шар падает и отскакивает от поверхность. Изменяя параметр Bounciness (прыгучесть) вы можете контролировать то, как сильно он отскакивает от поверхности вверх. Поиграйтесь с этим значением. Вот что в итоге вышло у меня:
Продолжение в следующей статье: Создание игр. Столкновение объектов в Unity. Часть 4
Читаю ваш, уже объемный материал по созданию игр. Легкой рукой пишите.
У меня вот вопрос, в связи с этим. Можно ли будет создавать игры под web?
И опишите ли вы данный способ.
Да, конечно. Можно создавать и под веб. На данный момент такой цели нет. Главная задача – разобраться в основах и создать небольшую игру. Возможно в дальнейшем опишу в одной из статей как сделать и запустить под веб.