Izrada 3D računalne igre Unrealu Engine-u

Величина: px
Почињати приказ од странице:

Download "Izrada 3D računalne igre Unrealu Engine-u"

Транскрипт

1 Izrada 3D računalne igre Unrealu Engine-u Šušljek, Zdravko Undergraduate thesis / Završni rad 2020 Degree Grantor / Ustanova koja je dodijelila akademski / stručni stupanj: Polytechnic of Međimurje in Čakovec / Međimursko veleučilište u Čakovcu Permanent link / Trajna poveznica: Rights / Prava: In copyright Download date / Datum preuzimanja: Repository / Repozitorij: Polytechnic of Međimurje in Čakovec Repository - Polytechnic of Međimurje Undergraduate and Graduate Theses Repository

2 MEĐIMURSKO VELEUČILIŠTE U ČAKOVCU STRUČNI STUDIJ RAČUNARSTVA ZDRAVKO ŠUŠLJEK IZRADA 3D RAČUNALNE IGRE U UNREAL ENGINE-U ZAVRŠNI RAD ČAKOVEC, 2020.

3 MEĐIMURSKO VELEUČILIŠTE U ČAKOVCU STRUČNI STUDIJ RAČUNARSTVA ZDRAVKO ŠUŠLJEK IZRADA 3D RAČUNALNE IGRE U UNREAL ENGINE-U MAKING OF 3D COMPUTER GAME IN UNREAL ENGINE ZAVRŠNI RAD Mentor: Nenad Breslauer, v. pred. ČAKOVEC, 2020.

4 Zahvala: Ponajprije se zahvaljujem svom mentoru Nenadu Breslaueru zbog svog prenesenog znanja i pomoći tijekom studiranja i izrade ovog završnog rada. Zahvaljujem se i mojoj obitelj bez koje sve ovo nebi bilo moguće. Spomenuo bih i pomoć koju su mi pružili svi ostali profesori i radnici Veleučilišta.

5 SAŽETAK Unreal Engine je alat za stvaranje naprednog 3-D prostora u realnom vremenu i moguće ga je koristiti besplatno. On konstantno evoluira kako bi ga koristili ne samo programeri igara nego i mnoštvo drugih današnjih industria i kreatora. Kako bi pomoću njega izradili interaktivna iskustva, vrhunski sadržaj i imerzan virtualni svijet. Unreal engine nudi realistične animacije dinamičku fiziku i efekte, fotorealistično prikazivanje, solidan prijevod podataka i mnoštvo ostalih elemenata. Unreal Engine izašao je 2012 godine i s time je doni jako velike promjene u industriji video igara zbog povišenih preformansi i bolje vizualne kvalitete proizvedenog produkta. Predstavio je i mogućnost programiranja s Narctima (engl. Blueprints) i C++-om. Epic Games Inc. je kompanija koja je izradila Unreal Engine i 1998 pomoću njega su izradili igru Unreal. Unreal Engine podržava i nove tehnologije kao što to su VR (engl. virtual reality), AR (engl. augmented reality) i MR (engl. mixed reality). U ovom radu prikazan je postupak izrade 3D igre pomoću raznih alata i programa koje Unreal engine povezuje u jednu cijelinu. U radu će se koritit Unreal Engine kao game engine, Visual studio kao program za pisanje programskog koda i Mixamo za implementaciju objekata i animacija u računalnu igru. Ključne riječi: Unreal engine, Visual studio, 3D računalna igra, Mixamo, Nacrti

6 Sadržaj 1. UVOD CILJ RADA RAZVOJNA OKOLINA Unreal engine Visual studio Mixamo INSTALACIJA UNREAL ENGINE-A Kreiranje Epic Games računa (engl. account) Instalacija Epic Games Luncher-a Prijava Epic Games računa (engl. account) EPIC GAMES LUNCHER Unreal Engine sekcija PRIMJENA UNREAL ENGINE 4 SOFTVERA Unreal engine VISUAL STUDIO PPCharacterBase.h PPCharacterBase.cpp NACRTI (ENGL. BLUEPRINTS) Vrste Nacrta Level Nacrt Nacrt Klase Vrste Čvorova...29

7 8.3 Nacrti u radu BP_Death Nacrt BP_Caracter Nacrt BP_Level Nacrt Caracter_AnimBP Nacrt ALAT ZA SEKVENCIRANJE NIVOA (engl. LEVEL SEQUENCER) VRSTA IGRE Proces izrade video igre MIXAMO KONSTRUKCIJA ZAVRŠNE DATOTEKE ZAKLJUČAK LITERATURA...43

8 1.UVOD U 21. stoljeću industrija video igara je jedna od vodećih industrija u svijetu koja na globalnoj razini vrijedi oko 109 milijardi dolara. Nekoliko stotina video igara svaki dan izađe na tržište. Što se tiče video igara postoje razni žanrovi, poput FPS-a (engl. first person shooter), strategija (engl. strategy),opstanci (engl. survival), kraljevske bitke (engl. battle-royale). Što se tiče izradi video igara najčešće kompanije poput UBISOFT-a, koje razvijaju igre, imaju svoje softvere (engl. Game engine), tj. motore koji pokreću igre. Na tržištu ima nekoliko stotina motora za igre ovisno o vrsti igre za koju su namijenjeni, npr. ukoliko tvrtka odluči raditi samo 2D igre tada im je nepotrebno stvarati sučelja i ostale komponente za 3D igre. Na tržištu postoje i neki besplatni motori za igre kao što su Unity i Unreal Engine, ali kreatori tih motora uzimaju postotak zarade igara koje su izrađene u njima. Unity ima pravilnik u kojem piše da ukoliko se u fiskalnoj godini prekorači zarada veća od 100,000 US dolara tada se treba kupiti Unity pro(pro verzija unity-a) dok Unreal Engine ima pravilnik u kojem piše da ukoliko zarada prelazi 5,000 US dolara tada se njima plača 5% od svake nove zarade. Što se tiče programskih jezika Unity koristi C# dok Unreal Engine koristi C++. 6

9 2. CILJ Glavni cilj ovoga rada je prikazati proces instalacije Unreal Engine-a i cijeli skup procesa potrebnih za izradu 3D igre u Unreal Engine-u. 3. RAZVOJNA OKOLINA U ovom projektnom zadatku će se koristiti Unreal Engine kao glavna razvojna okolina. Visual studio kao program u kojem će biti pisan C++ programski kod te Mixamo kao online karakter i animacija-servis. Slika 1-Epic Games web-stranica Izvor Unreal Engine Unreal Engine je motor za igre (engl. game engine) koji je kreiran od strane Epic Games, Inc. te je open source. Unreal engine je u uporabi od godine za komercijalne svrhe. Unreal Engine koristi C++ programski jezik te pruža mnoštvo klasa pomoću kojih je rad 7

10 u engine-u olakšan. Kreiran je za Microsoft Windows, MacOS, Linux, SteamOS, HTML5, IOS i PlayStation 4. [1] 3.2. Visual studio Visual Studio je program, tj.razvojno okruženje IDE (engl. Integrated Development Enviroment) izdano od strane Microsoft-a koji se koristi za razvoj računalnih programa za Windows, web-stranice, aplikacije i usluge. Koristi Microsoft-ove platforme za razvoj (API). Ugrađeni jezici u visual studiu su: C, C++, VB.NET, C# i F#. Također podržava M-a, Pyton-a, Ruby-a, XML/XSLT, HTML/XHTML, JavaScript i CSS. [2] 3.3. Mixamo Mixamo je prva usluga animiranja likova na internetu. Moguće je preko njihove stranice besplatno dobiti gotove objekte karaktera i u isto vrijeme animacije za te iste karaktere. Postoje tisuće gotovih animacija na stranici Mixama i automatski sistem koji povezuje animacije s tim istim karakterima. Mixamov sadržaj se može koristiti ne samo za izgradnju igara nego za bilo što što je povezano s animacijama na primjer reklame ili videa. [4] 8

11 4. INSTALACIJA UNREAL ENGINE-A Nebitno je li osoba samostalni (engl. independent) programer igara ili samo želi stvoriti vlastiti virtualni svijet te se samo zabaviti, Unreal Engine je jedan on najboljih i najpopularnijih motora (engl. engine) zajedno s Unity Engine-om. U sljedećim instrukcijama prikazano je kako instalirati Unreal Engine na Windows operativnom sustavu Kreiranje Epic Games računa (engl. account) Dolaskom na Epic Games web-stranicu potrebno je pritisnuti gumb započni sad (engl. get started now) Slika 1-Epic Games web-stranica Izvor- Pritiskom gumba započni sad (engl. get started now) otvorit će se novi list stranice na kojem će se prikazati opcije licenciranja (engl. License options). Mogući je odabir između dviju opcija, a to su licenca za izdavanje (engl. publishing license) i licenca za kreatora (engl. creators license). U ovom slučaju odabrana je licenca za kreatora. 9

12 Slika 2-Epic Games opcije licence (engl. License options) Izvor- Odabirom licence za kreatora otvorit će se prozor za kreiranje novoga Epic Games računa. Slika 3-Epic Games prozor za registriranje Izvor- 10

13 U slučaju da korisnik ima unaprijed kreirani Epic Games račun potrebno je pritisnuti gumb Prijavi se (engl. Sign in). U novootvorenom prozoru potrebno je ispuniti državu korisnika, ime i prezime korisnika, ime koje će se koristiti za prikaz profila unutar Epic Games svijeta, adresu i lozinku. Iznad gumba stvori račun (engl. create account) postoje dva potvrdna okvira (engl. check box). Prvi potvrdni okvir postavlja pitanje želi li korisnik primati o događanjima unutar Epic Games svijeta i taj okvir nije obavezan za potvrditi. Drugi potvrdni okvir odnosi se na Epic Games-ove uvjete usluge i obavezan je za potvrditi. Nakon što su ispunjenja sva polja i potvrđen potreban okvir potrebno je pritisnuti gumb kreiraj račun (engl. create account). Pritiskom gumba otvorit će se novi list stranice koji traži od korisnika da potvrdi ugovor o licenci za krajnjeg korisnika. Slika-4 Licenca za krajnjeg korisnika Izvor- 11

14 4.2. Instalacija Epic Games Luncher-a Nakon potvrde ugovora o licenci za krajnjeg korisnika i pritiskom gumba otvorit će se novi list web stranice u kojem korisnik može odabrati verziju Unreal Engine-a prema potrebi njegovog operativnog sustava. Slika-5 Prozor za preuzimanje Izvor- Odabirom verzije automatski će se otvoriti prozorčić za preuzimanje i preuzet će se instalacija za Epic Games Luncher. Nakon što se instalacija Epic Games Luncher-a preuzela u određenu mapu potrebno ju je pokrenuti i proći kroz instalacijske upute. Epic Games Luncher koristi se samo kao pokretač Unreal Engine-a. Kada se instalacija izvršila potrebno je pokrenuti navodno instalirani Epic Games Luncher. Pokretanjem Epic Games Luncher-a pojavit će se prozor za prijavu (engl. Sign in window). 12

15 4.3. Prijava Epic Games računa (engl. account) Slika-5 Prozor za prijavu Izvor- Autor U prozor za prijavu potrebno je upisati ime korisnika (engl. username) ili i lozinku (engl. password) iz prethodnog registriranog računa (engl. account). S korektno napisanim podacima računa i pritiskom gumba 'Prijavire se sad' (engl. Log in now) prikazat će se početna stranica Epic Games Lunchera. Potrebno je kliknuti na gumb 'Unreal Engine',a potom u gornjem desnom kutu na gumb 'Instal Engine' (cro. Instaliraj Motor). 13

16 Gumb Instal Engine pokreče prozor u kojem je potrebno odabrati lokaciju na kojoj će se instalirati Unreal Engine. Slika-6 Prozor lokacije instalacije 5. EPIC GAMES LUNCHER Epic Games Luncher posjeduje američka kompanija Epic Games, Inc. koja razvija softver i video igre. Jedni od najpopularnijih softvera koji i danas ažuriraju je Unreal Engine i Epic Games Luncher. Epic Games Luncher služi kao pokretač svih igara i softvera svorenih od strane Epic Games, Inc. kompanije. Nakon nedavnog izdanja Epic Games igre Fortnite koja je jako brzo postala jedna od najpopularnijih igara na tržištu Epic Games Luncher je postao konkurent (engl. rival) starijih popularnih pokretača igara kao što to je Steam. Luncher se sastoji od pet glavnih dijelova i tri sporedna. Pet glavnih dijelova su: 1. Dom (engl. Home) 2. Dućan (engl. Store) 3. Knjižnica (engl. Library) 4. Prijatelji (engl. Friends) 5. Unreal Motor (engl. Unreal Engine) Tri sporedna dijela su: 1. Preuzimanja (engl. Downloads) 14

17 2. Postavke (engl. Settings) 3. Profil (engl. Profile) Dom služi za reklamiranje igara koje su dostupne za kupnju i instalaciju te prikaz novosti u svijetu Epic Games, Inc. kompanije. Na desnoj strani Dom-sekcije nalazi se i sekcija za brzo pokretanje kupljenih igara (engl. Quick launch) te sekcija koja prikazuje trenutne aktivne Prijatelje (engl. active friends) koje registrirani korisnički račun posjeduje.u Dućan (engl. store) sekciji nalaze se sve igre koje je moguće kupiti i njihova cijena ispod svake slike koja predstavlja tu igru. Slika-7 Epic Games Luncher Dućan Knjižnica (engl. Library) služi kao spremnik svih kupljenih igara na korisničkom računu gdje ih je moguće pokrenuti. Klikom na Prijatelji (engl. Friends) sekciju otvorit će se novi prozor u kojem su prikazani svi dodani prijateljski korisnički računi i u kojem je moguće dodati i prihvatiti nove prijateljske korisničke račune. 15

18 5.1. Unreal Engine sekcija Unreal Engine sekcija je jako slična sveukupnim sekcijama cijelog Epic Games Luncher jer ima isto kao i Epic Games Luncher svoje posebne sekcije kao što su: Tržište (engl. Marketplace), Knjižnica (engl. Library), Uči (engl.learn) i Unreal Engine-sekcija koja ima istu svrhu kao što ima Dom (engl. Home) sekcija Epic Games Luncher-a. Uči (engl. Learn) je odlična sekcija ako ste novi programer igara jer se sastoji od mnogobrojnih tutoriala i dokumentacije o izradi igara u Unreal Engine-u koji su većinom besplatni. Tržište (engl. Marketplace) radi na istoj bazi kao i Dućan (engl. Store) od Epic Games Luncher-a. Sastoji se od mnoštva elemenata igara koje je moguće kupiti, a i mnogo ih je besplatnih. Moguće je kupiti sve od modela igrača do bilo kakvih zvukova vezanih uz igru, na primjer hod igrača. Postoji mogućnost da korisnici postave na prodaju svoje elemente igre koje su oni sami izradili po cijeni koja njima odgovara. U Tržište (engl. Marketplace) je ugrađen i sistem za filtriranje elemenata igre i sekcija gdje svaki tjedan određen broj elemenata, koje bi obično trebalo kupiti, su besplatni. Slika-8 Epic Games Luncher Unreal Engine - Tržište 16

19 Sekcija Knjižnica (engl. Library) prikazuje sve korisnikove projekte koje je izradio i sve elemente koje je kupio preko Tržišta (engl. Marketplace). Prikazuje i verziju Unreal Engine-a koju trenutno korisnik koristi i koliko ta verzija zauzima megabajta na korisnikovom tvrdom disku. Slika-9 Epic Games Luncher Unreal Engine -Tržište Sporedna sekcija Epic Games Luncher-a Preuzimanja (engl. Downloads) prikazuje sve elemente i igre koje je korisnik ostavio za budućnost i elemente igre koji se trenutno preuzimaju. Sekcija Postavke (engl. Settings) služi da bi korisnik mogao promijeniti različite funkcionalnosti Epic Games Luncher-a, na primjer promijeniti jezik Epic Games Luncher-a. Sekcija Profil (engl. Profile) služi kako bi korisnik mogao manipulirati sa svojim Epic Games korisničkim računom. 17

20 6. PRIMJENA UNREAL ENGINE 4 SOFTVERA Unreal Engine 4 koriste monštvo raznih skupina od samostalnih razvijača igara do velikih AAA kompanija. Unreal Engine se može pokretati i na Windows i Mac operativnim sustavima, a može objaviti igre i aplikacije stvorene u Unreal Engine-u na Windows, Mac, PlayStation, Xbox One, ios, Android, HTML i Linux platformama. 'AAA' termin se koristi za klasifikaciju video igara koje su izgrađene od strane većih ili srednjih izdavačkih kompanija koje ulože u izgradnju velike proračune. Termin 'AAA' je bio započet na konvenciji za igre krajem 1990-ih od kompanija koje su sudjelovale na toj istoj konvenciji. Na slici je prikazano početno sučelje Unreal Engine-a i prvi nivo (engl. level) ovoga rada. Slika-10 Unreal Engine sučelje 6.1 Stvaranje novog projekta ili otvaranje postojećeg u Unreal Engine-u Kada se pokrene Unreal Engine i ako korisnik nema niti jedan projekt u izradi Unreal Engine će autmatski otvoriti prazan projekt. Moguće je raditi odmah u tom praznom projektu, ali ako 18

21 korisnik želi neke posebne postavke ili ako želi da projekt automatski sadrži neke dodatne skripte i objekte, na primjer skrpite i objekte za FPS (engl. First Person Shooter), mora stvoriti novi projekt. Da bi korisnik stvorio novi projekt mora pritisnuti u gornjem desnom kutu koriničkog sučelja na gumb Datoteka (engl. File). Otvorit će se padajući izbornik u kojem korisnik mora odabrati gumb Novi Projekt (engl. New Project) koji će otvoriti novi prozor. Slika-11 Datoteka gumb U novom prozoru korisnik može birati između projekta baziranog na C++ kodu ili na Planovima (engl. Blueprint). U svakom od ta dva odabira postoje mnoge dodatne opcije koje 19

22 korisnik može odabrati. Sve ovisi o tome što točno korisnik traži za svoj projekt koji razvija, na primjer korisnik unaprijed mora znati hoće li igru razvijati kao 3D igru ili 2D igru i koji žanr igre korsnik misli. Ako je taj žanr, na primjer 2D bočni klizač (engl. Side Scroller), onda korisnik ima mogućnost odabrati opciju 2D bočnog klizača koja mu pruža već gotove elemente tog žanra. Za ovaj projekt odabrana je C++ opcija s Osnovni Kod (engl. Basic Code) opcijom koji stvori prazan projekt s osnovnim klasama. Slika-12 Novi Projekt prozor Kao što se vidi na slici 12 postoje još tri dodatne opcije tijekom stvaranja novog projekta. Moguće je odabrati je li novi projekt namijenjen kao mobilna aplikacija ili aplikacija stvorena za 20

23 Windows operativi sustav i Konzole. Moguće je odabrati između Maximalne Kvalitete (engl. Maximum Quality) ili Skalabilni 3D ili 2D (Scalable 3D or 2D) i može se odabrati hoće li projekt sadržavati Početnički Sadržaj(engl. Starter Content) ili neće imati Početnički Sadržaj. Za ovaj rad izabrana je opcija za Windows operativni sustav, opcija za Maximalnu kvalitetu i opcija za Početnički Sadržaj. Nakon što su odabrane sve željene opcije potrebno je stisnuti Kreiraj Projekt gumb (engl. Create Project). Potrebno je neko vrijeme da se novi projekt izgradi, ovisno o snazi hardvera na kojem se projekt gradi. 7. VISUAL STUDIO Visual studio se u ovom radu koristi za pisanje C++ skripta koje upravljaju kretanjem karaktera, to jest definira se brzina kretnja, okretanja karaktera i definiraju se s kojim će kontrolama karakter biti upravljan. U ovom radu kontrole su izrađene za tipkovnicu i miš. U ovom projektu postoje dvije skripte koje su zaslužne za spomenute komponente igre, a to su PPCharacterBase.h i PPCaracterBase.cpp. 7.1 PPCharacterBase.h #pragma once #include "CoreMinimal.h" #include "GameFramework/Character.h" #include "InteractInterface.h" #include "PPCharacterBase.generated.h" class USpringArmComponent; class UCameraComponent; class UStaticMeshComponent; UCLASS() class PP_API APPCharacterBase : public ACharacter, public IInteractInterface { 21

24 public: GENERATED_BODY() // Sets default values for this character's properties APPCharacterBase(); UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Camera") USpringArmComponent* SpringArmComp; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Camera") UCameraComponent* CameraComp; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Player") UStaticMeshComponent* MeshComp; protected: void MoveForward(float Value); void MoveRight(float Value); void TurnAtRate(float Value); void LookUpAtRate(float Value); void InteractPressed(); UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Camera") float BaseTurnRate; UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Camera") float BaseLookUpRate; UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Interaction") float TraceDistance; UFUNCTION(BlueprintNativeEvent) void TraceForward(); void TraceForward_Implementation(); public: // Called to bind functionality to input virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override; 22

25 void OnInteract(AActor* Caller); void StartFocus(); void EndFocus(); }; 7.2 PPCharacterBase.cpp // Fill out your copyright notice in the Description page of Project Settings. #include "PPCharacterBase.h" #include "GameFramework/SpringArmComponent.h" #include "Camera/CameraComponent.h" #include "Components/StaticMeshComponent.h" #include "Components/InputComponent.h" #include "GameFramework/Controller.h" #include "DrawDebugHelpers.h" // Sets default values APPCharacterBase::APPCharacterBase() { // Set this character to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = false; SpringArmComp = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArmComp")); SpringArmComp->SetupAttachment(RootComponent); CameraComp = CreateDefaultSubobject<UCameraComponent>(TEXT("CameraComp")); CameraComp->SetupAttachment(SpringArmComp); MeshComp = 23

26 CreateAbstractDefaultSubobject<UStaticMeshComponent>(TEXT("PlayerMesh")); MeshComp -> SetupAttachment(RootComponent); } BaseTurnRate = 45.0f; BaseLookUpRate = 45.0f; TraceDistance = f; void APPCharacterBase::MoveForward(float Value) { if ((Controller) && (Value!= 0.0f)) { const FRotator Rotation = Controller->GetControlRotation(); const FRotator YawRotation(0, Rotation.Yaw, 0); const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X); AddMovementInput(Direction, Value); } } void APPCharacterBase::MoveRight(float Value) { if ((Controller) && (Value!= 0.0f)) { const FRotator Rotation = Controller->GetControlRotation(); const FRotator YawRotation(0, Rotation.Yaw, 0); const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y); AddMovementInput(Direction, Value); } } void APPCharacterBase::TurnAtRate(float Value) { AddControllerYawInput(Value * BaseTurnRate * GetWorld()- >GetDeltaSeconds()); } void APPCharacterBase::LookUpAtRate(float Value) 24

27 { AddControllerPitchInput(Value * BaseLookUpRate * GetWorld()- >GetDeltaSeconds()); } void APPCharacterBase::InteractPressed() { TraceForward(); } void APPCharacterBase::TraceForward_Implementation() { FVector Loc; FRotator Rot; FHitResult Hit; GetController()->GetPlayerViewPoint(Loc, Rot); FVector Start = Loc; FVector End = Start + (Rot.Vector() * TraceDistance); FCollisionQueryParams TraceParams; bool bhit = GetWorld()->LineTraceSingleByChannel(Hit, Start, End, ECC_Visibility, TraceParams); DrawDebugLine(GetWorld(), Start, End, FColor::Red, false, 2.0f); if (bhit) { DrawDebugBox(GetWorld(), Hit.ImpactPoint, FVector(5, 5, 5), FColor::Emerald, false, 2.0f); } } // Called to bind functionality to input void APPCharacterBase::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent); PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump); PlayerInputComponent->BindAction("Jump", IE_Released, this, 25

28 &ACharacter::StopJumping); PlayerInputComponent->BindAction("Interact", IE_Pressed, this, &APPCharacterBase::InteractPressed); PlayerInputComponent->BindAxis("MoveForward", this, &APPCharacterBase::MoveForward); PlayerInputComponent->BindAxis("MoveRight", this, &APPCharacterBase::MoveRight); PlayerInputComponent->BindAxis("Turn", this, &APawn::AddControllerYawInput); PlayerInputComponent->BindAxis("LookUp", this, &APawn::AddControllerPitchInput); PlayerInputComponent->BindAxis("TurnRate", this, &APPCharacterBase::TurnAtRate); PlayerInputComponent->BindAxis("LookUpRate", this, &APPCharacterBase::LookUpAtRate); } void APPCharacterBase::OnInteract(AActor* Caller) { } void APPCharacterBase::StartFocus() { } void APPCharacterBase::EndFocus() { } 8. NACRTI (ENGL. BLUEPRINTS) Nacrt je sistem koji je zasnovan na konceptu korištenja sučelja za stvaranje elemenata igre iz Unreal Editor-a. To je zapravo sustav skripti za elemente igre. Nacrti koriste definiranje objektno orijetiranih klasa u motoru kao i mnogi uobičajni skriptni jezici. Oni omogućavaju korištenje gotovo cijelog niza koncepata i alata koji su uglavnom dostupni samo programerima. Skupina koja najviše beneficira od nacrta (engl. Blueprints) su dizajneri koji nemaju veliko znanje o 26

29 programiranju. Programeri mogu izraditi osnovne sustave u Nacrtima na kojima dizajneri mogu lagano proširiti svoj dio posla. [3] Slika-13 Nacrti mapa u radu Nacrti se baziraju na vizualnom predstavljanju skripti u svojoj osnovnoj formi. U njima se spajaju Čvorovi (engl. Nodes), Događaji (engl. Events),Funkcije (engl. Functions), Varijable s Žicama (engl. Variables with Wires) i pomoću tih elemenata moguće je dobiti kompleksan element igre. Nacrti rade koristeći grafove Čvorova u različite svrhe, na primjer konstrukciju objekata, pojedinačne funkcije i generalne događaje u igri koji su specifični za svaku instancu određenog Nacrta s ciljem da se implementiraju određena ponašanja i funkcijonalnosti igre Vrste Nacrta Postoje dvije vrste Nacrta koje se najčešće koriste, a to su Level Nacrt (engl. Level Blueprint) i Nacrt klase (engl. Blueprint Class) Level Nacrt Svaki stvoreni level igre ima svoj jedinstveni Level Nacrt koji može referencirati i manipulirati aktere u levelu, kontrolirati sinematik (engl. cinematics). Nacrt razine također može komunicirati s klasama nacrta postavljenim u levelu poput čitanja, to jest postavljanja (engl. reding/setting) bilo kakvih varijabli ili pokretanja piralgođenih događaja. Kako bi se otvorio nacrt levela treba prvo otvoriti taj level igre, a potom kliknuti na gumb Nacrti (engl. Blueprints) koji se nalazi u gornjem srednjem dijelu Unreal Engine sučelja. Taj gumb će otvoriti padajući izbornik (engl. dropdown menu) na kojem će se nalaziti opcija Otvori Nacrt Levela (engl. Open Level Blueprint). 27

30 Slika-14 Nacrt padajući meni Nakon pritiska gumba Otvori Nacrt Levela otvorit će se novi prozor koji će pokazati Nacrt zadanog levela. Slika-15 Nacrt levela 28

31 Nacrt Klase Nacrti klase su idealni za izradu interaktivnih mehanika igre, na primjer aktiviranje gumba, otvaranje vrata, stvaranje objekata koji mogu uništiti aktera. Takđer se koriste za reproduciranje zvuka ili animacije, promjenu materijala (engl. materials) i dodira različitih objekata u igri. Zbog samostojeće naravi Nacrta moguće je stvoriti Nacrt na takav način da ga je moguće jednostavno staviti u bilo koji level i on će raditi uz minimalno postavljanje Nacrta Vrste čvorova Čvorovi u Nacrtima su podijeljeni po bojama, svaka boja čvora ima svoje značenje, funkciju i tako dalje. Crveni čvorovi označavaju početničku točku izvršenja događaja, gdje događaji mogu početi raditi zajedno s ostalim događajima. Ljubičasti čvorovi znače da se ne mogu izbrisati (engl. delete), najmanje jedan ljubičasti čvor se nalazi u konstrukcijskoj skripti ili funkciji. Plavi čvor je najčešće funkcija (engl. function) ili događaj (engl. event) gdje se nešto radi s jednim ili više unosa te bez iznosa ili s puno iznosa. Slika-16 Plavi čvorovi Sivi čvor je najvjerojatnije makro (engl. macro) urušeni (engl. collapsed) ili upravljački (engl. contrl) čvor. Zeleni Čvor se najčešće koristi za funkciju 'Get[Nešto]'. Cijan čvor pokušava pretvoriti objekte iz jednoga tipa objekta u drugi tip objekta. 29

32 Slika-17 Cijani čvor 8.3. Nacrti u radu Postoje tri level-nacrta i četiri glavna nacrta klase. Četiri nacrta klase, kao što se vidi na slici 13 su : 1. BP_Caracter 2. Caracter_AnimBP 1. 3.BP_Death 2. 4.BP_Level BP_Death Nacrt BP_Character funkcionira tako da kada se dogodi dodir karaktera igrača i pijuna kamena pokreću se sljedeći čvorovi. Prvo se karater igrača uništi (engl. DestroyActor) pa se reproducira zvuk umiranja karaktera, zatim se prikaže meni smrti (engl. death menu) i dodaje se igraču mogućnost da mišem može upravljati meniem i oduzima mu se mogućnost da vidi bilo što, što se dogodilo prije dodira igrača i kamena 30

33 Slika-18 BP_Death Nacrt BP_Caracter Nacrt BP_Caracter Nacrt sadržava čvorove, koji nakon što su bile pritisnute određene kontrole, na primjer kontrola za skok karaktera, reproduciraju animaciju potrebnu za tu kontrolu. U ovom primjeru je to animacija skoka. Također sadržava čvorove koji kada se level igre pokrene stvore nišan (engl. crosshair) uz pomoć kojega je moguće okretati aktera igre. BP_Caracter Nacrt tadođer sadrži i prikaz (engl. viewport) karaktera u kojem je moguće mijenjati njegovu veličinu, animacije, mrežu (engl. mesh) i materijal korišten za stvaranje izgleda karaktera. 31

34 Slika-19 BP_Caracter Prikaz (engl. Viewport) Slika-20 BP_Caracter Nacrt 32

35 BP_Level Nacrt BP_Level Nacrt se sastoji samo od dva aktivna čvora i kada karakter dotakne kutiju okidača u kojoj se nalazi efekt vatre pomoću maloprije navedenih čvorova promijeni se level igre Caracter_AnimBP Nacrt Slika-21 BP_Level Prikaz (engl. Viewport) Caracter_AnimBP Nacrt sastoji od dva dijela, a to su graf događaja (engl. event graph) i graf animacije (engl animation graph). 9. ALAT ZA SEKVENCIRANJE NIVOA (engl. LEVEL SEQUENCER) Unreal engine Sequencer je alat koji koristi kinematografiju s kojom je moguće uređivati svakojake elemente u Unreal engine svijetu. Level Sequencer je spremink za vaše kinematografske scene. On mora biti stvoren da bi programer mogao započeti s radom unutar Sequencera. Kreiranjem Sekvenca Nivoa (engl. Level Sequences) i dodavanjem Traka (engl. Tracks) korisnici mogu definirati sustav svake Trake, koja će odrediti sadržaj scene. Trake mogu sadržavati sve od transformacije položaja objekta ili zvuka (uključivanje ili iskuljučivanje zvučnih traka) do animacija tog istog objekta i još nekoliko različitih transformacija drugog tipa. 33

36 U ovom radu sveukupno postoje 24 Nivo Sekvenci (engl Level Sequences) i većina njih se bavi transformacijom objekata kroz prostor, to jest promjenom njihove lokacije koja je stavljena u stanje konstantnog ponavljanja (engl. repeating). Slika-22 Nivo Sekvence (engl. Level Sequences) Slika-23 7floors_cn Nivo Sekvenca (engl. Level Sequences) U slici 23 prikazana je transformacija lokacije objekata koji su u ovom slučaju podovi. Izdrađeno je na način da se postave Ključne Točke (engl. Key Frames) u 3 lokacije objekta. Prva i zadnja Ključna Točka se postavi na početnu lokaciju tako da se objekt (u ovom slučaju pod) vrati na mjesto na kraju Sekvence, a druga Ključna Točka se u ovom slučaju postavi na lokaciju do koje treba objekt putovati. Alat sam animira prijelaz iz jedne Ključne Točke u drugu tako da izgleda ko da se objekt pokreče. Brzinu pokretanja objekta je moguće po mijenjati po želji tako da se pomaknu točno određene Ključne Točke. 34

37 10. VRSTA IGRE Realizirana je 3D igra s mehanikama skakanja i zagonetki. Igrač kontrolira karaktera uz pomoć tipka na tipkovnici i miša kroz 3D svijet. Cilj igre je da igrač uspije karaktera izmanevrirati kroz nivo i uz pomoć mehanike skakanja izbjeći svakojake prepreke koje bih igrača i njegovog karaktera u slučaju da ih ne uspije izbjeći bacile na početak nivoa. U slučaju da igrač uspije izmanevrirati karaktera do kraja nivoa otvoriti će se novi nivo i tako sve dalje dok igrač ne uspije doći do kraja igre. Svaki nivo je sve teži s kompliciranijim zaprekama i mehanikama igre Proces izrade video igre Prvi korak stvaranja video igre u Unreal Engine okolini je stvaranje novoga projekta. Projekt sadrži sav sadržaj i kod koji će se nalaziti u video igri koju korisnik razvija. Ista struktura direktorija projekta se nalazi i na korisničkovom računalu to jest na tvrdom disku računala. Korisnik ima mogućnost stvoriti i razvijati više projekta od jednom. Sljedeći korak je stvaranje prvog aktora (engl. actor) koji se kasnije u izradi ovoga projekta pretvara u karakter (engl. character) klasu. Pod aktorom se sporazumijeva svaki objekt koji se može staviti u razinu. Slika-24 Prvi actor (engl. placeholder) 35

38 Aktor je najčešće korištena klasa to jest generična klasa koja podržava 3D transformacije poput prevođenja (engl. translation), rotacije (engl. rotation) i razmjera (engl. scale). Da bi korisnik izradio aktora ili ga uništio treba koristiti C++ kod ili nacrte. Klasa koja se koristi u C++-u kao baza za sve aktore je AActor klasa. U ovom radu iskorišten je aktor kutije kao prvi aktor za rezervaciju mjesta (engl. place holder) za glavnoga karaktera kojim će se kretati igrač. Sljedeći korak je staviti komponente (engl. components) na kutiju i izkodirati fiziku svijeta. Komponente su funkcijonalnosti koje aktor može pristupiti i koristiti, one ne mogu postojati same od sebe. Komponente su zapravo dio funkcionalnosti koje se mogu dodati aktoru. Komponente mogu biti razne stvari na primjer reprodukcija zvuka aktora, razni efekti na primjer efekt vatre ili komponenta pokreta koja tjera aktora da se kreće. Pomoću nacrta kutija preuzima komponente kao što su mogućnost skakanja, reporduciranje zvuka kada se kreče i kada se skače. Pomoću C++ koda i postavke projekta (engl. project settings) izkodiran je sljedeći korak, a to je kontroler igrača (engl. player controller). Kontroler igrača uzima unos igrača i pretvara ga u interakcije unutar igre. Svaka igra minimalno ima barem jedan kontroler igrača.samo jedan kontroler igrača najčešće posjeduje karaktera ili pijuna koji reprezentira igrača u toj igri. Kontroler igrača isto služi kao glavna mrežna točka u igrama za više igrača (engl. multiplayer) jer svaki dodatni igrač mora imati i kontroler igrača za koje poslužitelj ima zasebnu instancu. Svaki igrač ima samo jedan svoj kontroler igrača koji odgovara njegovom karakteru i igrač može samo koristiti svoj kontroler igrača za komunikaciju s poslužiteljem. C++ kod i nacrti kojima kodiramo controler igrača sastoje se od osnovnih građevnih blokova u Unreal Engine-u zvanih objekti (engl.objects) koji sadrže mnoštvo funkcionanosti. Sve što ima ili nasljeđuje neku funcionalnost u Unreal Engine-u nasljeđuje od određenog objekta. U C++ UObject je osnovna klasa svih objekata koja implementira funkcionalnosti kao što su skupljač smeća (garbage collector), metapodaci (engl. metadata), podrška za izlaganje varijabli Unreal Editor-u i serializaciju za učitavanje i spremanje. Kontroler igrača je moguče vidjeti na strani dvadeset ovoga rada, a kod fizike svijeta, brzinom kojom se moze karakter okretati i kamere se nalazi na stranici devetnaest. Kamera se može korisiti sama i postaviti izravno u razinu ili može biti dio narcta. U kodu se mogu vidjeti i klase (engl. class). Klase ne moraju biti samo u C++ kodu, mogu se nalaziti i u nacrtima. Klase definiraju ponašanja i svojstva određenih aktora ili objekata 36

39 koji se koriste u stvaranju igre Unreal Engine-a. Klase su hijerarhijske, što znači da klasa nasljeđuje informacije od svojih matičnih klasa i te podatke prosljeđuju svojoj djeci (engl. child). Sljedeći korak stvaranja igre je kreiranje izgleda karaktera, animacija i reprodukcije zvuka karaktera. Karakter (engl. character) je potklasa pijun aktora kojoj je svrha da služi kao lik igrača. Potklasa karaktera uključuje postavku sudaranja s ostalim aktorima (engl. collision setup), postavku veza (engl. bindings) za dvonožnih kretanja (engl. bipedal movement) i dodatni kod za pokrete koje kontrolira igrač. Za taj korak iskorištena je Mixamo aplikacija koja je detaljnije objašnjena na stranici trideset i četiri ovoga rada. Slika-25 Komponenta skakanja (engl. placeholder) U ovom radu nisu bili korišteni pijuni (engl. pawn), ali su važan dio Unreal okoline. Pijuni služe kao avatar ili persona u igri i spadaju u potklasu aktora. Često se korise AI (engl. Artifical Intelligence) da kontroliraju pijune i taj proces se zove posjedovanje. Pijune mogu posjedovati i igrači, a ako nitko ne kontrolira pijuna onda se smatra neposjedovanim. Sada kada postoji karakter, kontroler igrača, kamera i fizika potrbno je izraditi svijet (engl. world) i nivoe (engl level). Svijet sadrži popis učitanih nivoa. Kontrolira strujanjem nivoa i stvaranjem dinamičkih aktora. Izravna interakcija sa svijetom nije potrebna, ali pomaže pružiti određenu referentnu točku unutar strukture igre to jest spominjanje svijeta izravno znači da ne 37

40 govorite o razinama, mapama ili igri. Nivoi se stvaraju (engl. created), gledaju (engl. viewed) i mijenjaju (engl. modified) uglavnom postavljanjem, preoblikvanjem i uređivanjem svojstva aktora koje sadrži. Nivoi se u Unreal Editor-u spremaju kao zasebna.umap datoteka, zbog čega se ponekad vide kao mape. U ovom radu postoje tri niva koji su dizajnirani da za svaki sljedeći nivo igraču treba više vremena da ga prouči, razumije i na kraju uspješno prođe. Nivo se gradi aktorima i neke mehanike igre se stvaraju tako da stavljamo funkcionalnosti na aktora. Jedna od glavnih mehanika ovoga rada je goručki kamen. Slika-26 aktor goruči kamen Aktor goruči kamen se sastoji od mnoštvo funkcionalnosti i jednoga nacrta da bi mogao predstavljati jednu od mehanika ove igre. Glavne funkcionalnosti ovoga aktora su efekt vatre, kutijski sudarač (engl. box colider) i cinematografijsko kretanje koje je objašnjeno na stranici dvadeset i sedam i dvadeset i osam ovoga rada. Kada kutijski sudarač ovoga aktora dotakne kutijski sudarač karaktera pomoću čvorova narcta dolazi do uništenja karaktera i reset nivoa. Nacrt ovoga aktora moguće je vidjeti na slici osamnaest ovoga rada. Sljedeči korak izrade igre je popuniti nivoe aktorima. Večina aktora posjeduju statičku mrežu (engl. static mesh). Statička mreža je niz poligona koji se geometrijski prikazuju. Ti poligoni se 38

41 mogu pohraniti unutar video memorije i prikazati (engl. render) grafičkom karticom. To im omogućuje efikasno prikazivanje, što znači da mogu biti puno složeniji od ostalih vrsta geometrije. S obzirom da su spremljene u video memoriju, statičke se mreže mogu prevesti, zakretati i skalirati, ali ne mogu se animirati njihovi vrhovi (engl. vertices). Statičke mreže se koriste za stvaranje aktora. Kada bi programer unutar Unreal Engine-a povukao i spustio (engl. drag and drop) datoteku u nivo automatski bi ta datoteka postala StatičnaMrežaAktor (engl. StaticMeshActor). Statične mreže su zapravo modeli koji su većinom stvorenim u vanjskim aplikacijam za modeliranje kao što to su: blender, 3dsMax, Maya, Softimage i tako dalje. One se mogu kupiti na Unreal dućanu koji je objašnjen na stranici deset ovoga rada. Slika-27 Prvi nivo Sljedeći korak su izrade mehanika igre. Na stranici trideset i dva opisana je jedna od tih mehanika to jest mehanika goruči kamen. Postoje još dvije glavne mehanike koje su izrađene na isti način kao i mehanika goruči kamen, a to su mehanika pada i mehanika kraja nivoa. Kada karakter padne iz nivoa zbog implementirane fizike, on će pasti na kutijski sudarač koji se nalazi ispod svakog nivoa i zbog nacrta na tom kutijastom udaraču doći će do uništenja karaktera i restartata nivoa. Tako funkcionira mehanika pada, a mehanika kraja nivoa funkcionira na sličan 39

42 način kao i prijašnje dvije mehanike. Na kraju svakog nivoa postoji aktor koji ima samo dvije funkcionalnosti a to su efekt vatre i kutijasi udarač. Kada karakter dođe u kontakt s tim kutijastim udaračem prebacit će karaktera na sljedeći nivo. Na taj način igrač ima mogućnost prelaska igrice. U zadnjem koraku potrebno je izraditi početni zaslon i zaslon kraja. Na zaslonima se nalaze par gumbova. Svaki od tih gumbova ima zasebni nacrt, na primjer pritiskom gumba play narct će omogućiti pokretanje prvoga nivoa igre ili pritiskom gumba Exit igra prestaje i korisnik se vrača na desktop svog privatnog računala. 11. MIXAMO Mixamo je tvrtka koja se zasniva na 3D računalnoj grafičkoj tehnologiji i nalazi se u Sjedinjenim Američkim Državama u gradu San Francisku. Bavi se tržnjom i razvojem internetskih usluga 3D animacije karaktera (engl. Character). Koriste tehnologiju strojnog učenja uz pomoć koje automatiziraju korake porcesa animacije karaktera, uključujući 3D modeliranje,rigovanje (engl. rigging) i animacije. Mixamova web-stranica sastoji se od jako velike kolekcije 3D karaktera velike kvalitete. Postoje karakteri za bilo kakve svhe I svaki karakter posjeduje gotove teksture (engl. textures) i rigove pa korisnik može odmah iskoriti te iste karaktere za svoje projekte. Karakteri se mogu skinuti u raznim formatima koji se mogu korisiti u raznovrsni projektima kao što to su video igre, filmovi, ilustracije ili pokretne grafike. U ovom projektu pomoću miksama ugrađen je karakter kojega igrač pokreče u igri i animacije za tog istog karakter koje su: animacije skakanja, trčanja, hodanja i mirovanja. 40

43 Slika-24 Mixamo karakter 12. KONSTRUKCIJA ZAVRŠNE DATOTEKE Prije nego što se naš Unreal projekt može distribuirati korisnicima potrebno ga je pravilno zapakirati u jednu datoteku. Pakiranje osigurava da je kompletan kod i cijeli sadržaj izgrađene igre ažuriran na pravilnu verziju te da je igru moguće pokrenuti na željenim platformama. Prije zapakiravanja razvijene igre, potrebno je postaviti početni level igre, jer ako se ne postavi početni level, vidjet će se samo crni ekran nakon pokretanja zapakirane igre. Da bi se postavio pravilni početni level potrebno je otići na Uredi (engl. Edit) pa na Postavke Projekta (engl. Project Settings) i na kraju Karte i Načini (engl. Maps and Modes). Određeni koraci se učine za vrijeme pakiranja projekta. Prvo će se sastaviti (engl. compiled) izvorni kod projekta. Nakon što se izvorni kod sastavi sav potreban sadržaj igre će biti pretvoren ili iskuhan (engl. cooked) u format koji može željena platforma pokretati. Na kraju će se stvoriti instaler (engl. installer) koji je zapravo mješavina sastavljenog koda i iskuhanog sadržaja. Opcija za pakiranje projekta nalazi se na padajućem izborniku (engl. dropdown menu) kojem se može pristupiti klikom na gumb Datoteka (engl. file). 41

44 13. ZAKLJUČAK Izrada igara u Unreal Engine-u je dugotrajan i mukotrpan proces koji zahtijeva određene vještine koje se mogu postići samo dugotrajnm radom u industriji izrada igara. Ovim radom je prikazano kako je moguće izraditi 3D igru u Unreal Engine-u zajedno s C++ kodom i Nacrtima (engl Blueprints). U radu je prikazan cijeli proces i postupak potreban da jedna osoba izradi u nekom optimalnom vremenu 3D igru u Unreal Engine-u pomoću raznovrsnih materijala i alata. Cilj rada je ispunjen, to jest prikazan je proces instalacije Unreal Engine-a i cjeloukupni proces izrade 3D igre te kako ju može izraditi samo jedna osoba bez pretjerane požrtvovnosti. 42

45 14. LITERATURA [1] Unreal Engine [2] Visual Studio [3] Nacrti- [4] Mixamo- 43