Создание игрового приложения в среде разработки игр Unity

Автор: Васильев В.И.

Журнал: Форум молодых ученых @forum-nauka

Статья в выпуске: 2 (30), 2019 года.

Бесплатный доступ

Статья посвящена знакомству с работой в среде разработки игр 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().color = new Color(0.3f, 128f, 255f, 255f); base.onstartLocalplayer();

: 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 Players = new 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 pointsText;

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)
Статья научная