Статьи

Построение 3D-симуляций в Unity3D, часть 3

Добро пожаловать в заключительную статью этой серии блогов, состоящей из трех частей, посвященной Unity 3D. В этой серии мы создаем простую 3D-игру в Unity3D с богатым управлением. В первой части рассказывалось, как настроить Unity3D, а во второй части рассказывалось, как управлять Unity3D с помощью C # .

В этом последнем посте этой серии мы собираемся углубиться в превращение этого кода в простую игру с использованием Unity3D.

Давайте начнем

Давайте построим несколько уровней и поработаем над более игровыми действиями и конечной целью.

Сначала давайте добавим стены мира, чтобы придерживаться. Чтобы сделать это, мы собираемся добавить кучу кубов и поработать, чтобы масштабировать и расположить их на месте, используя практики из предыдущих.

Давайте перейдем к Scene View в редакторе Unity. Нажмите в представлении иерархии (при этом ничего не выделено) и создайте еще один пустой объект. Очистите его преобразование (0,0,0) и назовите этот объект «Мир».

Unity3D.3.1

Затем мы захотим очистить некоторые старые объекты, которые нам больше не нужны. Давайте удалим белый куб и сферу, которые мы добавили для тестирования.

Unity3D.3.11

Теперь, когда выбран объект World , давайте добавим куб. Тогда давайте изменим его значения положения и масштаба на равные Положение 0, 2.5, 0 и Масштаб 10, 5, 1. Это дает нам стену длиной 10 единиц, высотой пять единиц и шириной в одну единицу.

Unity3D.3.12

Теперь давайте расположим нашу Сцену Камеры, чтобы иметь вид сверху вниз. Нажмите зеленую букву Y в правом верхнем углу экрана.

Unity3D.3.13

Unity3D.3.14

Теперь поверните стену на 90 градусов и установите положение на -5, 2,5, 5.

Unity3D.3.15

Давайте тогда добавим дубликат стены. Щелкните правой кнопкой мыши по нему, продублируйте, а затем установите его позицию X на 5.

Unity3D.3.16

Выберите обе стены, которые у нас есть, а затем дублируйте их еще раз. С обоими выбранными, давайте сделаем их значение Z-позиции 15.

Unity3D.3.17

Когда они все еще выбраны, снова продублируйте и переместите их в положение Z 25 и положение X -10.

Далее мы собираемся использовать новый инструмент, который будет вращать их вместе. В правом верхнем углу находится группа из 5 кнопок. Мы собираемся выбрать среднюю кнопку и затем установить вращение Y на 0.

Unity3D.3.18

Unity3D.3.19

Затем мы выберем Стену (4), сделаем ее шкалу Х шкалой 30, чтобы увеличить длину.

Unity3D.3.20

Затем выберите Стену (2) и установите ее шкалу X также на 30.

Unity3D.3.21

Затем выберите Стена и Стена (3), продублируйте их и установите дубликаты в положение X -15.

Unity3D.3.22

Затем выберите Стену (2), продублируйте ее и установите ее позицию X на -25.

Unity3D.3.23

Теперь давайте сделаем наши скорости немного более дружелюбными с этим курсом.

Выберите объект Player в иерархическом представлении и измените значения «Скорость движения» и «Скорость поворота» в редакторе инспектора. Мне нравится 5 для вперед и 50 для поворота.

Unity3D.3.24

Теперь давайте добавим цель в игру. Давайте добавим область, в которой есть коллайдер, который срабатывает при пересечении финишной линии.

Сначала давайте добавим область финиша. Мы будем использовать другой куб, чтобы установить границы. В окне иерархии, где ничего не выбрано, добавьте куб, щелкнув правой кнопкой мыши 3D-объект -> Куб. Давайте назовем его Finish, установим его положение на -10, 2.5, 15 и установим его масштаб на 5, 5, 5.

Unity3D.3.25

Далее давайте дадим ему новый материал. Щелкните правой кнопкой мыши в окне Активы и выберите Создать -> Материал. Давайте установим его Albedo на 00B6006B, а затем изменим режим рендеринга на «Прозрачный». Это делает его прозрачным.

Unity3D.3.26

Затем нам нужно отредактировать Finish Cube Collider ; вместо того, чтобы добавлять физику, мы хотим, чтобы она отключала столкновения и просто запускала. Мы делаем это, выбирая объект Finish , и в инспекторе в Box Collider установите флажок «Is Trigger». Это заставит двигатель OnTrigger методы OnTrigger .

Unity3D.3.27

Затем давайте добавим Script к объекту Finish, чтобы контролировать, что произойдет, когда мы закончим. Давайте назовем его FinishController и откроем его в MonoDevelop. Давайте тогда добавим новую функцию, а затем войдем в систему, когда мы войдем в объект.

1
2
3
void OnTriggerEnter(Collider collider){
    Debug.Log( “Finished” );
}

Unity3D.3.28

Теперь нажмите Play. Мы должны быть в состоянии путешествовать по всему миру и найти Finish куб. Как только мы перейдем в куб, мы сможем открыть окно консоли и увидеть сообщение «Закончено».

Unity3D.3.29

Unity3D.3.30

Теперь вместо того, чтобы регистрировать сообщение, давайте настроим его так, чтобы оно отображало сообщение на дисплее, чтобы показать пользователю. Мы скажем, что они закончили игру, а затем добавим кнопку, чтобы перезапустить игру.

Сначала нам нужно добавить объект Text в наш мир. Перейдите в представление иерархии, щелкните правой кнопкой мыши и выберите UI => Текст. Это добавит к нашей сцене три вещи: один — это текстовый объект, который должен находиться в порту просмотра камеры, два — это Canvas, который является настройками и иерархией позади графического интерфейса, и три — это EventSystem которая позволяет EventSystem события и захватывать их. графический интерфейс, как перетаскивание.

Unity3D.3.31

С текстом сложно работать, пока мы находимся в Scene View, поэтому давайте переключимся на Game View.

Unity3D.3.32

Теперь мы должны видеть в правом нижнем углу поле «Новый текст». Давайте выберем текстовый объект в иерархическом представлении. В Инспекторе мы можем редактировать текст; установите его положение на 0, 0, 0, ширину на 500 и высоту на 500. Установите для текста значение «Вы закончили», формат — полужирный, с размером шрифта 80 и красным цветом.

Unity3D.3.33

Давайте теперь откроем наш FinishedController Script и добавим немного кода. Сначала нам нужно получить доступ к библиотеке пользовательского интерфейса. Итак, в верхней части нашего скрипта нам нужно добавить, используя UnityEngine.UI , а затем давайте добавим public Text finishedText UnityEngine.UI , чтобы мы могли получить доступ к нашему текстовому элементу.

Unity3D.3.34

Теперь вернемся к редактору. Давайте щелкнем на объекте «Законченный» куб и перетащим наш объект «Текст» в поле «Готовый текст» скрипта.

Unity3D.3.35

Теперь у нас есть доступ к текстовому элементу. Чтобы настроить наш текст, напишем в нашем FinishedController -> Start function finishedText.text = “” ; это в некотором смысле скрывает наш текст, делая его пустым, когда мы запускаем нашу игру.

Unity3D.3.36

Теперь давайте перейдем к нашей функции OnTriggerEnter и добавим код, чтобы написать «You Finished» в тексте.

Unity3D.3.37

Теперь нажмите Play. Мы должны увидеть, как текст исчезает, как только начинается игра. Как только вы найдете финиш и перейдете в куб, он должен дать вам готовый текст.

Unity3D.3.38

Unity3D.3.39

Теперь давайте сделаем то же самое, что и текст, но на этот раз добавим кнопку. Нажмите кнопку и в инспекторе измените текст, чтобы перезапустить игру. Давайте оставим это в положении по умолчанию.

Unity3D.3.40

Теперь давайте перейдем к FinishController и добавим еще один общедоступный элемент пользовательского интерфейса: открытая кнопка restartButton .

Unity3D.3.41

И вернемся к Инспектору для объекта «Готово». Давайте перетащим нашу кнопку, чтобы restartbutton .

Unity3D.3.42

Давайте добавим немного кода в функцию запуска. Мы хотим скрыть код, чтобы мы не видели его все время, а также некоторый код для сброса. Сначала скрываем, что мы можем добавить restartButton.gameObject.SetActive(false) , это будет скрывать игровой объект. Затем в OnTriggerEnter нам нужно изменить это с помощью restartButton.gameObject.SetActive(true); ,

Unity3D.3.43

Затем в FinishController давайте добавим публичную функцию void с именем RestartGame() . Это будет функция, которую мы вызываем в контроллере on click для кнопки. Также в функцию, давайте добавим код для перезагрузки нашей сцены при нажатии, добавим еще один оператор using в верхнюю часть файла, используя UnityEngine.SceneManagement; , Затем давайте добавим код в RestartGame Function SceneManager.LoadScene(“Main Scene”); , Это должно быть то, что вы назвали своей сценой в строке, иначе она изменит вашу сцену вместо ее перезагрузки ( Main.Scene ).

Unity3D.3.44

Теперь мы можем перейти к представлению иерархии и выбрать объект Button. В инспекторе внизу находится On Click Controller по щелчку. Мы хотим нажать на знак + и добавить только новую среду выполнения. Затем мы перетащим объект « Finish игру» в раскрывающийся список, нажмите на функцию « no и выберите « FinishController => RestartGame .

Unity3D.3.45

Unity3D.3.46

Теперь давайте играть.

Теперь вы должны быть в состоянии пройти до конца игры. После запуска финиша вы должны получить сообщение «You Finished» и кнопку «Restart Game». Если вы нажмете кнопку «Перезагрузить игру», она позволит вам снова пройти игру.

Unity3D.3.47

Заворачивать

Конец!

Теперь вы сможете создавать простую 3D-игру или приложение в Unity3D с широкими возможностями управления. Пожалуйста, оставляйте любые комментарии или вопросы, которые у вас есть. Спасибо за чтение!