Создание игрового приложения в среде разработки игр Unity
Бесплатный доступ
Статья посвящена знакомству с работой в среде разработки игр Unity. А так же работе со встроенным сетевым сервисом Unet. Кроме того в данной работе рассказывается про пошаговое создание мультиплеерной игры в среде разработки Unity.
Разработка игры, кроссплатформенность, мультиплеер, компьютерная игра
Короткий адрес: https://sciup.org/140285767
IDR: 140285767
Текст научной статьи Создание игрового приложения в среде разработки игр Unity
Для создания игры воспользуемся межплатформенной средой разработки компьютерных игр – Unity. Для этого нам нужно скачать само средство разработки на компьютер. После этого создадим проект в 2D шаблоне как показано на рисунке 2.

Рисунок 2 – Создание проекта

Затем в открывшемся проекте создаем три папки во вкладке project:
Prefabs, Scripts, Sprites как показано на рисунке 3

Рисунок 3 – Создание папок
Далее переходим в папку Sprites и создаем там Square, как показано на рисунке 4.

Рисунок 4 – Создание Square
Перетаскиваем Square на Scene и делаем из него игрока, как продемонстрировано на 5 рисунке.

Рисунок 5 – Создание игрока
После этого переходим в Inspector и задаём нашему игроку свойства
Transform,Sprite Render,Ridgitbody2D, что показано на рисунке 6.
▼ л Transform |
Q », |
||
Position |
X -0.03 Y -0.02 Z |
0 |
|
Rotation |
X 0 Y 0 Z |
0 |
|
Scale |
X 0.4237236 Y 2.208321 Z |
1 |
|
Tig @Sprite Renderer |
Q », |
||
Sprite |
Square |
0 |
|
Color |
|||
Flip |
px Qy |
||
Material |
... Sprites-Default |
0 |
|
Draw Mode |
[ Simple |
4 | |
|
Sorting Layer |
| Default |
4 | |
|
Order in Layer |
0 |
||
Mask Interaction |
[ None |
||
T ^ Rigidbody 2D |
Q», |
||
Body Type |
| Dynamic |
4 | |
|
,____M -14-am ь-i -il______________________________ |
—Чопе (Physics Material 2D) |
0 |
|
I i ne type or me rigiacoay .l |
|||
»j 1111 u i u c^ u |
|||
Use Auto Mass |
□ |
||
Mass |
1 |
||
Linear Drag |
0 |
||
Angular Drag |
0.05 |
||
Gravity Scale |
0 |
||
Collision Detection |
[ Discrete |
4 | |
|
Sleeping Mode |
[ Start Awake |
4 | |
|
Interpolate |
| None |
4 | |
|
► Constraints |
|||
► Info |
|||
■ I^Box Collider 2D |
Q », |
||
Л | Edit Collider |
|||
Material |
None (Physics Material 2D) |
0 |
|
Is Trigger |
и |
||
Used By Effector |
|||
Used By Composite |
|||
Auto Tiling |
□ |
||
Offset |
X 0 Y 0 |
||
Size |
XI Y 1 |
||
Edge Radius |
0 |
||
► Info |
Рисунок 6 – Свойства игрока
А так же зададим свойства необходимые для работы с мультиплеером:
Network Identity, Network Transform, как продемонстрировано на рисунке 7.
T® Network Identity (Script) IQ Фт
Server Only cannot be set for Local Player Authority objects Local Player Authority ^
TQ ^Network Transform (Script) 0] #T
Network Send Rate ^^^^—O^^^^^^^^^^^— |9
Tra П sf О Г m S у ПС M О d e [ Sync Rigidbody 2D t]
Movement:
Movement Thresholi 0.001
Velocity Threshold 0.0001
Snap Threshold |5
Interpolate Moveme 1
Rotation i
Rotation Axis | 2 (Side-on 2D) * |
Interpolate Rotation 1
Compress Rotation | Nene #J Sync Angular Veloci □
Рисунок 7 – Свойства игрока связанные с мультиплеером
После этих действий добавим скрипт необходимый для управления ракеткой и взаимодействия игрока с сервером, назовем его Rocket и так же добавим к свойствам ракетки, как продемонстрировано на рисунке 8 и на рисунке 9. После этого перетащим получившийся объект в папку Prefabs.

Рисунок 8 – Свойства игрока связанные с мультиплеером
Busing unityEngine;
[using unityEngine.Networking;
Bpublic class Rocket : NetworkBehaviour {
: private Gamecamera gameCamera;
; [syncvar] private int PlayerNumber;
■ [serializeField] private float speed = e.if;
! [SyncVar (hook = "OnPointChanged")] private int points; вI public int Points
: { get
■ {
: return points;
{
: if (value > 0 28 points ■= value)
points = value;
private void onpointchanged(int points)
I gameCamera.UpdateUI(PlayerNumber, points);
private void Fixedupdatef)
if (lisLocalPlayer) return;
-
■ else if (Input.GetKey(KeyCode.DownArrow) 22 transform.position.y > -GameCamera.Size.у + transform.localscale.y/2) transform.Translate(0, -speed, 0);
public override void OnStartLocalPlayer()
GetComponent
: if (isserver)
PlayerNumber = 1;
} private void Awake()
Рисунок 9 – Скрипт Rocket
Для того что бы игра могла работать по сети нам нужно в окне Scene добавить элемент NetworkManager как показано на рисунке 10.
":= Hierarchy
Create * All
-
▼ <3 Scene* ^
Main Camera
Network Manager
Рисунок 10 – Добавление NetworkManager
И задать ему свойства в окне Inspector: Transform, Network Manager HUD и Network Manager, который затем мы перепишем в скрипте Custom Network Manager. Свойства объекта показаны на рисунке 11.

Рисунок 11 – Свойства NetworkManager
Далее нужно написать скрипт Custom Network Manager, Который будет наследоваться от Network Manager, но иметь с ним различия, так как это нужно для корректного появления на сцене игроков и игрового мяча, скрипт Custom Network Manager продемонстрирован на рисунке 12.
4 Б
■Ч
- using unityEngine;
using unityEngine.Networking;
using system.collections.Generic;
-public class custoeNetworkManager : NetworkManager { public List
g #region SingleTon public static customNetworkManager instance { get; private set; }
♦endregion
;- private void Awake()
{ instance = this;
private void lnstantiateBall()
{
Gameobject ball = lnstantiate(spawnPrefabs[B]);
} '
n public override void onserverAddPlayer(NetworkConnection conn, short playercontrollerid)
if (currentPlayercount == 2)
lnstantiateBall();
Gameobject player = lnstantiate(playerprefab, startPositions[currentPlayercount - 1].position. Quaternion.identity);
Networkserver.AddPlayerForconnection(conn, player, playercontrollerid);
} conn.Disconnect();
Рисунок 12 – Скрипт CustomNetworkManager
Затем создадим игровой мячик перейдя в папку Sprites и создав Sircle, как показано на рисунке 13.

Рисунок 13 – Cоздание Circle
Перетаскиваем Circle на Scene и делаем из него игровой мяч, как продемонстрировано на 14 рисунке.

Рисунок 14 – Создание игрового мяча
После этого переходим в Inspector и задаём нашему мячу свойства Transform,Sprite Render,Ridgitbody2D, Cirlce Collider что показано на рисунке 15.

Рисунок 15 – Свойства игрового мяча
А так же зададим свойства необходимые для работы с мультиплеером: Network Identity, Network Transform, как продемонстрировано на рисунке 16.

Рисунок 16 – Свойства игрового мяча, связанные с мультиплеером
После этих действий добавим скрипт необходимый для взаимодействия игрового мяча с сервером, назовем его Ball и так же добавим к свойствам ракетки, как продемонстрировано на рисунке 17 и на рисунке 18. После этого перетащим получившийся объект в папку Prefabs.

Рисунок 17 – Свойства игрока связанные с мультиплеером
5 б
Busing UnityEngine; using UnityEngine.Networking;
Bpublic class Ball : NetworkBehaviour {
[SerializeField] private float speed = 8.2f;
private Vector2 direction;
В private void RespawnBall()
В if (isServer)
CustomNetworkHanager.Instance.Players[0].Points++;
} "
direction = new Vector2(x, y);
В private void Start() {
RespawnBall();
-
- private void FixedUpdate() {
transform.Translate(direction * speed);
В private void 0nTriggerEnter2D(Collider2D col) { direction = new Vector2(-direction.x, direction.y); }
Рисунок 18 – Скрипт Ball
После этого добавим на уже существующий на сцене MainCamera скрипт GameCamera к которому привяжем счет игры и его отображение на экране, как показано на рисунке 19 и рисунке 20.

Рисунок 19 –Свойства GameCamera
-
1 Busing UnityEngine;
using System.Collections.Generic; 4
14/
Bpublic class GameCamera : MonoBehaviour {
[SerializeField] private List
public static Vector2 size;
В public static Vector2 Size { get { return size; }
} public void UpdateUI(int rocketNumber, int points) { pointsText[rocketNumber].text = points.ToString();
}
Bi void Start () {
} " "
Рисунок 20 – Скрипт GameCamera
Так же для текста нам необходима будет создать на сцене Canvas который будет содержать в себе два текста, это продемонстрированно на рисунке 21. При создании Canvas на сцену автоматически добавиться элемент EventSystem.

Рисунок 21 – Создание счёта
Готовый проект представлен на рисунке 22.

Рисунок 22 – Готовый проект
Список литературы Создание игрового приложения в среде разработки игр Unity
- Руководство пользователя Unity [Электронный ресурс]. Режим доступа: https://docs.unity3d.com/ (дата обращения 19.02.019)