Научная статья на тему 'СОЗДАНИЕ ИГРОВОГО ПРИЛОЖЕНИЯ В СРЕДЕ РАЗРАБОТКИ ИГР UNITY'

СОЗДАНИЕ ИГРОВОГО ПРИЛОЖЕНИЯ В СРЕДЕ РАЗРАБОТКИ ИГР UNITY Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
386
25
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
UNITY / РАЗРАБОТКА ИГРЫ / КРОССПЛАТФОРМЕННОСТЬ / МУЛЬТИПЛЕЕР / КОМПЬЮТЕРНАЯ ИГРА / GAME DEVELOPMENT / CROSS-PLATFORM / MULTIPLAYER / COMPUTER GAME

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Васильев В. И.

Статья посвящена знакомству с работой в среде разработки игр Unity. А так же работе со встроенным сетевым сервисом Unet. Кроме того в данной работе рассказывается про пошаговое создание мультиплеерной игры в среде разработки Unity.

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

CREATING A GAMING APPLICATION IN GAME ENGINE UNITY

The article is devoted to getting acquainted with the work in the Unity game development environment. As well as working with the built-in Unet network service. In addition, this paper describes the step-by-step creation of a multiplayer game in the Unity development environment.

Текст научной работы на тему «СОЗДАНИЕ ИГРОВОГО ПРИЛОЖЕНИЯ В СРЕДЕ РАЗРАБОТКИ ИГР UNITY»

поддержке индивидуальной предпринимательской

инициативы//Министерство экономического развития, 2018г // URL: http:// smb. gov.ru/ files/images/Doklad_Mmekonomrazvitiya_za_2016-2017_gg..pdf

3. Итоги 2017 года для малого и среднего предпринимательства//Блог И. Хандрикова, дата публикации 16.01.18г // URL: https ://www.yabloko.ru/blog/2018/01/16

4. Оборот организаций годовой (без субъектов малого предпринимательства и пр.) Данные Росстата // URL: http://www.gks.ru/free_doc/new_site/business/prom/oborot.htm

5. Россия в цифрах. 2018: Крат.стат.сб./Росстат- M., 2018 - 522 с. // URL: http://www.gks.ru/free_doc/doc_2018/rusfig/rus18.pdf

6. Центр статистики МСП. Сведения ЕГРЮЛ // URL: https ://rcsme.ru/ru/ statistics

7. Степанова А.И. Особенности российского предпринимательства на современном этапе // Успехи современного естествознания. - 2018. - № 11. -С. 44-47 - URL: http://www.natural-sciences.ru/ru/article/view?id=10744

УДК 004

Васильев В.И. студент 2 курс

факультет «Информационные системы и технологии» Северный Арктический федеральный университет, Высшая школа информационных технологий и автоматизированных систем

Россия, г Архангельск СОЗДАНИЕ ИГРОВОГО ПРИЛОЖЕНИЯ В СРЕДЕ РАЗРАБОТКИ

ИГР UNITY

Аннотация: Статья посвящена знакомству с работой в среде разработки игр Unity. А так же работе со встроенным сетевым сервисом Unet. Кроме того в данной работе рассказывается про пошаговое создание мультиплеерной игры в среде разработки Unity.

Ключевые слова: Unity, разработка игры, кроссплатформенность, мультиплеер, компьютерная игра.

Vasilyev V.I.

Student, 2 year, faculty "Information Systems and Technology " Northern Arctic Federal University, Graduate School of Information

Technology and Automated Systems Russia, Arkhangelsk

CREATING A GAMING APPLICATION IN GAME ENGINE UNITY

Annotation: The article is devoted to getting acquainted with the work in the Unity game development environment. As well as working with the built-in Unet network service. In addition, this paper describes the step-by-step creation of a multiplayer game in the Unity development environment.

Keywords: Unity, game development, cross-platform, multiplayer, computer

game

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

Unity 2017,4.11f1

Projects Learn

Project name

U New ß Open (J) My/

Template

Organization

vladmater

( ON Enable Unity Anal/tics (?)

Cancel I Create project

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

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

Я Project | .[fi Console

Favorites

.All In Prog res All Modified . All Conflicts .All Excluded O; All Materials

All Models ■Q; All Prefabs

I Prefabs

Ш Scripts Ш Sprites

P Л j % I -

Scripts Sprit

Рисунок 3 - Создание папок

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

А

► II н

'¡= Hierarchy

С Game

Create >

Collaborate >

Show in Explorer

Open

Delete

Open Scene Additive

Import New Asset...

Import Package >

Export Package,..

Find References In Scene

Select Dependencies

Refresh Ctrl+R

Reimport

Reimport All

Extract From Prefab

Run API Updater...

Open C# Project

Folder

C# Script Shader Testing Playable!

Assembly Definition

Scene Prefab

Audio Mixer

Material Lens Flare Render Texture Lightmap Parameters Custom Render Texture

Sprite Atlas Sprites

Tile

Animator Controller Animation

Animator Override Controller Avatar Mask

Timeline

Physic Material Physics Material ZD

GUI Skin Custom Font

Legacy

UlElements View

[ Г Coll

QAs

>

m

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

и делаем из него игрока, как

Л

Рисунок 5 - Создание игрока

После этого переходим в Inspector и задаём нашему игроку свойства Transform,Sprite Render,Ridgitbody2D, что показано на рисунке 6.

* л Transform

Position Rotation Scale

X -0,03

X 0

Y -Ü.02 Z 0 ~ Y "û Z 0

X 0.423723E Y 2.203321 Z 1

rite Reil derer

Sprite Color Flip

Material Draw Mode

[Square

□ X □*

Sprites-Default

Simple

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Sorting Layer Order in Layer Mask Interaction

Default

I None

■V Rigidbody 2D _

Body Type I Dynamic

The type of the rigidbody,

one (Physics Material 2D)

гта I lI l*_ Li

Use Auto Mass Mass

Linear Drag Angular Drag Gravity Scale Collision Detection Sleeping Mode Interpolate Constraints Info

0.05

Start Av.'ake

У Вон Collider 2D

Edit Collider

Material

Is Trigger

Used By Effector

Used By Composite

Auto Tiiing

Offset

Size

Edge Radius Info

0 Y 0

1 Y 1

Ejft,

jLie,

о

о

!

Qft,

о

(Lja.

None (Physics Material 2D)

□ □

Рисунок 6 - Свойства игрока

А так же зададим свойства необходимые для работы с мультиплеером Network Identity, Network Transform, как продемонстрировано на рисунке 7.

▼ ® Network Identity (Script) Q

Server Only cannot be set for Local Player Authority objects Local Player Authority

T© ® Network Transform (Script) Q

Network Send Rate [9

Transform Sync Mode Sync Rigidbody 2D__ij

Movement:

Movement Thresholc 0.001 Velocity Threshold 0.0001 Snap Threshold 5 Interpolate Moveme 1 Rotation:

Rotation Axis [ Z (Side-on 2D)_¡J

Interpolate Rotation 1

Compress Rotation [ None Г|

Sync Angular Velocii_J

Рисунок 7 - Свойства игрока связанные с мультиплеером После этих действий добавим скрипт необходимый для управления ракеткой и взаимодействия игрока с сервером, назовем его Rocket и так же добавим к свойствам ракетки, как продемонстрировано на рисунке 8 и на рисунке 9. После этого перетащим получившийся объект в папку Prefabs.

■r|(jj 0 Rocket (Script) Q»,

Script Rocket О

Speed 0.1

Network Channel 0

Network Send Interval 0,1

Рисунок 8 - Свойства игрока связанные с мультиплеером

Busing unityEngine;

[using unityEngine.Networking;

Rpublic class Rocket : NetworkBehaviour {

private GameCamera gameCanera; [Syncvar] private int PlayerNumber;

[serializeField] private float speed = e.if; [Syncvar (hook = "OnPointChanged")] private int points;

public int Points {

get {

return points;

}

set {

if (value > 0 S3 points != value) points = value;

private void onPointchanged(int points) i

ganecamera.updateuI(PlayerNumber, points);

>

private void FixedupdateQ {

if (!isLocalPlayer) return;

if (input.GetKey(KeyCode.upArrow) && transforo.position.y < GameCanera.Size.y - transform.localScale.y/2) transform.Translate(0, speed, ©);

else if (input.GetKey(KeyCode.DownArrow) && transform.position.y > -GameCamera.size.y + transform.localscale.y/2) transform.Translated, -speed, 0);

public override void onstartLocalPlayer() {

Getcomponent<spriteRenderer>().color = new Color(0.3f, I20f, 2S5f, 25Sf); base.onstartLocalPlayerQ;

if (isServer)

PlayerNumber = 1;

private void Awake() {

gamecamera = camera, main. Getcomponent<GameCar>era>();

>

Рисунок 9 - Скрипт Rocket

Для того что бы игра могла работать по сети нам нужно в окне Scene добавить элемент NetworkManager как показано на рисунке 10.

А

":= Hierarchy

à ■ =

Create * "о-All

Scene*

Main Camera Network Manager

Рисунок 10 - Добавление NetworkManager

И задать ему свойства в окне Inspector: Transform, Network Manager HUD и Network Manager, который затем мы перепишем в скрипте Custom Network Manager. Свойства объекта показаны на рисунке 11.

Ü Asset Store Services

ф Inspector

0 ÖJ NetworkManager

! ■ Static

Tag Untagged

Layer Default

Transform

Position X 0 Y 0 z 0

Rotation X 0 Y 0 z 0

Scale X 1 Í 1 z .1

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

' l&j Custom Network Manager (Script)

Don't Destroy on Load

Run in Background

ivT

Info

Offline Scene *3None (Scene Asset) О

Online Scene <.;None (Scene Asset) О

Network Info Spawn Info

Player Prefab Player

Auto Create Player

Player Spawn Method Random

Registered Spawnable Prefabs:

Ball 1 Ball 1 О

+ ■ ■■

Advanced Configuration Use Network Simulator

Script Players

CustomNetworkManager

Ш ^/Network Manager HUD (Script)

Show Puntime GUI /

GUI Horizontal Offset 0 GUI Vertical Offset 0

Add Component

Рисунок 11 - Свойства NetworkManager

А

Далее нужно написать скрипт Custom Network Manager, Который будет наследоваться от Network Manager, но иметь с ним различия, так как это нужно для корректного появления на сцене игроков и игрового мяча, скрипт Custom Network Manager продемонстрирован на рисунке 12.

1 ;-using unityEngine;

2 using unityEngine.networking;

3 using System.Collections,Generic;

4

5 --public class custamNetborfcM&nager : Netdorkp.anager {

fi 7 S 9

ie il

12

13

14

15 IS 17 13

19

20 21 22

23

24

25

26

27

28

29

30

31

32

33 3+

35

36

37 ЗЯ 39 46

41

42

43

public List<Rocket> Flayers = new List<Rocket>(); ^region singleTon

public static ajstomNetuiorki'lanager instance { get; private set #endregion

private void Awak«{) <

Instance = ttiis;

}

private void InstantisteEalli)

i

Gareotiject ball = Instatitiate(sFawnPrefabs[8]);

wetworkserver.spawn(bal1);

Debu^,Log("123lr)i

}

public override void OnServerAddPlayer{NetHorkConneccion ccnn, short playerControIIerld) i

Debug.Log("2K);

var currentPlayercourvt - Metworkserver.connections.count; if (currentPI ayerCuunt <= startPcsitions.Count) t

Debug.Lcg("i"); if (currentPlayerCount == 1) InstantiateBall();

Eameobiect player = Instantiatefplayerprefaij, startPcsitions[currentPlayercount - 1].position, Quaternion.identity]; NetuorkSe rver,Ad dpi ayer ForCon ne ctionf con п, player, playerCont го 1lerld J; Flayers. Add (player.GetCompone nt<Rocket>(]);

}

else

{

conn.Di5connect();

J

>

Рисунок 12 - Скрипт CustomNetworkManager

Затем создадим игровой мячик перейдя в папку Sprites и создав Sircle, как показано на рисунке 13.

А

Create

Collaborate

Show in Explorer

Open

Delete

Open Scene Additive Import New Asset.,, Import Package Export Package.., Find References In Seer Select Dependencies Refresh Reimport Reimport All Extract From Prefab Run API Updater... Open C# Project

Folder C# Script Shader

Playsbles

Assembly Definition

Scene

Prefab

Audio Mixer

Material

Lens Flare

Render Texture

Lightmap Parameters

Custom Render Texture

Sprite Atlas

Tile

Animator Controller

Animator Override Controller Avatar Mask

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Physic Material Physics Material 2D QUI Skin Custom Font

LflElements View

V

Polygor

Рисунок 13 - Создание Circle Перетаскиваем Circle на Scene и делаем из него игровой мяч, как

продемонстрировано на 14 рисунке.

Рисунок 14 - Создание игрового мяча

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

Q Asset Store Services О Inspector a ■

I

/ Ball 1 □ Static »

Tag Untagged т Layer Default : 1

Prefab Select Reveit Apply

■4, Transform Q

Position X -3.43443 Y -2.44810 Z 0

Rotation X 0 V 0 Z 0

Scale X 0.345431 Y 0.345431 Z 0.349431

* Si Sprite Renderer Q

Sprite № Circle о

Color 1

Flip о JÇ pY

Material Sprites-Default G

Draw Mode IS impie

Sorting Layer Default i 1

Order in Layer 0

Mask Interaction . None il

Ш У'Circle Collider 2D Qfc,

Л Edit Collider

Material None (Physics Material 2D) о

Is Trigger Used By Effector m □

Offset X 0 Y 0

Padius 0.5

Info

Rigidbody 2D 0©,

Body Type Dynamic il

Material None (Physics Material 2D) о

Simulated Use Auto Mass У □

Mass 1

Linear Drag 0

Angular Drag 0.05

Gravity Scale 0

Collision Detection Discrete il

Sleeping Mode Stait Awake i 1

Interpolate | None il

Constraints Info

Рисунок 15 - Свойства игрового мяча

А так же зададим свойства необходимые для работы с мультиплеером Network Identity, Network Transform, как продемонстрировано на рисунке 16

® Netvfork Identity (Script) О О.

Server Only

Local Player Authority

© -/ Network Transform (Script) Q

Network Send Rate [9_|

Transform Sync Mode Sync Rigidbody 2D __

Movement:

Movement Thresholt 0.00:.

Velocity Threshold |0.0001 |

Snap Threshold 5 Interpolate Moveme 1 R otation:

Rotation Axis Z (Side-on 2D) _tj

Interpolate Rotation 1

Compress Rotation [ None i ]

Sync Angular Veloci

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

▼ I&J 0Ball (Script) L. От

Script Eal! Q

Speed 0.2

Network Channel 0

Network Send Interval 0,1

Рисунок 17 - Свойства игрока связанные с мулътиплеером

А

V™ V

3 87

[SerializeField] private float speed = 8.2f; private Vectors direction;

1 -using UnityEngine;

using UnityEngine.Networking;

3

4 Epublic class Ball : NetworkBeiiaviour {

5

6

7

8

private void RespawnBallQ IB I {

11 E if (isServer)

{

if (transform.position.X > GameCamera.Size.x)

CustomNetworkKanager.Instance.Players[l] ,Points++; else if(transform.position.x < -GameCamera.Size.x}

Cus tomlfetwfl&cMa nager. Instance. Pi ayer s [6] .Points++;

}

transform.position = Vector^.zero; var x = Random.Range(0.0.70f); var y = Mathf.Sqrt(l - x * x); direction = new Vector2(Xj y);

12

13

14

15

16 17 IS

19

20 21

22 }

23

24 É private void Start()

25 {

26 RespawriBallQ;

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

27 }

23

29 E private void FixedUpdateQ

{

transform.Translate(direction * speed);

if (Mathf.Abs(transform.position.x) - transf orin. localScale . x / 2 > GameCamera.Size.x) RespawnBall();

if (Mathf.Abs(transform.position.y) + transform,localScale.y / 2 > GameCamera.Size.y) direction = new Vector2(direction.Xj -direction.y);

30

31

32

33

34

35

36

37

private void 0nTriggerEnter2D(Collider2E) col)

{

direction = new Vector2(-direction.x, direction.y);

>

39

40

41

42

>

Рисунок 18 - Скрипт Ball

После этого добавим на уже существующий на сцене MainCamera скрипт GameCamera к которому привяжем счет игры и его отображение на экране, как показано на рисунке 19 и рисунке 20.

А

Ö Asset Store Services ö Inspector

Ы

✓ M

IJ Static ч

Tag i MainCar

±\ Layer Default

Ta Transform

Position Rotation Scale ■ ® Camera Clear Flags Background Culling Mask

Projection Size

Clipping Planes Viewport Rect

Depth

Rendering Path Target Texture Occlusion Culling Allow HDR Allow M S A A Allow Dynamic ResolutkQ

Target Display | Display 1

Y 0

"уГ

Z -10

~ Z<Q

3D 33

3

W1

EH

e Graphics Settings

ï (Render Texture)

Ш И

0

M I^Fiare Layer 0 »T

^ Audio Listener щъ.

▼ (&J @Game Camera (Script) 0 a.

Script GameCamera о

▼ Points Text

Size [2 ï

Element 0 Missing (Text) о

Element 1 Missing (Text) о

Add Component

Рисунок 19 -Свойства GameCamera ï 2

3

4

5

6 7

E-using UinityEngine; using LfnityEngirie.UI; using System.Collect ions.Generic;

Epublic class GameCamera : MonoBehaviour {

[SerializeField] private List<T'ext> pointsText;

E

9 10 11 12

13

14 У В

15

16

17

18

19

20 21 22

23

24

25

26

в:

public static Vector2 size; public static Vector2 Size { get { return size; }

}

public void UpdateUI(int rocketNumber^ int points) i

pointsText[rocketMumber].text = points.ToStriingQ;

void Start () {

Debug.Log("3");

var cam m Camera.main;

size = new Vector2(cam.orthographicSize * cam.aspect, cam. ortliograpliicSize);

}

Рисунок 20 - Скрипт GameCamera

Так же для текста нам необходима будет создать на сцене Canvas который будет содержать в себе два текста, это продемонстрирована на рисунке 21. При создании Canvas на сцену автоматически добавиться элемент EventSystem.

А

GameObject Component Window Help

Create Empty

Create Empty Child

3D Object

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

ZD Object

Effects

Light

Audio

Video

Ul

Camera

Center On Children

Make Parent Clear Parent

Apply Changes To Prefab Break Prefab Instance

Set as first sibling Set as last sibling M ove To Vi ew Align With View Align View to Selected Toggle Active State

Ctrl + Shift+N Alt+Shift+N

Text

Ctrk = Ctrl-ь-Ctrl+Alt+F Ctrl + Shift+F

Alt+ Shift+A

Image Raw Image

Button

Toggle

Slider

Scrollbar

Dropdown

Input Field

Canvas Panel

Scroll View Event System

Рисунок 21 - Создание счёта

Готовый проект представлен на рисунке 22.

О

Рисунок 22 - Готовый проект

А

Использованные источники:

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

УДК 004

Васильев В.И. студент, 2 курс

факультет «Информационные системы и технологии» Северный Арктический федеральный университет, Высшая школа информационных технологий и автоматизированных систем

Россия, г Архангельск СОЗДАНИЕ ПРИЛОЖЕНИЯ СПРАВОЧНИКА В ANDROID STUDIO

Аннотация: Статья посвящена знакомству с работой в среде разработки приложений Android Studio. А так же работе с файлами разметки. Кроме того в данной работе рассказывается про пошаговое создание приложения справочника.

Ключевые слова: Android Sudio, разработка приложений, Android, справочник. Мобильное приложение.

Vasilyev V.I.

Student, 2 year, faculty "Information Systems and Technology " Northern Arctic Federal University, Graduate School of Information

Technology and Automated Systems Russia, Arkhangelsk CREATING AN APPLICATION OF THE REFERENCE BOOK IN

ANDROID STUDIO

Annotation: The article is devoted to getting acquainted with the work in the development environment of applications Android Studio. As well as working with markup files. In addition, this paper describes the step-by-step creation of a directory application.

Keywords: Android Sudio, application development, Android, reference. Mobile app.

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

А

К91 V

3 91

i Надоели баннеры? Вы всегда можете отключить рекламу.