Как написать 3d игру на unity3d

3D game development quickstart guide

Advanced best practice guides

To create a 3D game, set up your Unity project and then familiarize yourself with the relevant concepts in the following order:

  • Fundamentals
  • Scripting
  • 3D Assets
  • Building in-game environments
  • Animation
  • Graphics
  • Audio
  • Physics
  • User interface

Fundamentals

GameObjectsThe fundamental object in Unity scenes, which can represent characters, props, scenery, cameras, waypoints, and more. A GameObject’s functionality is defined by the Components attached to it. More info
See in Glossary
are fundamental objects in Unity that represent characters, props, scenery, and more. Every object in your game is a GameObject.

GameObjects live in 3D environments called scenesA Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces. More info
See in Glossary
. You can think of a scene as a game level, but it might also represent a menu, the credits at the end of the game or something else entirely.

The behavior of GameObjects is defined by blocks of functionality called components. You can attach multiple components to GameObjects. The following components are fundamental for 3D games:

  • Transform: the Transform componentA Transform component determines the Position, Rotation, and Scale of each object in the scene. Every GameObject has a Transform. More info
    See in Glossary
    determines the Position, Rotation, and Scale of each GameObject in the scene. Every GameObject has a Transform component.
  • Mesh FilterA mesh component that takes a mesh from your assets and passes it to the Mesh Renderer for rendering on the screen. More info
    See in Glossary
    : this component defines the shape of a 3D GameObject.
  • Mesh RendererA mesh component that takes the geometry from the Mesh Filter and renders it at the position defined by the object’s Transform component. More info
    See in Glossary
    : this component defines how the 3D shape defined by the MeshThe main graphics primitive of Unity. Meshes make up a large part of your 3D worlds. Unity supports triangulated or Quadrangulated polygon meshes. Nurbs, Nurms, Subdiv surfaces must be converted to polygons. More info
    See in Glossary
    Filter looks.
  • CamerasA component which creates an image of a particular viewpoint in your scene. The output is either drawn to the screen or captured as a texture. More info
    See in Glossary
    : specially-configured GameObjects that capture and display the world to the player.
  • RigidbodyA component that allows a GameObject to be affected by simulated gravity and other forces. More info
    See in Glossary
    : Rigidbodies allow GameObjects to interact with the Physics system, including gravity and collisionsA collision occurs when the physics engine detects that the colliders of two GameObjects make contact or overlap, when at least one has a Rigidbody component and is in motion. More info
    See in Glossary
    . See the Physics section of this guide.
  • CollidersAn invisible shape that is used to handle physical collisions for an object. A collider doesn’t need to be exactly the same shape as the object’s mesh — a rough approximation is often more efficient and indistinguishable in gameplay. More info
    See in Glossary
    : this component defines the shape of a 3D GameObject for the purpose of physical collisions.

Back to Top

Scripting

Unity allows you to create your own Components using scriptsA piece of code that allows you to create your own Components, trigger game events, modify Component properties over time and respond to user input in any way you like. More info
See in Glossary
. Scripts let you trigger game events, modify Component properties over time and respond to user input.
Unity supports the C# programming language natively.
Here some examples of how you can use scripts in your game:

  • To receive input from the player and have a GameObject move or act based on that input.
  • To set win and lose states which open relevant win or lose scenes to create a full game loop.
  • To affect the components of GameObjects, such as their transform, animation, or renderer, based on other variables.

For details on how to use scripts in Unity, see Scripting Overview.
To learn the fundamentals of scripting, follow the Unity Learn Beginner Scripting course.
For more in-depth guidance, see the example projects Create with Code and Creator Kit: Beginner Code.

Back to Top

3D Assets

Models are 3D representations of objects. The majority of the visuals for 3D games consist of models, such as characters, interactable objects, and the world around the player.

You can use tools like Probuilder to create models in Unity. However, these work best for prototyping, rather than for the final product.

To add more polished 3D assets to your final product, create 3D Models, Materials and Textures in 3D modeling software and then import them into Unity.

Left: A 3D polygon mesh for a player character. Right: The player mesh rendered in Unity with materials

Left: A 3D polygon mesh for a player character. Right: The player mesh rendered in Unity with materials

Importing 3D Model Files

Unity uses the .fbx model format. You can also use other common native model formats (for example, .max, .blend, .mb, .ma), and Unity converts them into .fbx once they are imported.

Import models into Unity to use them in your project.

Rendering Meshes

A 3D mesh is the structural build of a 3D model. It is made up of multiple polygon shapes. To add a 3D model to a GameObject, add a Mesh Filter to the GameObject. The Mesh Renderer component renders meshes in your scene; to ensure models appear in your game, add a Mesh Renderer to any GameObject that has a Mesh Filter component.

Materials

MaterialsAn asset that defines how a surface should be rendered. More info
See in Glossary
combine information about the visual appearance of a surface, such as TexturesAn image used when rendering a GameObject, Sprite, or UI element. Textures are often applied to the surface of a mesh to give it visual detail. More info
See in Glossary
, color tints, and ShadersA program that runs on the GPU. More info
See in Glossary
. Use Materials to define how to render surfaces.

  • Textures are any 2D image files that you import into Unity. Use Textures to wrap a mesh and add fine detail to a model.
  • Use Color tints to alter the color of the texture.
  • Shaders are a series of instructions which determine how Unity displays GameObjects on screen. Use Shaders to affect how Unity renders each pixelThe smallest unit in a computer image. Pixel size depends on your screen resolution. Pixel lighting is calculated at every screen pixel. More info
    See in Glossary
    based on lighting input and Material configuration.

See the Learn Tutorial on Material Design.

Back to Top

Building in-game environments

An environment has been created by adding models and other assets to the scene.

An environment has been created by adding models and other assets to the scene.

Environment design is the process of creating an environment for gameplay to take place in. You might design and build your environment at the same time in the Unity Editor, or you might design an environment outside of Unity and then build it in Unity.

To build an in-game environment, you add GameObjects to the scene and position them to suit your preference and design.
In addition to hand-placing your models in the scene, the Unity Editor includes a built-in set of TerrainThe landscape in your scene. A Terrain GameObject adds a large flat plane to your scene and you can use the Terrain’s Inspector window to create a detailed landscape. More info
See in Glossary
features that allow you to add landscapes to your game. In the Editor, you can create multiple Terrain tiles, adjust the height or appearance of your landscape, and add trees or grass to it. Read more about Creating and Using Terrains.

Back to Top

Animation

You can import animations made in other programs, or animate your assets directly in the Editor.
For more information on 3D animation, see the Unity Learn Course Introduction to 3D Animation Systems.

The player is standing still so the idle animation is playing.

The player is standing still so the idle animation is playing.

Importing Animations

Unity can import animation clips when you import a model with animation. This means you can animate models in another program and then access and manipulate the clips in Unity.

Animating Models in Unity

Use the Animation window to create and modify Animation Clips directly inside Unity.
Use KeyframeA frame that marks the start or end point of a transition in an animation. Frames in between the keyframes are called inbetweens.
See in Glossary
animation to add simple animations to a GameObject within your scene, such as changing its position, size, or rotation.

Controlling animations

To control which Animation ClipsAnimation data that can be used for animated characters or simple animations. It is a simple “unit” piece of motion, such as (one specific instance of) “Idle”, “Walk” or “Run”. More info
See in Glossary
play, you can call them directly in a script with the Animator Class, or create and modify the Animator ControllerControls animation through Animation Layers with Animation State Machines and Animation Blend Trees, controlled by Animation Parameters. The same Animator Controller can be referenced by multiple models with Animator components. More info
See in Glossary
in the Animator windowThe window where the Animator Controller is visualized and edited. More info
See in Glossary
.

You can use the Animator window to:

  • Create and set up the Animation Controller
  • Create Animator States with Animation Clips
  • Create Animator Parameters, which scripts can access or assign values to
  • Create Animator Transitions which specify conditions (based on parameters) for when a State should change and how long the blend between states should take

Back to Top

Graphics

Lighting

Light your Scenes to add depth and mood to your environments and to help the player experience the game world you’ve created.
To set up lighting:

  1. Create a Light. Right-click in the Hierarchy window to open the GameObject menu, select Light, and select a type of Light to add to your scene. See Types of Light.
  2. Place your Lights in the Scene. Adjust the color, intensity, and placement of your Lights until you achieve the desired effect. See Using Lights.
  3. Perfect your lighting. For example, you can choose a different Light modeA Light property that defines the use of the Light. Can be set to Realtime, Baked and Mixed. More info
    See in Glossary
    , or add a cookie mask to create shadows.

A spotlight Light creates atmospheric lighting in this scene

A spotlight Light creates atmospheric lighting in this scene

See the Unity Learn Lighting in URP tutorial.

Back to Top

Audio

You can add background music and sound effects to your game in Unity; see Audio Overview. Use third-party software to create your audio and import it into Unity with the recommended settings.

Back to Top

Physics

The Player character has a capsule collider component which uses the Physics system to allow the character to collide with the walls.

The Player character has a capsule collider component which uses the Physics system to allow the character to collide with the walls.

Use Unity’s physics engineA system that simulates aspects of physical systems so that objects can accelerate correctly and be affected by collisions, gravity and other forces. More info
See in Glossary
to control how GameObjects interact. You can use this to replicate forces such as gravity and mechanics, which define how GameObjects behave on collision in the real world. You can also configure the physics settings to create custom physics to fit the design of your game, which might not be an accurate simulation of the real world.
To learn how to use Unity’s physics engine, see the Unity Learn Physics tutorial. See the Physics section of the User Manual for more information.

To set up Physics for your GameObjects:

  1. To allow your GameObject to be affected by the Physics system, and react to things like gravity and collisions, add a Rigidbody component.
  2. Use Colliders to enable GameObjects to interact with other GameObjects in the scene. For example, GameObjects with a collider can move or be moved by another GameObject with a collider.
  3. To be able to call a function in code when two GameObjects intersect, add a Collider and make it a trigger.

Back to Top

User Interface

If you want to add a menu or help to your game, you need to set up a user interface. To set up a user interface, use Unity UI.

Back to Top

3D game development quickstart guide

Advanced best practice guides

Сделать игру на Unity сможет даже начинающий кодер, который не знает С#. Большое количество обучающих материалов и активное комьюнити значительно облегчают первые этапы знакомства с движком и создание первого проекта. Вместе с ведущим разработчиком Unity Владимиром Филимоновым и преподавателем на курсе «Разработчик игр» разбираемся, почему писать код — не главное в геймдеве и какие базовые инструменты и ПО в играх нужно освоить, чтобы соорудить свою первую игру.

Unity — это и среда разработки, и игровой движок, с помощью которого создаются проекты для разных платформ: ПК, мобильных устройств, игровых консолей и интернет-платформ, — поэтому он называется кроссплатформенным. В Unity есть инструменты для создания объектов, их перемещения, работы с графикой, текстурами и звуком, поэтому сделать полноценную игру с его помощью можно даже в одиночку.

Наглядный пример игры, созданной на Unity, которая поддерживает разные устройства, — Genshin Impact, успешный мультиплатформенный проект китайской студии miHoYo Limited. Более популярной стала ее мобильная версия, но пользователи могут войти в аккаунт, например, с компьютера и продолжить играть с того же момента, на котором остановились в мобильной версии. Кроме Genshin Impact, на Unity созданы такие известные проекты, как Hearthstone, Outlast, Cuphead, Pokemon GO и многие другие.

В игровой индустрии существуют десятки разных движков. Одни разработаны под конкретную игру, на других можно делать игры конкретного жанра (шутеры от первого лица, платформеры, гонки), а есть универсальные, вроде Unity, которые открывают разработчикам больше возможностей. Уникальность Unity заключается в сочетании нескольких факторов. Кроме того, что этот движок позволяет создавать проекты под разные устройства и не ограничивает разработчика конкретным жанром, он:

  • имеет практически неограниченный бесплатный функционал;
  • не требует глубокого знания языков программирования для создания первых простых проектов;
  • имеет многочисленное и активное сообщество, в котором можно найти ответ на любой вопрос, потому что среди такого большого количества людей кто-то обязательно уже сталкивался с вашей проблемой.

Посмотрите также: Как установить Unity

При создании собственного проекта важно помнить, что разработка кода — это примерно 20% игры; гораздо большее значение в ней имеют другие аспекты:

  • Геймплей — это общее понятие взаимодействия игрока с игровым миром, которое определяет его действия (бежать вперед, преодолевать препятствия, стрелять по мишеням, обгонять других) и цели (прийти первым к финишу, выбить 10 из 10, победить врага в бою, собрать как можно больше монет). Геймплей напрямую связан с жанром игры, так как у каждого из них есть специфичный набор правил и механик.
  • Игровые механики конкретные элементы взаимодействия с игрой, которые входят в состав геймплея. Стрельба — это одна механика, сражение на мечах — другая, гонка — третья. Одна игра может сочетать в себе десятки таких механик.
  • Сюжет это развитие действия в игре; он одинаково важен и для масштабных AAA-проектов, и для небольших, но глубоких инди-игр. Сюжет должен затянуть игрока, рассказать ему историю, а также развивать персонажей, чтобы они не оставались однобокими и раскрывались для игрока с новых сторон.
  • Персонажи — в них важны и дизайн, и характер. Удачно проработанный персонаж обладает узнаваемыми особенностями поведения, интересной историей, а еще для полного погружения он должен иметь что-то общее с игроком, что зацепит его и заставит сопереживать. На эту тему Unity разработали гайд «Пять типов привлекательных игровых персонажей», чтобы у новичков получалось сделать игрового персонажа правдоподобным.
  • Дизайн уровней это внешний вид игры, цветовые решения, общая стилистика объектов, фона, персонажей, предметов, которая создает определенное настроение. В помощь начинающим разработчикам Unity опубликовали в своем блоге «Советы по дизайну уровней вашей первой видеоигры».
  • Баланс — это соотношение характеристик разных объектов, он тоже отвечает за увлеченность игрока. Например, если меч в игре может наносить объекту 3 единицы урона, а объект имеет всего 3 HP (hit points — величина, обозначающая максимальный урон), то его можно уничтожить с первого раза, и играть будет слишком легко. Если объект имеет 30 HP, то игроку придется нанести 10 ударов, чтобы его уничтожить. Такое уже подходит скорее для босса, например на первом или втором уровне. Разработчику важно грамотно распределить эти величины, чтобы игра была увлекательной и бросала игроку вызовы.

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

  • Ассет (Asset) готовый компонент, который можно использовать для создания своих проектов. Это могут быть элемент интерфейса в игре, текстура, фигурка персонажа, шрифт или звук.
  • Игровой объект (GameObject) это любой ассет, который используется в игровой сцене. Например, изображение монетки, сам ее внешний вид — это ассет, а пять монет, которые должен подобрать персонаж в процессе прохождения уровня — это пять игровых объектов. Сам персонаж при этом тоже станет игровым объектом.
  • Компоненты (Components) — часть игрового объекта, отвечающая за его поведение в процессе игры: перемещение или реакцию на определенные триггеры.
  • Скрипт (Script) код на C#, в котором прописаны конкретные условия работы компонента.

Установка Unity занимает 5–10 минут. Для этого нужно зайти на официальный сайт проекта и выбрать бесплатный тариф для физических лиц — Personal. Его будет достаточно для самостоятельного изучения Unity и создания первой игры. Еще один бесплатный тариф — студенческий, но он подойдет тем, кто зарегистрирован на GitHub и может подтвердить свой ученический статус.

После нажатия кнопки «Начать» откроется Unity Store. Для новых пользователей в нем есть вариант установки движка с обучающим руководством для начинающих. С помощью кнопки «Начните здесь» скачивается установщик UnityHubSetup.exe, который запускается как любой другой установщик: нужно просто открыть файл, принять условия пользовательского соглашения и нажать кнопку «Установить».

Русского языка в настройках нет, так что придется совершенствовать технический английский. Всего Unity занимает 11,3 Гб,поэтому перед установкой лучше проверить свободное место на диске и почистить его при необходимости.

Следующий шаг — создание Unity ID. Можно регистрироваться с помощью почты или использовать предложенные аккаунты, например Google или Apple. Важно поставить первые две галочки: согласие с условиями использования Unity и признание политики конфиденциальности. Третья галочка — это согласие на маркетинговые рассылки, ее ставить не обязательно.

После регистрации Unity предложит создать тестовый проект Microgame. На выбор предлагается пять шаблонов:

  • LEGO Microgame;
  • шутер от первого лица;
  • картинг;
  • платформер;
  • пустой 3D-шаблон.

Можно выбрать любой из них и посмотреть, как работает создание игры в конкретном жанре. Обучающий материал пошагово демонстрирует назначение различных окон в интерфейсе и принцип работы с элементами игры: как заставить двигаться персонажей, поменять текстуру объекта или его форму. В обучении окно Scene, в котором происходит вся работа с элементами, уже заполнено различными объектами, но при создании проекта с нуля оно будет пустым.

После обучения можно перейти к созданию своей первой игры на Unity с помощью кнопки NEW в меню проектов.

Новому проекту присваивается имя, выбираются место хранения на диске и темплейт — то есть шаблон для разработки, внешний вид и функционал которого зависит от количества измерений в игре. Проще начинать с 2D-проектов, так как для этого формата создано больше готовых ассетов. Конечно, можно сразу начать делать 3D-игры, но в этом случае многие элементы и анимации придется самостоятельно создавать с нуля или выделять бюджет на то, чтобы делегировать эту часть работы другим специалистам.

В стандартном интерфейсе проекта шесть элементов рабочей области:

  1. Верхняя панель инструментов в ней находятся стандартные вкладки File, Edit, Help, как во многих других интерфейсах, а также вкладки Assets, GameObject, Components и Window.
  2. Scene — окно сцены, в котором выстраивается игровое пространство (элементы игрового мира, текстуры, фигурки персонажей и прочее).
  3. Games — это окно игры, в котором можно посмотреть глазами пользователя, как будут двигаться элементы и работать игровые механики.
  4. Hierarchy — окно иерархии, в нем перечислен список всех элементов (GameObject), которые помещены в окно Scene.
  5. Project — это система папок, в которых хранятся ассеты по категориям (текстуры, шрифты, звуки и т.д.).
  6. Inspector — окно для изменения элементов игры, их размера, цвета, положения в пространстве и других характеристик.

Объекты на экран Scene можно добавить из Asset Store. Для этого на панели инструментов нужно кликнуть на вкладку Window –> General –> Asset Store.

В строке поиска можно по названиям найти нужные компоненты, например, сет Free Platform Game Assets.

Как и другие ассеты, он загружается с помощью кнопки Import.

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

После установки все ассеты будут доступны в окне Project. Теперь можно комбинировать и перемещать эти объекты, менять их форму, причем сделать это можно с помощью мыши или горячих клавиш, не написав ни одной строчки кода. Например, из перечня платформ самых разных видов можно выбрать одну и мышкой перетащить ее в рабочую область.

Шаг 2. Перенести в область Scene

За поведение игровых объектов отвечают присоединенные к ним компоненты (Components). Базовый компонент любого объекта — Transform, он отвечает за положение элемента в окне Scene, возможность поворачивать и масштабировать его. К базовому компоненту можно добавить, например, Renderer, который меняет цвет, или RigidBody, который отвечает за массу и физику объекта. Но кроме базовых компонентов, объектам можно задавать особые условия, и для этого как раз используются скрипты.

Создать новый скрипт можно в окне Project, кликнув мышкой на Assets –> Create –> C# Script.

Двойным кликом мыши скрипт открывается в текстовом редакторе. Скрипты, как и все остальное в Unity, прописываются на С#, так что для создания сложных проектов разработчикам все же придется освоить этот язык программирования.

Базовые элементы скриптов — это:

  • using — элемент в коде, который подключает библиотеки;
  • public class — в этой строке обычно прописан класс MonoBehaviour, он содержит набор функций, необходимых для работы скрипта;
  • void — те самые функции, с их помощью прописываются действия, происходящие в игре.

Рассмотрим, например, функцию start. Любое действие в ней произойдет только один раз, когда запустится игра. Пропишем здесь print (“Hi”).

И можно заметить, что в консоли это слово выводится один раз.

Функция update — повторяющаяся, ее можно использовать, например, для передвижения объекта. Для этого в скрипте задается переменная int i = 0, она выводится на экран с помощью функции print (i) и увеличивается на одну единицу за каждый шаг с помощью i++.

В консоли можно будет заметить, что апдейт действительно срабатывает каждый фрейм и объект, к которому применен этот скрипт, плавно движется.

Для понимания сути триггеров важно усвоить, что такое коллайдер (Collider). Это компонент, который присваивается объекту в пространстве игры, задает форму и делает его твердым, недоступным для прохождения сквозь него. Например, если мы разместим монетку в 2D-пространстве и захотим сделать так, чтобы она упала на платформу, то без использования компонента Collider ничего не получится — монетка пролетит сквозь платформу.

Поэтому обоим объектам необходимо присвоить компонент Box Collider 2D — это тонкая зеленая линия, которая обводит элементы по контуру, и за счет этой рамки они становятся твердыми, то есть один не может пройти сквозь другой.

Так объекты обязательно соприкоснутся и монета встанет на платформу.

Триггер (Trigger) — это пространство на карте, при попадании объекта в которое происходит действие; он тоже обводит объект или область в пространстве по краям. По сути, это тот же коллайдер, только триггер позволяет объектам проходить внутрь этой области. Представьте, что на ту же самую платформу вместе с коллайдером наброшен триггер, и при попадании персонажа внутрь триггерной области активируется телепорт — персонажа перебрасывает в другую точку карты.

Чтобы создать триггер, нужно накинуть тот же самый компонент коллайдера, но поставить галочку Is Trigger.

Триггеры распознают три варианта взаимодействия области на карте и объекта:

  • OnTriggerEnter — объект зашел в зону;
  • OnTriggerStay — объект находится в зоне;
  • OnTriggerExit — объект покинул зону.

Освоить интерфейс Unity довольно легко, в интернете есть разные гайды на тему того, как сделать это действительно быстро. Например, видео «Я сделал игру на Unity за неделю» или обучающий мини-курс «Как создать RPG за час». Можно изучать геймдев самостоятельно или начать обучение на курсе — это ускорит процесс и даст более заметные результаты.

Для работы со скриптами и создания более сложных механик разработчикам в любом случае понадобится С#, так что к его изучению вы тоже рано или поздно придете. Но в отличие от Unity, по C# нет в свободном доступе такого большого количества актуальных и понятных гайдов, так что в целях экономии времени и сил лучше записаться на курс «Разработчик игр на Unity», где все знания упакованы в структурированные блоки и сбалансированы с практикой на тренажерах.

Любой новый мир начинается с мечты. Unity предлагает все необходимое для ее воплощения. Здесь вы найдете множество советов по разработке вашей первой компьютерной игры. Никаких требований к уровню знаний и навыков: от вас нужно только желание! 

Создавайте игру играючи

Начните творить на примере готовых шаблонов Unity Microgame. Каждый из шаблонов имеет свою коллекцию ресурсов Mod, позволяющих играючи изменить исходный шаблон, попутно осваивая основы игрового дизайна, логики взаимодействий, визуализации и многое другое.

Начать

Unity LEGO Microgame

LEGO® Microgame

Реализуйте свои творческие идеи с помощью виртуальных блоков LEGOⓇ в нашем новейшем шаблоне Microgame!

FPS Microgame

Взрывайте печеньки, добавляйте симпатичных, но смертоносных роботов, украшайте подземелье. Создайте собственный шутер от первого лица из шаблона FPS Microgame.

2D Platformer Microgame

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

3D Karting Microgame

Набросайте мармеладных мишек, снопы искр и прокачайте свою тачку в веселом картинге. 

Norman’s Island от Little Mountain Animation, Made with Unity

Made with Unity — Norman’s Island by Little Mountain Animation

Начните творить с Unity

Unity — это самая популярная в мире платформа разработки игр, ведь на ней создано более 50% всех мобильных игр, 60% всего контента для дополненной и виртуальной реальности, а Unity-разработчик — это седьмая по росту популярности профессия согласно недавнему отчету LinkedIn U.S. Emerging Jobs.

Новички могут загрузить Unity бесплатно и начать с готовых ресурсов Unity Microgame и Mod. Учитесь с помощью сотен обучающих материалов, курсов, словарей и игровых наборов — бесплатных или по разумной цене — от Unity и участников нашего потрясающего сообщества.

Вдохновляйтесь, учитесь и творите

Hollow Knight от Team Cherry, Made with Unity

Создайте двумерную компьютерную игру

Unity — это ведущая платформа разработки как 2D-, так и 3D-игр. Если вам больше по душе 2D, то здесь можно узнать, как разрабатывать такие игры. 

Unity Creator Kit: программирование

Программирование компьютерной игры в Unity

Вы хотите узнать, как программировать игры? Мы предлагаем множество ресурсов, на примере которых вы сможете научиться программировать на C# в Unity.

Разработайте 3D-игру в Unity

Unity предлагает инструментарий, который поможет вам разработать вашу первую 3D-игру. Начните отсюда, если хотите познакомиться с процессом разработки нового иммерсивного мира для ваших игроков.

Sykoo Sam: начало разработки игр

Sykoo Sam — евангелист Unity в интернете, автор популярного канала, посвященного игровой разработке. Вот несколько советов разработчикам-новичкам.

Thomas Brush: посмотрите это, прежде чем создавать первую игру

Thomas Brush создает игры более 10 лет и готов поделиться мудростью, полезной как начинающим, так и опытным разработчикам.

Dani: студент и игровой разработчик

YouTube-блогер и будущий разработчик Дэни делится своими идеями по программированию, а также дает советы по созданию игр в Unity.

Blackthornprod: «Я создал игру в Unity за неделю»

В этом видео, Blackthornprod делится опытом разработки игры Unity за одну неделю.

Brackeys: как создать видеоигру

Смотрите серию видеороликов от популярного разработчика Brackeys, в которой он делится основными этапами разработки игры.

Mix and Jam: берем идеи из реальных игр

На канале Mix and Jam рассматриваются любимые игры автора с попыткой воссоздать их элементы в Unity.

Станьте успешным игровым разработчиком

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

Лесной уровень Elder Scrolls: Blades

Советы по дизайну уровней

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

Мужчины играют в игру на мероприятии

Как попасть в игровую индустрию

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

Разработка 2D-окружения с помощью Tilemap, Unity Learn

Подходит ли Unity для разработки 2D-игр?

Поговорим о том, что делает разработку 2D-игр в Unity удобной, интуитивно понятной и интересной.
 

Мощное дополнение в инструментарий разработчика игр

Использование Blender и Maya с Unity

Одни из самых популярных пакетов анимации — это Blender и Maya. Предлагаем вам руководство по их использованию с Unity.

5 обучающих материалов по Unity для новичков в игровой разработке

Наши лучшие авторы контента покажут, как начать разрабатывать игры в Unity.

Терминология видеоигр

Мы подготовили подробный словарь терминов, используемых в игровой разработке, Unity и в среде игроков, который поможет хорошо освоиться в нашей отрасли.

5 распространенных ошибок игровой разработки, которые допускают новички

Разработка игр — это весело и интересно. Если вы грамотно подойдете к работе с самого начала, то избавите себя от проблем в будущем.

10 советов по дизайну игр для новичков

Советы для всех начинающих игровых разработчиков, решивших заняться игровым дизайном.

Пять типов привлекательных игровых персонажей

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

Время на прочтение
10 мин

Количество просмотров 95K

Когда-то я пошел на ПОВТ (можете вставить свою специальность в IT) для того чтобы узнать как писать игры. Хотя обучение и было несколько отдалено от интересующей тематики, оно принесло фундаментальные знания, без которых было бы очень тяжело. Дальнейшая после выпуска работа в нескольких компаниях только затягивала в энтерпрайз, отдаляя от геймдева. Но, время от времени, покупая новую игру, или наблюдая за разработкой очередного тайтла, возникает очень навязчивая идея — «Хочу этим заниматься!».

Первые попытки обычно ничем хорошим не заканчиваются — множество мини прототипов так и остаются на самой ранней стадии, или укладываются «в стол». Это не плохой этап и от него никуда не деться. Со временем, желание завершить что-либо станет настолько навязчивым, что вы сможете это сделать.

За последний проект я взялся очень крепко и довел до стадии релиза.

В данной статье хотелось пройти по базовым этапам создания новой игры, с изрядной долей субъективного мнения. Я не буду углубляться в детали реализации и код — больше хотелось поделиться своим опытом и помочь тем, кто вынашивает свои идеи, но не предпринимает дальнейших шагов. Если вы готовы, то добро пожаловать!

Вступление

Общий план основных этапов создания игры, освещенных в статье:

  • Идея
  • Сюжет
  • Вдохновение
  • Концепт
  • Рабочий прототип
  • Развитие прототипа в конечный продукт
  • Завершение

В конце статьи я затрону планы на будущее, впечатления от выбранного инструмента и некоторые ошибки.

Поиск и взращивание идеи

Идеи приходят достаточно часто, в большинстве своем они быстро отметаются, но некоторые будут возвращаться снова и снова. Записывайте их, просто запоминайте, и если через какое-то время вы снова вернетесь к конкретной, и начнете прокручивать ее вариации — стоит к ней присмотреться. Если она все еще будет вас захватывать — беритесь за нее!

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

В моем случае, идеей стал жанр гонок на лодках.

Сюжет

Был написан небольшой сценарий — буквально несколько абзацев текста, который делил игру на все стадии, от начала и до конца, с конкретными целями и задачами, объединенными общей историей. Нет, в нем не было каких-то откровений и поворотов, он абсолютно прямой. Но без сюжета, без возможности завершить игру — вы просто тратите время игрока впустую — да, есть аудитория и у такого рода игр, но это просто неуважение к игровой культуре в целом. Если вы в очередной раз садитесь делать раннер — то дайте игрокам ощутимый прогресс, дайте возможность завершать начатое, дайте наконец пройти все, что есть, и обновляйте игру позже для следующей части приключений(или продавайте), подумайте над реиграбельностью, повторным прохождением, если уж других идей нет — но никогда не выпускайте что-то без завершающего экрана!

Отсутствие сюжета оправданно, только если ваша игра — сугубо соревновательная дисциплина. В последнем случае, если это не совсем абстрактные игры вроде Го, шашек, шахмат — стоит озаботиться четким описанием мира игры, чтобы самому не допустить ошибок этого мира, при наполнении контентом или во время создания героев. «Lore» очень важен для игроков, и если детали мира подчеркиваются невидимыми нитями сквозь все произведение, это придаст атмосферность, ради которой игрок будет возвращаться снова и снова.

Вдохновение

Многие разработчики сами играют в игры, смотрят фильмы и сериалы, читают книги и зачастую привносят в проекты свое видение или новую интерпретацию оттенков затронутых произведений. Сейчас сложно придумать что-то концептуально новое, и не бойтесь перенять что-либо у других продуктов. Иногда, хороший проект скаладывается из достаточно простых вещей на поверхности других игр, конечно, и здесь есть исключения, но черпайте вдохновение повсюду и осторожно смешивайте в своем проекте.

Мое вдохновение пришло в основном из трех игр.
Главный стиль вспомнился, неожиданно, с Mario, а именно Sunshine — была такая игра на GameCube — в ней вода была повсюду, она была очень красива, в игре даже были несколько миссий-мини гонок на этой воде, но, как мне до сих пор кажется, с тех пор, во всех новых Mario такой приятной воды просто нет. Еще в то время когда я проходил игру у меня появился концепт гоночного аппарата с двигателями-водометами из игры. Я не особо задумывался о том, что когда-то реализую эту задумку, но вспомнить свои эмоции более чем десятилетней давности было очень приятно.

Основным вариантом геймплея стал, так называемый, заезд на время — тут хотелось добиться чего-то схожего с серией TrackMania. Возможно, в последней части (Turbo) разработчики перешли некую грань хардкорности граничащей с невозможностью идеальных прохождений на

максимальной концентрации,

у меня 316 медалей на 128 треках и временами хочется никогда не открывать игру снова

но интенсивность гонок, которые хочется проходить без ошибок как можно быстрее, с мгновенным перезапуском в случае ошибки — вот тот ключевой момент, который определил весь геймплей.

Дополнительно не хотелось ограничивать игрока между уровнями, хотелось постоянного контроля за героем, поэтому решено было сделать игру в открытом мире, при этом запуск гонок вдохновлен начальным BurnoutParadise, в котором не было запуска гонок из меню, и даже рестарта — нужно было всегда подъезжать к точке на карте и начинать заново. В моем случае рестарт остался, но эта возможность поддерживается очень непродолжительное время после конца гонки.

Конечно, это все игры ААА-класса, и из каждой была взята только небольшая деталь, но, как я уже упоминал, никогда не стоит отворачиваться от того, что уже есть на рынке. Несомненно, если ваш геймплей настолько уникален, что никто вокруг не предлагает ничего подобного это замечательно, но в моем случае был интерес — создать приятный продукт без замашек на концептуальную уникальность. Вспомнилось время, когда я ставил себе каждую из shareware игр, прилагаемых к игровым журналам, и хотелось сделать игру по качеству не ниже таких проектов.

Концепт

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

Несмотря на то, что с Unity3d до этого не было особого знакомства, этот этап не стал чем то невероятно сложным.
Для достоверного поведения лодки пришлось несколько углубиться в физику процессов и написать свой честный Buoyancy-скрипт взяв за основу один из найденных в сети. После первых попыток, в которых использовалось значительное упрощение протекаемого процесса, без плеча силы, и разделения объемов, все стало ощущаться просто отлично!

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

Камера была создана как отдельный физический объект, который стремится к следованию за определенной точкой в пространстве — для этого к ней применяется сила притяжения и дополнительно ограничиваются максимально возможные углы мгновенного поворота и расстояние на мгновенное перемещение. Даже в итоговом варианте я не стал ничего предпринимать по поводу прохождения камеры сквозь объекты, лишь добавилась возможность мгновенного телепорта камеры к новой точке.

Рабочий прототип

На данном этапе сконцентрируйтесь на реализации всех моментов вашей сюжетной составляющей. Все части игры и основные механики(если их несколько) должны быть реализованы, чтобы вы смогли «пройти» пусть урезанную игру в виде последовательности всех механик от начала и до конца — пусть без конкретных решений в визуальном дизайне, именно на уровне прототипа.

Этот этап самый важный — именно здесь вы поймете, что будет представлять игра без всей мишуры оформления арта и дизайна. Только голая механика всей игры. Именно с такими прототипами — дополнительно улучшенными визуально, и собранными в некий бесшовный продукт, студии утверждают свои проекты. Вы также можете обнаружить на данном этапе, что механики не работают, что нужны радикальные изменения. Утвердите для себя игру и продолжайте дальше, с этого момента игра наполнится продолжительностью, украшениями и содержанием.

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

Развитие прототипа

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

Местами это похоже на работу скульптора(или художника), когда ты должен высечь форму, но идеального варианта не существует, и каждый штрих лишь придает новые очертания. По-началу с этим сложно свыкнуться, т. к. с точки зрения программиста это слишком недетерминированно. Попробую объяснить — когда в нашей сцене раскладываются какие-то объекты, то надо просто принять, что они будут лежать на своих местах всегда, и если в очередной раз мы бросим свежий взгляд и сдвинем все под наше новое видение, то этого не изменить — промежуточные варианты затираются среди всех возможных. Быстро восстановить один из конкретных вариантов просто нельзя. Конечно, в критических ситуациях я дублирую все объекты для отката, но после принятия нового варианта старый уходит безвозвратно.

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

Я (еще|не) художник!

Самым сложным стала разработка всех моделей, текструирование и отрисовка картинок сюжета, поданных в виде кадров стилизованных под комикс.

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

С моделями все тоже было неоднозначно — когда-то был небольшой опыт моделинга в личных целях, и даже были добавлены пара автомобилей в GTA3, но в таких масштабах ничего не делалось. Учитывая развертки и оптимизацию моделей, это было самой сложной частью. Всего, для наполнения мира, их было создано больше сотни, и я считаю, что этого все еще недостаточно, но с таким темпом игра никогда бы не подошла к стадии релиза.

Звук

Аналогично художественной составляющей есть работа со звуком. Это очень важная часть, но, к сожалению, без возможности лицензировать треки и звуки наш выбор очень ограничен. Есть несколько ресурсов, из которых я выбрал совсем не требующие лицензирования варианты. Однако для более серьезного проекта это не подойдет. Если вы сами сможете записывать и производить нужные звуки, музыку — это просто отлично!

В будущем стоит скооперироваться с композиторами инди сцены, они также рады к сотрудничеству, и множество современных инди игр именно так и озвучены.

Завершение продукта

Просмотрите еще раз первоначальный сценарий — завершите все задачи по его исполнению. Еще раз осмотрите список идей по украшению, но остановите себя, если он содержит пункты непервостепенной важности. Покажите этот вариант знакомым, спросите, что им понравилось, а что нет. Не бойтесь принимать критику, но и не поддавайтесь пустым замечаниям — ваше видение не должно быть полностью перечеркнуто отзывами. Зачастую в этот момент вы еще сможете включить в игру пару несложных в реализации деталей. Дальше — только релиз!

Задел на будущее

Множество идей, конечно, останется нереализованными. В моем случае в списке задач осталось более 20 пунктов, из которых только 2 добавляют что-то действительно новое, остальное это дополнительная шлифовка и украшение мира. Оставьте их, умейте себя остановить, иначе проект будет бесконечным. Если пользователи примут его положительно, то, возможно, стоит продолжить его совершенствовать, однако полировать все можно очень долго, и, учитывая потраченное время — у меня ушло около 5 месяцев работы одного человека с самого раннего прототипа — стоит завершать на том, что есть.

Если бы у меня в команде был опытный моделлер, художник и композитор — то все можно было закончить и за месяц, но в одиночку, без необходимых навыков, все происходит значительно медленнее.

Также была задумка выпустить проект и на мобильных платформах — все же это мультиплатформенный движок, но действительность такова, что без дополнительной жесткой оптимизации этого не получить. В случае, если у игры наберется аудитория и будут запросы, то попытка портирования точно будет. Сейчас же необходимо наличие дискретной графики(проверялась интегрированная IntelHD4400 — ее явно недостаточно, однако при использовании дискретной видеокарты даже ноутбука, можно рассчитывать на нормальное количество кадров)

Впечатления от Unity3d

Работать было очень удобно, учитывая имеющийся опыт C# разработки, лишь в некоторых случаях сталкиваешься с ограничениями Mono и спецификой самих объектов. Достаточно много уроков — правда большинство ориентированы на новичков, поэтому сложно долго слушать про расположение скобочек, наименования переменных, стандарты их кода с разными нотациями и прочим подобным, причем этим мелочам уделяется просто несоразмерное количество времени. Но на скорости в полтора-два раза быстрее, зачастую, быстро просматриваешь или проматываешь до ключевого в ролике момента, смотришь как работать с очередным окном, раскрываешь прилагаемый листинг и продолжаешь в своем проекте.

Для Unity много различных плагинов, и даже собственноручно был разработан небольшой диалог-расширение редактора, для генерации буйков на трассе, с некоторыми коэффициентами для сглаживания поворотов. В сети можно найти огромное количество скриптов, также не стоит обходить мимо встроенного AssetStore, в котором есть как платные(большинство) так и бесплатные варианты. Дополнительно — обращайтесь на официальный форум, где вам обязательно ответят.

Также — в Unity еще встречаются проблемы в виде некорректной работы чего-либо, и в моем случае, выпускать игру пришлось на последней бета версии, т. к. все предыдущие просто не были предназначены для WindowsStore билда — ошибка в работе с тенями. В итоге, до сих пор есть одна нерешенная до конца проблема, из-за которой пришлось генерировать проект в Il2CPP режиме, хотя хотелось получить обычный C# — проблема известна и висит в предложениях на улучшения, однако надеяться на скорое разрешение не стоит.

Единственное, о чем хочется добавить — это очень долгий пересчет освещения! Его запекание может легко перейти границу в 20 часов на сцене, и это при не самом слабом CPU. Но без этого на ваши тени будет страшновато взглянуть. Видимо, все разработчики дожны иметь как минимум 8 а то и 10 и больше ядер, с неограниченным количеством оперативной памяти, т. к. одна задача на пересчет света легко уходит за потребление 4Гб, количество же таких задач на больших сценах измеряется в сотнях.

Ошибки

Их я могу увидеть только оглядываясь сейчас.

Главное — после месяца работы начните продвигать свой проект — это не обязательно должна быть реклама, но подерживайте записи в блоге, покажите над чем вы работаете, очень хорошо если к этому моменту можно будет опубликовать какие-то концепты, или ранний геймплей, но не молчите! В моем случае я понял что готов рассказать всем вокруг, только когда у меня появился финальный билд, и мне кажется, что так не стоит делать.

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

Попробуйте где-то посередине, или даже изначально — билд на целевую платформу. В моем случае ушло еще две недели, чтобы поправить все недочеты, и дождаться последней беты исправляющей все критичные баги.

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

P.S. Изначально, статья была чуть ли не в два раза больше, и пришлось делать более краткую выжимку. Также были вырезаны такие моменты как: UI, земля, вода и волны, непосредственно релиз с выкладкой в стор. Если у вас есть любые вопросы по теме — задавайте, и я постараюсь ответить.

Игровой движок Unity предоставляет отличную возможность создать игру даже без серьезных знаний в области программирования. Что вовсе не означает отсутствия мощного функционала и большого количества самых разнообразных опций. Именно поэтому платформа широко используется как начинающими разработчиками, так и профессионалами. А вопрос о том, как создать игру на Unity, остается весьма актуальным среди желающих стать автором еще одного game-шедевра.

Unity – история создания и особенности платформы программирования

Особенности разработки игр на Unity

Как создать игру на Unity

Unity – история создания и особенности платформы программирования

Unity представляет собой мультиплатформенную среду, предназначенную для разработки игр для компьютеров, консолей и мобильных устройств. Часто подобные программные продукты называют еще проще – игровой движок. Он использует в качестве исходного программный код, написанный на C#.

Характерной особенностью Unity выступает универсальность, которая объясняется поддержкой 25 различных платформ, включая самые распространенные в мире Windows, Xbox 360, ARM, tvOS, X64, Play Station 3 и многих другие. Популярность сервиса, который был выпущен в 2005 году, подтверждает несколько простых фактов. С помощью Unity разработано:

  • свыше половины всех игр, предназначенных для мобильных устройств;
  • почти две трети контента, предусматривающего наличие виртуальной или дополненной реальности;
  • множество всемирно известных игровых продуктов, например, Rust, Inside, Firewatch, Hearthstone, Outlast и т.д.

Разработчикам Unity удалось создать оптимальное сочетание удобства использования с многофункциональностью доступных разработчикам игр возможностей. Стоит ли удивляться тому, что с помощью движка создаются как очень простые игровые продукты в стиле инди, так и самые масштабные проекты от лидеров game-индустрии, например, Blizzard.

Почему именно Unity

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

  1. Обширный спектр предоставляемых создателям игр возможностей, заметно превышающий функционал большинства конкурентов, включая возможность создания 2D и 3D-продуктов.
  2. Значительная его часть доступна в бесплатном режиме, что особенно актуально для новичков в разработке игровых продуктов.
  3. Минимальные требования к уровню подготовки пользователя в части программирования, что становится существенным дополнением к предыдущему пункту списка.
  4. Удачное сочетание межплатформенной поддержки с визуальной средой программирования.
  5. Встроенный в платформу игровой движок, позволяющий не использовать или использовать сторонние инструменты и ресурсы по минимуму.
  6. Модульный принцип действия всех компонентов, входящих в систему Unity, что позволяет сочетать их самыми различными способами – в любой последовательности и разных комбинациях.

Отдельного упоминания заслуживает мощное и очень многочисленное сообщество пользователей программного продукта. В результате конструктивного и доброжелательного общения на тематических форумах новичок в разработке игр быстро и без проблем может получить помощь и ответы на вопросы от более опытных старожилов.

Основные компоненты игры

Прежде чем перейти к описанию процедуры разработки игры на Unity, необходимо отметить еще два очень важных базовых момента. Первый касается наиболее значимых составляющих любого игрового продукта. Нужно понимать, что итоговый успех определяется программным кодом, в лучшем случае, на 15-20%. Заметно больший вклад вносится другими компонентами игры, главными из которых выступают такие:

  1. Геймплей. Термин обозначает взаимодействие игрока с миром игры, непосредственно определяющее его цели и совершаемые для их достижения действия. Серьезное влияние на геймплей оказывает жанр продукта, так как каждый из них предусматривает стандартный набор требований, правил и механизмов их реализации.
  2. Игровая механика. Более конкретное понятие, обозначающее определенные взаимодействия игрока и игрового мира. Другими словами, геймплей формируется из набора игровых механик, количество которых определяется сложностью продукта и может достигать нескольких десятков или даже сотен.
  3. Сюжет. Представляет собой последовательность происходящих в игре событий. Увлекательность сюжета выступает одним из главных условий для успеха игры. Продуманная и интересно рассказанная история часто оказывается важнее стильной 3D-графики и мощного звука.
  4. Персонажи. Используются для реализации придуманных создателем игры сюжетных линий. Для персонажей одинаково важны и проработка дизайна, и характер. Один из эффективных способов увлечь игрока – придать персонажу узнаваемые черты, которые станут причиной для сопереживания или других сильных эмоций.
  5. Дизайн локаций или уровней. Визуальная составляющая игры. Включает цветовые решения, стилистику оформления, внешний вид персонажей и различных объектов, уровень детализации предметов и многое другое, заметное глазу игрока.
  6. Баланс. Показывает соотношение «сил» между персонажами и объектами игры. Определяет сложность прохождения. Причем важно понимать, что наибольший интерес у игроков обычно вызывает нечто среднее – не слишком сложное, но и не чересчур простое. Поиск оптимального баланса – одна из ключевых задач, стоящих перед разработчиком игры.

Особенности разработки игр на Unity

Вторым немаловажным нюансом являются необходимость понимания нескольких базовых терминов, характерных исключительно для Unity. Это поможет для лучшего восприятия описанной ниже процедуры разработки игры. В их числе:

  1. Asset (ассет). Так называются готовые компоненты, доступные для использования при создании собственных проектов. Обычно речь идет о текстурах, шрифтах, звуках или элементах интерфейса, собранных в библиотеки. Купить или скачать бесплатно различные ассеты можно в официальном интернет-магазине Unity Asset Store.
  2. GameObject (игровой объект). Термин используется для обозначения ассетов, которые задействованы в игровой сцене. В качестве примера можно привести деньги: внешний вид монеты представляет собой ассет, а 10 монет в руках персонажа – это 10 GameObject.
  3. Components (компоненты). Выступают частью игрового объекта, формирующей его поведение. Компоненты непосредственно влияют на перемещения GameObject, их реакцию на внешние воздействия и другие триггеры, предусмотренные сюжетом игры.
  4. Script (скрипт). Стандартное обозначение программного кода, который применительно к Unity пишется на языке C#.

Как создать игру на Unity

Несколько затянувшаяся вводная часть была необходима, чтобы лучше понимать непосредственно пошаговую инструкцию, следование которой позволит любому желающему создать свою первую компьютерную игру с помощью платформы Unity.

Для этого необходимо последовательно предпринять ряд сравнительно несложных шагов.

Шаг №1. Установка Unity

Адрес официального сайта для бесплатного скачивания программы указан выше. Для новичка лучше всего выбрать вариант установки игрового движка вместе со встроенной опцией обучения в виде руководства для начинающих. Далее скачанный установщик запускается, после чего необходимо согласиться с условиями пользовательского соглашения.

Процесс установки длится не дольше 7-10 минут в зависимости от производительности компьютера. Характерной особенностью Unity выступает отсутствие русскоязычной версии игрового движка. Поэтому для работы с программой требуются начальные знания английского. Серьезную помощь окажут многочисленные руководства по Unity, значительная часть которых переведена и на русский язык.

Завершающей операцией первого этапа разработки игры становится регистрация пользователя на сайте. Для создания Unity ID используются разные способы – email или аккаунт в Google/Apple.

Дополнительной и очень полезной опцией становится предложение сервиса просмотреть создание тестовой игры Microgame. Новому пользователю предлагается на выбор пять шаблонов разной жанровой направленности – начиная с LEGO и заканчивая шутером от первого лица. Просмотр обучающего материала поможет разработчику в дальнейшем при реализации собственного проекта.

Шаг №2. Создание проекта

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

  • проекту дается имя;
  • указывается место хранения информации;
  • выбирается так называемый таймлет.

Последний термин обозначает шаблон для разработки. Его основные характеристики – внешний вид и набор функциональных возможностей – зависят от числа измерений в игре. Новичку имеет смысл стартовать с разработки 2D-игры, так как реализация 3D-проекта требует намного больших усилий и предусматривает создание некоторых компонентов собственными силами.

Шаг №3. Настройки интерфейса

На расположенном ниже скриншоте показано изображение основной рабочей страницы Unity. Она делится на несколько элементов, название каждого из которых дает представление как о его назначении, так и содержимом.

Верхняя панель не отличается от стандартной для значительной части подобных программных продуктов. На ней размещаются классические пункты меню: File, Help и т.д., которые не требуют дополнительных пояснений.

Важно выделить несколько характерных исключительно для Unity элементов интерфейса, в числе которых:

  • Scene и Game, расположенные в верхней части экрана несколько левее центра. Представляют собой сцену с видом игрового пространства. В первой вкладке – глазами разработчика, во второй – игрока;
  • Hierarchy отражает списки всех представленных в окне сцены игровых объектов;
  • Project представляет собой структурированный набор папок, предназначенных для хранения ассетов с разбивкой на категории (звуки, шрифты, текстуры и т.д.);
  • Inspector предназначен для корректировки различных характеристик GameObject – положения в пространстве, размера, цвета и т.д.

Шаг №4. Добавление объекта

Начиная с этой стадии, пошаговая инструкция становится цикличной, а шаги с 4 по 6 выполняются необходимое количество раз. Первым из них становится добавление объекта. Загрузить требуемые наборы ассетов можно из Asset Store. Нужный сайт открывается переходом по нескольким ссылкам: сначала Window, затем General, а в завершении – непосредственно Asset Store.

Загрузка осуществляется посредством кнопки Import. После ее нажатия ассеты автоматически перемещаются в окно Project. Дальнейшие действия производятся непосредственно на Unity, причем функционал платформы позволяет вносить существенные изменения мышью или горячими клавишами, что намного проще, чем исправлять программный код.

Шаг №5. Работа со скриптами

К каждому объекту, определенное поведение которого предусматривает игровой сюжет, привязываются компоненты. Базовый из них – Transform – отвечает за расположение в окне сцены, а также опции поворота и масштабирования. Изменение цвета определяет компонент Renderer и т.д.

Помимо основных, используются и дополнительные компоненты. Они представляют собой скрипты, написанные на C#. Чтобы добавить новый, необходимо открыть окно Project, кликнуть на Assets, после чего – на Create, а затем – на C# Script.

Выполнение описанных действий открывает текстовый редактор для написания программного кода. Создание скрипта требует достаточно серьезных знаний C#, редко имеющихся у новичков. Поэтому целесообразнее при разработке первой игры обойтись базовыми компонентами.

Шаг №6. Настройка и добавление триггеров

Триггером называют область на игровой карте, при попадании на которую объект совершает запрограммированное действие. Статус триггера означает, что GameObject способен взаимодействовать с этим участком карты одним из трех способов: зайти в зону, находиться в ней и выйти из области.

Шаг №7. Завершение

По большому счету, циклическое выполнение этапов с 4 по 6 позволяет создать новую игру, после чего имеет смысл ее протестировать. Удобный и простой в использовании интерфейс игрового движка освоить несложно. Для разработки первого игрового продукта – предельно простого и небольшого по объему — необходим минимум знаний в программировании и изучение одного из многочисленных руководств пользователя, ссылки или названия которых будут приведены ниже.

Ошибки новичков

Первой и основной ошибкой начинающих game-разработчиков становится недооценка сложности создания новой игры. Даже самый простой из подобных продуктов требует достаточно серьезных усилий. Обширный функционал Unity не способен выполнить все необходимые для успешной реализации проекта задачи. Многие из них придется решать самому разработчику.

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

Еще одна рекомендация опытных пользователей Unity не менее очевидна. Она состоит в том, что не стоит каждый раз изобретать велосипед по новой. Проще, быстрее и правильнее использовать наработки других разработчиков, наверняка уже решавших стоящую перед новичком задачу ранее.

Что почитать по теме

  1. Разработка вашей первой игры с помощью Unity и C# от Microsoft.
  2. Как начать разрабатывать игру от Unity.
  3. Руководство: Создание геймплея от Unity.
  4. Учебный курс «Разработчик игр на Unity» от Нетологии.
  5. Учебный курс «Разработчик игр на Unity» от SkillFactory.
  6. Учебный курс «Разработчик игр на Unity с нуля до Middle» от Skillbox.
  7. Видеоролик на YouTube «I made a game in 1 week with Unity».
  8. Видеоролик на YouTube «Моя ПЕРВАЯ 3D игра на Unity».

FAQ

Что такое Unity?

Unity представляет собой кроссплатформенную среду для разработки игр, предназначенных для ПК, консолей, мобильных устройств и т.д. Одновременно она является игровым движком, на базе которого создаются игры. В результате такой комбинации Unity предоставляет game-разработчику все, что требуется для его работы.

Почему игровой движок настолько популярен?

Первая причина указана в предыдущем вопросе. Остальные выглядят следующим образом:

  • обширный функционал, значительная часть которого бесплатна;
  • универсальность, предусматривающая поддержку двух с половиной десятков игровых платформ;
  • удобный и предельно простой интерфейс, позволяющий создавать игры даже новичкам.

Что требуется для разработки первой игры на Unity?

Минимальный набор знаний в области программирования с использованием языка C#. Желательно – наличие одного из различных руководств пользователя, найти которые несложно.

Какова последовательность действий для решения задачи?

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

Подведем итоги

  1. Unity – самая популярная среда для разработки разнообразных игр.
  2. Она поддерживает все известные игровые платформы.
  3. Важными достоинствами Unity выступают нетребовательность к уровню подготовки game-разработчика и бесплатный доступ к большей части функционала.
  4. В результате использование Unity позволяет бесплатно создать первую игру даже начинающему разработчику.

The Ultimate Beginners Guide To Game Development In Unity

Unity is a great tool for prototyping everything from games, to interactive visualisations. In this article, we run through all you need to know to get started using Unity.

First, a little bit about me: I’m a hobbyist unity developer, 3d modeler and graphic designer who’s worked with Unity and Blender for over 5 years. I’m now a Financial Maths student at University College Dublin, and occasionally I do freelance graphic design, web prototyping, and game prototyping.

Q-bD3OdyDZX2X2cmqgyyRIFwRpy9mngdYAtC

Concept art is one of the earliest phases in the game dev process, over the last 5 years i’ve got a lot of exposure to all areas of game design. Check out my Portfolio of Graphic, UX, Concept Art, Game Dev etc…

Introduction

This article is aimed at anyone who has never used Unity before, but has some previous experience programming or in web design / development. By the end of this article, you should have a good general overview of the engine as well as all the necessary functions and code to start making a basic game.

Why Unity?

If you want to make games

There’s really very few options when it comes to Indie Game development. The three main choices if you want to build games are Unreal, Unity or GameMaker.

Unity is probably the least opinionated of the 3 platforms. It gives you a very raw product out of the box, but is highly flexible, well-documented, and highly extensible to build pretty much any genre of game you can think of.

There are plenty of highly successful games such as Escape from Tarkov (FPS), Monument Valley (Puzzler), and This War of Mine (Strategy / Survival) all built in Unity.

In reality the engine you build your first game on is probably not critical, so my advice is just to pick one and go with it.

If you want to prototype user experiences

Since unity is just an engine with a bunch of physics, animation, and real time 3d rendering, it’s also a great space to make fully fledged interactive prototypes for UX studies.

Unity has full support for VR and AR and hence could be a great tool for exploring architecture, automations and simulations with clients.

Sections to this article

  • Why Unity?
  • Unity Editor Window
  • Unity Game Objects
  • Unity Builtin Components
  • Creating Custom Components
  • Structure of a MonoBehaviour
  • Manipulating GameObjects
  • Raycasting
  • Collision detection
  • Advanced Features
  • Advice For Newcomers
  • Nice Resources and Communities
  • Conclusion

Unity editor window

The editor window is split up into a couple of sections. We will cover this very briefly as we will refer to it constantly throughout the article. If your familiar with this already just skip past!

hOKvEBDHVZj2N1udUtho7ksnzXmcdbMTWAWh

Scene View: Allows placement and movement of GameObjects in the Scene

Game View: Previews how the player will see the scene from the camera

Inspector: Provide details on the selected GameObject in the scene.

Assets / Project: All prefabs, textures, models, scripts etc are stored here

Hierarchy: Enables nesting and structuring of GameObjects within the scene

Now we’re good to start!

Unity Game Objects

What are GameObjects

GameObjects are the core building block of everything in the Unity games engine. The name almost gives it away:

Anything you place within a scene in Unity must be wrapped in a ‘game object.’

If you’ve got a web design background, you can think of GameObjects as being a lot like <div> elements! Extremely boring containers, but are highly extensible to create complex functionality or visuals.

vlXNfFyr4lsQgC-DL05daoOtSWT35ZFUcA1l

I’ve lifted this straight out of the Unity editor window just to make this point.

Literally everything from particle effects, cameras, players, UI elements, … (the list goes on) is a GameObject.

Creating Hierarchy

Like a <div> in web development, a GameObject is also a container. Just as you nest <div>s to create varied and desirable layouts or abstractions you may wish to do the same with games objects.

The logic behind nesting game objects is much the same as web development, I’ll give a few examples…

Clutter & Efficiency

Web Analogy: You’ve got many similar elements which may be dynamically generated on the fly in response to user interaction and want to keep them tidy.

Unity Translation: Your building a Minecraft clone and you’ve loads of blocks in the scene, you need to add and remove ‘chunks’ of blocks from the scene for performance reasons. Thus having them parented to an empty GameObject for each chunk makes sense, as deleting the chunk parent removes all the children blocks.

Positioning

Web Analogy: You want to keep the position of the content contained ‘relative’ to the container and not to the web page.

Unity Translation: You’ve created a bunch of helper drones which hover around the player. You would really not rather write code to tell them to chase after the player, so instead you instantiate them as children of the player game object.

Unity Builtin Components

The Actor Component Model

GameObjects on their own are pretty useless — as we’ve seen they’re pretty much just containers. In order to add functionality to them we have to add components, which are essentially scripts written in either C# or Javascript.

Unity works off an Actor Component model, put simply the GameObjects are the actors and the Components are your scripts.

If you’ve written any web apps before you’ll be familiar with the idea of creating small reusable components such as buttons, form elements, flexible layouts that have various different directives and customisable properties. Then assembling these small components into larger web pages.

The big advantage of this approach is the level of reusability and clearly defined communication channels between elements. Likewise in game development, we want to minimise the risk of unintended side effects. Small bugs tend to spiral out of control if you’re not careful, and are extremely difficult to debug. Thus creating small, robust and reusable components is critical.

Key Built-in Components

I think it’s time for a few examples of the built in components provided by the Unity Games engine.

  • MeshFilter: Allows you to assign materials to a 3D mesh to a GameObject
  • MeshRender: Allows you to assign materials to a 3D Mesh
  • [Box | Mesh]Collider: Enables detection of GameObject during collisions
  • Rigidbody: Enables realistic physic simulation to act on GameObjects with 3d Meshes and will be trigger detection events on box colliders
  • Light: Illuminates portions of your scene
  • Camera: Defines the player viewport to be attached to a GameObject
  • Various UI Canvas Components for displaying GUIs

There are loads more, but these are the main ones you’ll need to get familiar with. One tip is that you can access all the docs for these through the unity manual and scripting reference offline wherever you are:

CNB5Rb4DWImRiHh04xThXYtZnojyCj5OJJ1f

Just click on the help section, the docs in general are pretty good

Creating Custom Components

The builtin components control physics and visuals primarily, but to really make a game, you’re going to need to accept user input and manipulate those standard components as well as the GameObjects themselves.

To start creating components, go into the desired GameObject > Add Component > type the name of your new component in the search bar > new script (c#).

As a general recommendation I’d advise against using Javascript in Unity. It hasn’t been kept updated with all the great stuff that came with ES6, and most of the more advanced stuff relies on C# stuff ported over to Javascript… It just becomes a one giant work-around in my experience.

Structure of a MonoBehaviour

Key Functions

All components inherit from the MonoBehaviour Class. It includes several standard methods, most importantly:

  • void Start() which is called whenever an object containing the script is instantiated in the scene. This is useful anytime we want to perform some initialisation code, eg. set a player’s equipment after they spawn into a match.
  • void Update() which is called every frame. This is where the bulk of code involving user input will go, updating various properties such as the motion of the player in the scene.

Inspector Variables

Often we want to make components as flexible as possible. For example all weapons might have a different damage, rate of fire, has_sight etc. Whilst all the weapons are essentially the same thing we may want to be able to create different variations quickly through the unity editor.

Another example where we might want to do this is when creating a UI component that tracks user mouse movements and places a cursor in the viewport. Here we might want to control the sensitivity of the cursor to movements (if the user was using a joystick or gamepad vs a computer mouse). Thus it would make sense to have these variable easy to change both in edit mode and also experiment with them during runtime.

ARiWcy5AEsVyRicp7demoZnzQR0MjPQnFzXJ

Variables in the inspector window can be changed at any time during runtime or edit mode. Note: Changes made during runtime will not be permanent.

We can do this easily by simply declaring them as public variables in the body of the component.

dMqFuop796E9p2Y4urYkJtsuM3Rh6oM07cIJ

Notice how we can make variables have different levels of access, private, public, or public but not displayed in the inspector window.

Accepting user input

Of course, we want our game to respond to user input. The most common ways to do that are using the following methods in the Update() function of a component (or anywhere else you like):

  • Input.GetKey(KeyCode.W) Returns True W key is being held down
  • Input.GetKeyDown(KeyCode.W) Returns True when W key is first pressed
  • Input.GetAxis(“Vertical”), Input.GetAxis(“Horizontal”) Returns between -1,1 mouse input movement

Manipulating GameObjects

Once we have user input we want GameObjects within our scene to respond. There are several types of responses we may consider:

  • Translation, Rotation, Scale
  • Create new GameObjects
  • Sending messages to existing GameObjects / components

Transformations

GameObjects all have a transform property which enable various useful manipulations on the current game object to be performed.

cqutjhXkSZxKNCywMSjGbxewqeDo5GCp0R-d

The methods above are fairly self explanatory, just note that we use lowercase gameObject to refer to the GameObject which owns this specific instance of the component.

In general it’s a good practice to use local[Position,Rotation] rather than the global position / rotation of an object. This usually makes it easier to move objects in a manner that makes sense, as the local space axis will be oriented and centered on the parent object rather than the world origin and x,y,z directions.

sgr4nHfYLQYqjEEPSxlxPA0BhCrNjgzzvOmW

The benefits of local space become a little more obvious with a diagram!

If you need to convert between local and world space (which often is the case) you can use the following:

vNEw9xUc-B2vZOaeAqXcQn5W-lxfmJbLiEZw

As you can imagine, there is some fairly simple linear algebra behind this hinted at by the ‘Inverse’ in the method name.

Creating new GameObjects

Since GameObjects are basically everything in your scene, you might want to be able to generate them on the fly. For example if your player has some sort of projectile launcher you might want to be able to create projectiles on the fly which have their own encapsulated logic for flight, dealing damage, etc…

First we need to introduce the notion of a Prefab. We can create these simply by dragging any GameObject in the scene hierarchy into the assets folder.

BEBGqpePGsVgtEY5y89WrnLAbdZjPHZiagjZ

What prefab looks like in the Asset tab

This essentially stores a template of the object we just had in our scene with all the same configurations.

wFLWTKOYgxfMEAEzUjgMsTCETSmTA3JIPLGp

An example of a custom brick object which is used to dynamically generate Lego bricks in a scene, it has a bunch of components attached to it with various default values.

Once we have these prefab components we can assign them to inspector variables (as we talked about earlier) on any component in the scene, so that we can create new GameObjects as specified by the prefab at any time.

We can then perform ‘instantiation’ of the prefab and manipulate it to the desired location in the scene and establish the necessary parent relationships.

xAzUlbgEAIkyS8bsX8W0xlVI0YiSTiVyMljj

Accessing other GameObjects and Components

Often we need to communicate with other GameObjects as well as their associated components. Once you have a reference to a game object this is pretty simple.

ComponentName comp = some_game_object.GetComponent<ComponentName>();

After that you can access any of the public methods / variables of the component in order to manipulate the GameObject. This is the straightforward bit, however actually obtaining the reference to the GameObject can be done in several ways…

Access via inspector variable

This is the most straightforward. Simply create a public variable for the GameObject, as we’ve demonstrated earlier with the prefabs, and manually drag and drop it onto the component via the inspector. Then access the variable as above.

Access via tagging

We can tag GameObjects or prefabs via the inspector and then use the find game object functions to locate references to them.

9Ur13zYuVV3r17CGo9hDMnyCoG44jTXCwv4g

This is simply done as below.

GameObject some_game_object = GameObject.FindGameObjectWithTag(“Brick”);

Access via transform

If we wish to access components in some parent object we can easily do this via the transform attribute.

ComponentName comp = gameObject.transform.parent.GetComponent<ComponentName>();

Access via SendMessage

Alternatively if we want to send a message to many other components or wish to message an object which is far up a nested hierarchy, we can use the send message functions, which accept the name of the function followed by the arguments.

gameObject.SendMessage(“MethodName”,params); // Broadcast message

gameObject.SendMessageUpwards(“MethodName”, params); // Only received by components which are nested above.

Raycasting

You may have heard of this before when people compare FPS games that are ‘physics based’ or ‘ray based’. Raycasting is essentially like having a laser pointer which, when it comes into contact with a ‘collider’ or ‘rigidbody’, it returns a ‘hit’ and passes back the details of the object.

There are two scenarios where this comes in handy (There’s probably loads more):

  1. If you were designing a weapon system for a game, you could use raycasting for hit detection, and even customise the length of the ray so that melee items ‘hit’ only at short ranges
  2. Create a ray from the mouse pointer to a point in 3d space, ie if you wish the user to be able to select units with their mouse in a strategy game.

GcxZnE2hbosbWwoDp94ecEd1g8aVlwrFKOhB

Example 2 detailed above

As you can see, the code for this is a little bit more involved. The key thing to understand is that to cast a ray to where the mouse is pointing in 3d space requires the ScreenPointToRay transformation. The reason for this is the camera is rendering a 3d space as a 2d viewport on your laptop screen, so naturally there is a projection involved to transfer back to 3d.

Collision detection

Earlier we mentioned the Collider and Rigidbody components which can be added to an object. The rule for collisions is that one object in the collision must have a rigidbody and the other a collider (or both have both components). Note that when using raycasting, rays will only interact with objects with collider components attached.

Once setup within any custom component attached to the object, we can use the OnCollisionEnter, OnCollisionStay and OnCollisionExit methods to respond to collisions. Once we have the collision information we can get the GameObject responsible and use what we learned earlier to interact with components attached to it as well.

ppKZgvdAjKDqbW80Nin2wG9izk08UjyuaqAt

One thing to note is that rigid-bodies provide physics such as gravity for objects, so if you want this turned off you will need to check the is_kinematic on.

I9UU3oy-UoVWOwjhXUy9PRiGDT5eFO4O9-IB

Check on is kinematic to disable unwanted physics but retain nice collision detection.

Advanced Features

We won’t go into any of this now but perhaps in a future article — just to make you aware that they exist.

Creating GUI’s

Unity has a fully fledged UI engine for laying out the GUI for your game. In general these components work pretty similarly to the rest of the engine.

Extending the Unity Editor

Unity enables you to add custom buttons to your inspectors so that you can affect the world during edit mode. For example, to help with world building you might develop a custom tool window for building modular houses.

Animation

Unity has a graph-based animation system which enables you to blend and control animations on various objects such as players implementing a bone based animation system.

Materials and PBR

Unity runs off a physically-based rendering engine which enables real time lighting and realistic materials. The reality is you will either need to learn 3d modeling first or use models made and optimised by someone else before you get to this, in order to make stuff that actually looks good.

Advice For Newcomers

If you’re planning on writing your first game, don’t underestimate the complexity and time it takes to write even the most trivial of games. Remember most of the games that come out on Steam have teams working on them for years full-time!

Pick a simple concept and break it down into small achievable milestones. It’s highly recommended to separate your game into as small independent components as possible, as you’re much less likely to run into bugs if you keep the components simple rather than monolithic code blocks.

Before you go and write any code for any part of your game, go and research what someone else has done before to solve the same problem — chances are they’ll have a much slicker solution.

Nice Resources and Communities

Game design has one of the best communities of any out there, and there are loads of highly skilled pros in the industry who put content up for free or for next to nothing. It’s a field that requires 3d Modelers, Concept Artists, Game Designers, Programmers and so on. I’ve linked some great general resources that I’ve come across for each of these fields below:

Concept Art

  • Feng Zhu Design School (Over 90 hour long concept art tutorials)
  • Tyler Edlin Art (Great BST art community with feedback from pros on monthly challenges)
  • Art Cafe (Interviews and Workshops with Famous Concept Artists)
  • Trent Kaniuga (Illustrator and 2D artist who’s also making his own game)

3D Modelling

  • CG Cookie (Best Mesh Modeling Basics in Blender Ever, they’ve loads of other excellent content for blender)
  • Tor Frick (Hard Surface Modelers & Sculptors in Blender)
  • Gleb Alexandrov (Short powerful rendering tutorials in Blender)

Game Design

  • DoubleFine Amnesia Fortnight (GameDevs who do a 2 week hackathon and record their entire design process)
  • GameMakers Toolkit (Examines Game Design Principles)

Programming

  • Handmade Hero (Writing a game and engine from scratch in C)
  • Jonathan Blow (Indie dev who livestreams his game development)
  • Brackeys (Nice Unity Tutorials)

Conclusion

Hope you guys liked this tutorial! I do a bit of graphic design work as well as game and UI prototypes so check out my portfolio! I’m also on linked in.

Portfolio | LinkedIn

NwkVR7XrAVlrJUTy9x0Cc30JmbmpAayM69HK

http://eepurl.com/gkV7ov


Learn to code for free. freeCodeCamp’s open source curriculum has helped more than 40,000 people get jobs as developers. Get started

The Ultimate Beginners Guide To Game Development In Unity

Unity is a great tool for prototyping everything from games, to interactive visualisations. In this article, we run through all you need to know to get started using Unity.

First, a little bit about me: I’m a hobbyist unity developer, 3d modeler and graphic designer who’s worked with Unity and Blender for over 5 years. I’m now a Financial Maths student at University College Dublin, and occasionally I do freelance graphic design, web prototyping, and game prototyping.

Q-bD3OdyDZX2X2cmqgyyRIFwRpy9mngdYAtC

Concept art is one of the earliest phases in the game dev process, over the last 5 years i’ve got a lot of exposure to all areas of game design. Check out my Portfolio of Graphic, UX, Concept Art, Game Dev etc…

Introduction

This article is aimed at anyone who has never used Unity before, but has some previous experience programming or in web design / development. By the end of this article, you should have a good general overview of the engine as well as all the necessary functions and code to start making a basic game.

Why Unity?

If you want to make games

There’s really very few options when it comes to Indie Game development. The three main choices if you want to build games are Unreal, Unity or GameMaker.

Unity is probably the least opinionated of the 3 platforms. It gives you a very raw product out of the box, but is highly flexible, well-documented, and highly extensible to build pretty much any genre of game you can think of.

There are plenty of highly successful games such as Escape from Tarkov (FPS), Monument Valley (Puzzler), and This War of Mine (Strategy / Survival) all built in Unity.

In reality the engine you build your first game on is probably not critical, so my advice is just to pick one and go with it.

If you want to prototype user experiences

Since unity is just an engine with a bunch of physics, animation, and real time 3d rendering, it’s also a great space to make fully fledged interactive prototypes for UX studies.

Unity has full support for VR and AR and hence could be a great tool for exploring architecture, automations and simulations with clients.

Sections to this article

  • Why Unity?
  • Unity Editor Window
  • Unity Game Objects
  • Unity Builtin Components
  • Creating Custom Components
  • Structure of a MonoBehaviour
  • Manipulating GameObjects
  • Raycasting
  • Collision detection
  • Advanced Features
  • Advice For Newcomers
  • Nice Resources and Communities
  • Conclusion

Unity editor window

The editor window is split up into a couple of sections. We will cover this very briefly as we will refer to it constantly throughout the article. If your familiar with this already just skip past!

hOKvEBDHVZj2N1udUtho7ksnzXmcdbMTWAWh

Scene View: Allows placement and movement of GameObjects in the Scene

Game View: Previews how the player will see the scene from the camera

Inspector: Provide details on the selected GameObject in the scene.

Assets / Project: All prefabs, textures, models, scripts etc are stored here

Hierarchy: Enables nesting and structuring of GameObjects within the scene

Now we’re good to start!

Unity Game Objects

What are GameObjects

GameObjects are the core building block of everything in the Unity games engine. The name almost gives it away:

Anything you place within a scene in Unity must be wrapped in a ‘game object.’

If you’ve got a web design background, you can think of GameObjects as being a lot like <div> elements! Extremely boring containers, but are highly extensible to create complex functionality or visuals.

vlXNfFyr4lsQgC-DL05daoOtSWT35ZFUcA1l

I’ve lifted this straight out of the Unity editor window just to make this point.

Literally everything from particle effects, cameras, players, UI elements, … (the list goes on) is a GameObject.

Creating Hierarchy

Like a <div> in web development, a GameObject is also a container. Just as you nest <div>s to create varied and desirable layouts or abstractions you may wish to do the same with games objects.

The logic behind nesting game objects is much the same as web development, I’ll give a few examples…

Clutter & Efficiency

Web Analogy: You’ve got many similar elements which may be dynamically generated on the fly in response to user interaction and want to keep them tidy.

Unity Translation: Your building a Minecraft clone and you’ve loads of blocks in the scene, you need to add and remove ‘chunks’ of blocks from the scene for performance reasons. Thus having them parented to an empty GameObject for each chunk makes sense, as deleting the chunk parent removes all the children blocks.

Positioning

Web Analogy: You want to keep the position of the content contained ‘relative’ to the container and not to the web page.

Unity Translation: You’ve created a bunch of helper drones which hover around the player. You would really not rather write code to tell them to chase after the player, so instead you instantiate them as children of the player game object.

Unity Builtin Components

The Actor Component Model

GameObjects on their own are pretty useless — as we’ve seen they’re pretty much just containers. In order to add functionality to them we have to add components, which are essentially scripts written in either C# or Javascript.

Unity works off an Actor Component model, put simply the GameObjects are the actors and the Components are your scripts.

If you’ve written any web apps before you’ll be familiar with the idea of creating small reusable components such as buttons, form elements, flexible layouts that have various different directives and customisable properties. Then assembling these small components into larger web pages.

The big advantage of this approach is the level of reusability and clearly defined communication channels between elements. Likewise in game development, we want to minimise the risk of unintended side effects. Small bugs tend to spiral out of control if you’re not careful, and are extremely difficult to debug. Thus creating small, robust and reusable components is critical.

Key Built-in Components

I think it’s time for a few examples of the built in components provided by the Unity Games engine.

  • MeshFilter: Allows you to assign materials to a 3D mesh to a GameObject
  • MeshRender: Allows you to assign materials to a 3D Mesh
  • [Box | Mesh]Collider: Enables detection of GameObject during collisions
  • Rigidbody: Enables realistic physic simulation to act on GameObjects with 3d Meshes and will be trigger detection events on box colliders
  • Light: Illuminates portions of your scene
  • Camera: Defines the player viewport to be attached to a GameObject
  • Various UI Canvas Components for displaying GUIs

There are loads more, but these are the main ones you’ll need to get familiar with. One tip is that you can access all the docs for these through the unity manual and scripting reference offline wherever you are:

CNB5Rb4DWImRiHh04xThXYtZnojyCj5OJJ1f

Just click on the help section, the docs in general are pretty good

Creating Custom Components

The builtin components control physics and visuals primarily, but to really make a game, you’re going to need to accept user input and manipulate those standard components as well as the GameObjects themselves.

To start creating components, go into the desired GameObject > Add Component > type the name of your new component in the search bar > new script (c#).

As a general recommendation I’d advise against using Javascript in Unity. It hasn’t been kept updated with all the great stuff that came with ES6, and most of the more advanced stuff relies on C# stuff ported over to Javascript… It just becomes a one giant work-around in my experience.

Structure of a MonoBehaviour

Key Functions

All components inherit from the MonoBehaviour Class. It includes several standard methods, most importantly:

  • void Start() which is called whenever an object containing the script is instantiated in the scene. This is useful anytime we want to perform some initialisation code, eg. set a player’s equipment after they spawn into a match.
  • void Update() which is called every frame. This is where the bulk of code involving user input will go, updating various properties such as the motion of the player in the scene.

Inspector Variables

Often we want to make components as flexible as possible. For example all weapons might have a different damage, rate of fire, has_sight etc. Whilst all the weapons are essentially the same thing we may want to be able to create different variations quickly through the unity editor.

Another example where we might want to do this is when creating a UI component that tracks user mouse movements and places a cursor in the viewport. Here we might want to control the sensitivity of the cursor to movements (if the user was using a joystick or gamepad vs a computer mouse). Thus it would make sense to have these variable easy to change both in edit mode and also experiment with them during runtime.

ARiWcy5AEsVyRicp7demoZnzQR0MjPQnFzXJ

Variables in the inspector window can be changed at any time during runtime or edit mode. Note: Changes made during runtime will not be permanent.

We can do this easily by simply declaring them as public variables in the body of the component.

dMqFuop796E9p2Y4urYkJtsuM3Rh6oM07cIJ

Notice how we can make variables have different levels of access, private, public, or public but not displayed in the inspector window.

Accepting user input

Of course, we want our game to respond to user input. The most common ways to do that are using the following methods in the Update() function of a component (or anywhere else you like):

  • Input.GetKey(KeyCode.W) Returns True W key is being held down
  • Input.GetKeyDown(KeyCode.W) Returns True when W key is first pressed
  • Input.GetAxis(“Vertical”), Input.GetAxis(“Horizontal”) Returns between -1,1 mouse input movement

Manipulating GameObjects

Once we have user input we want GameObjects within our scene to respond. There are several types of responses we may consider:

  • Translation, Rotation, Scale
  • Create new GameObjects
  • Sending messages to existing GameObjects / components

Transformations

GameObjects all have a transform property which enable various useful manipulations on the current game object to be performed.

cqutjhXkSZxKNCywMSjGbxewqeDo5GCp0R-d

The methods above are fairly self explanatory, just note that we use lowercase gameObject to refer to the GameObject which owns this specific instance of the component.

In general it’s a good practice to use local[Position,Rotation] rather than the global position / rotation of an object. This usually makes it easier to move objects in a manner that makes sense, as the local space axis will be oriented and centered on the parent object rather than the world origin and x,y,z directions.

sgr4nHfYLQYqjEEPSxlxPA0BhCrNjgzzvOmW

The benefits of local space become a little more obvious with a diagram!

If you need to convert between local and world space (which often is the case) you can use the following:

vNEw9xUc-B2vZOaeAqXcQn5W-lxfmJbLiEZw

As you can imagine, there is some fairly simple linear algebra behind this hinted at by the ‘Inverse’ in the method name.

Creating new GameObjects

Since GameObjects are basically everything in your scene, you might want to be able to generate them on the fly. For example if your player has some sort of projectile launcher you might want to be able to create projectiles on the fly which have their own encapsulated logic for flight, dealing damage, etc…

First we need to introduce the notion of a Prefab. We can create these simply by dragging any GameObject in the scene hierarchy into the assets folder.

BEBGqpePGsVgtEY5y89WrnLAbdZjPHZiagjZ

What prefab looks like in the Asset tab

This essentially stores a template of the object we just had in our scene with all the same configurations.

wFLWTKOYgxfMEAEzUjgMsTCETSmTA3JIPLGp

An example of a custom brick object which is used to dynamically generate Lego bricks in a scene, it has a bunch of components attached to it with various default values.

Once we have these prefab components we can assign them to inspector variables (as we talked about earlier) on any component in the scene, so that we can create new GameObjects as specified by the prefab at any time.

We can then perform ‘instantiation’ of the prefab and manipulate it to the desired location in the scene and establish the necessary parent relationships.

xAzUlbgEAIkyS8bsX8W0xlVI0YiSTiVyMljj

Accessing other GameObjects and Components

Often we need to communicate with other GameObjects as well as their associated components. Once you have a reference to a game object this is pretty simple.

ComponentName comp = some_game_object.GetComponent<ComponentName>();

After that you can access any of the public methods / variables of the component in order to manipulate the GameObject. This is the straightforward bit, however actually obtaining the reference to the GameObject can be done in several ways…

Access via inspector variable

This is the most straightforward. Simply create a public variable for the GameObject, as we’ve demonstrated earlier with the prefabs, and manually drag and drop it onto the component via the inspector. Then access the variable as above.

Access via tagging

We can tag GameObjects or prefabs via the inspector and then use the find game object functions to locate references to them.

9Ur13zYuVV3r17CGo9hDMnyCoG44jTXCwv4g

This is simply done as below.

GameObject some_game_object = GameObject.FindGameObjectWithTag(“Brick”);

Access via transform

If we wish to access components in some parent object we can easily do this via the transform attribute.

ComponentName comp = gameObject.transform.parent.GetComponent<ComponentName>();

Access via SendMessage

Alternatively if we want to send a message to many other components or wish to message an object which is far up a nested hierarchy, we can use the send message functions, which accept the name of the function followed by the arguments.

gameObject.SendMessage(“MethodName”,params); // Broadcast message

gameObject.SendMessageUpwards(“MethodName”, params); // Only received by components which are nested above.

Raycasting

You may have heard of this before when people compare FPS games that are ‘physics based’ or ‘ray based’. Raycasting is essentially like having a laser pointer which, when it comes into contact with a ‘collider’ or ‘rigidbody’, it returns a ‘hit’ and passes back the details of the object.

There are two scenarios where this comes in handy (There’s probably loads more):

  1. If you were designing a weapon system for a game, you could use raycasting for hit detection, and even customise the length of the ray so that melee items ‘hit’ only at short ranges
  2. Create a ray from the mouse pointer to a point in 3d space, ie if you wish the user to be able to select units with their mouse in a strategy game.

GcxZnE2hbosbWwoDp94ecEd1g8aVlwrFKOhB

Example 2 detailed above

As you can see, the code for this is a little bit more involved. The key thing to understand is that to cast a ray to where the mouse is pointing in 3d space requires the ScreenPointToRay transformation. The reason for this is the camera is rendering a 3d space as a 2d viewport on your laptop screen, so naturally there is a projection involved to transfer back to 3d.

Collision detection

Earlier we mentioned the Collider and Rigidbody components which can be added to an object. The rule for collisions is that one object in the collision must have a rigidbody and the other a collider (or both have both components). Note that when using raycasting, rays will only interact with objects with collider components attached.

Once setup within any custom component attached to the object, we can use the OnCollisionEnter, OnCollisionStay and OnCollisionExit methods to respond to collisions. Once we have the collision information we can get the GameObject responsible and use what we learned earlier to interact with components attached to it as well.

ppKZgvdAjKDqbW80Nin2wG9izk08UjyuaqAt

One thing to note is that rigid-bodies provide physics such as gravity for objects, so if you want this turned off you will need to check the is_kinematic on.

I9UU3oy-UoVWOwjhXUy9PRiGDT5eFO4O9-IB

Check on is kinematic to disable unwanted physics but retain nice collision detection.

Advanced Features

We won’t go into any of this now but perhaps in a future article — just to make you aware that they exist.

Creating GUI’s

Unity has a fully fledged UI engine for laying out the GUI for your game. In general these components work pretty similarly to the rest of the engine.

Extending the Unity Editor

Unity enables you to add custom buttons to your inspectors so that you can affect the world during edit mode. For example, to help with world building you might develop a custom tool window for building modular houses.

Animation

Unity has a graph-based animation system which enables you to blend and control animations on various objects such as players implementing a bone based animation system.

Materials and PBR

Unity runs off a physically-based rendering engine which enables real time lighting and realistic materials. The reality is you will either need to learn 3d modeling first or use models made and optimised by someone else before you get to this, in order to make stuff that actually looks good.

Advice For Newcomers

If you’re planning on writing your first game, don’t underestimate the complexity and time it takes to write even the most trivial of games. Remember most of the games that come out on Steam have teams working on them for years full-time!

Pick a simple concept and break it down into small achievable milestones. It’s highly recommended to separate your game into as small independent components as possible, as you’re much less likely to run into bugs if you keep the components simple rather than monolithic code blocks.

Before you go and write any code for any part of your game, go and research what someone else has done before to solve the same problem — chances are they’ll have a much slicker solution.

Nice Resources and Communities

Game design has one of the best communities of any out there, and there are loads of highly skilled pros in the industry who put content up for free or for next to nothing. It’s a field that requires 3d Modelers, Concept Artists, Game Designers, Programmers and so on. I’ve linked some great general resources that I’ve come across for each of these fields below:

Concept Art

  • Feng Zhu Design School (Over 90 hour long concept art tutorials)
  • Tyler Edlin Art (Great BST art community with feedback from pros on monthly challenges)
  • Art Cafe (Interviews and Workshops with Famous Concept Artists)
  • Trent Kaniuga (Illustrator and 2D artist who’s also making his own game)

3D Modelling

  • CG Cookie (Best Mesh Modeling Basics in Blender Ever, they’ve loads of other excellent content for blender)
  • Tor Frick (Hard Surface Modelers & Sculptors in Blender)
  • Gleb Alexandrov (Short powerful rendering tutorials in Blender)

Game Design

  • DoubleFine Amnesia Fortnight (GameDevs who do a 2 week hackathon and record their entire design process)
  • GameMakers Toolkit (Examines Game Design Principles)

Programming

  • Handmade Hero (Writing a game and engine from scratch in C)
  • Jonathan Blow (Indie dev who livestreams his game development)
  • Brackeys (Nice Unity Tutorials)

Conclusion

Hope you guys liked this tutorial! I do a bit of graphic design work as well as game and UI prototypes so check out my portfolio! I’m also on linked in.

Portfolio | LinkedIn

NwkVR7XrAVlrJUTy9x0Cc30JmbmpAayM69HK

http://eepurl.com/gkV7ov


Learn to code for free. freeCodeCamp’s open source curriculum has helped more than 40,000 people get jobs as developers. Get started

Понравилась статья? Поделить с друзьями:
  • Как написать 3700000000 лет
  • Как написать 368
  • Как написать 365 прописью
  • Как написать 360 словами
  • Как написать 360 градусов на клавиатуре