Základy 3D enginu Unity - projekt Roll a Ball

Roll a Ball – úvod a prvý skript

1. Vytvoríme nový projekt: Buď na štartovacej obrazovke alebo v menu File – New Project. Vyberieme umiestnenie a názov projektu podľa vlastného výberu.

2. Vyberieme 3D projekt a zatlačíme Create project.

3. Uložíme scénu: File – Save scene. Defaultne by nám malo ponúknuť uloženie v priečinku Assets. Pre lepšiu organizáciu projektu vytvoríme v priečinku Assets priečinok _Scenes. Scénu pomenujeme napríklad MiniGame. Scénu môžeme chápať aj ako jeden level / prostredie hry.

4. Vytvoríme hernú plochu. V menu klikneme na GameObject – 3D Object – Plane. Vidíme, že do hierarchie projektu sa nám pridal objekt Plane. Klikom tento objekt vyberieme a vpravo vidíme jeho vlastnosti.

5. Premenujeme objekt Plane na Ground kliknutím na jeho názov v hierarchii projektu. Alebo pravým klikom na jeho názov a vybraním Rename.

6. Resetujeme súradnice objektu Ground, a to kliknutím na ozubené koliesko vo vlastnostiach (Inspector) objektu v časti Transform – pravá strana obrazovky. Po kliknutí na ozubené koliesko vyberieme Reset.

7. Stlačením klávesy F nastavíme pohľad editora na vybraný objekt (teda na ten, ktorý máme vyznačený v hierarchii projektu). Toto je užitočné, ak nám po resetovaní súradníc utiekol.

8. Ideme nastaviť veľkosť hernej plochy (Ground). V Inspectore projektu nastavíme Scale pri súradniciach X a Z na 2. Súradnicu Y necháme na 1.

9. Vytvoríme objekt, s ktorým budeme hrať – guličku. V menu vyberieme GameObject – 3D Object – Sphere. Premenujeme tento objekt na Player a resetujeme jej súradnice (okno Inspector – časť Transform – ozubené koliesko - Reset). Môžeme stlačiť klávesu F, aby sa editor zameral na našu guličku.

10. Y súradnicu guličky (okno Inspector – Transform - Position) nastavíme na 0.5.

11. Keďže chceme farebne odlíšiť guličku a hraciu plochu, vytvoríme nový materiál. Vytvoríme priečinok Materials v štruktúre projektu, kde máme zatiaľ len priečinok _Scenes.

12. Klikneme pravým tlačitkom na priečinok Materials a vyberieme Create – Material. Tento materiál nazveme Background.

13. Vyberiem tento materiál a vpravo v Inspector vyberieme farbu v časti Albedo. Vyberieme modrú, napríklad R=0, G=32, B=64.

14. Materiál aplikujeme na hernú plochu (Ground) potiahnutím materiálu na túto plochu alebo jej názov v hierarchii projektu.

15. Teraz chceme lepšie nastaviť osvetlenie našej hry. V hierarchii projektu klikneme na Directional light. V Inspectore v komponente Transform zmeníme rotáciu Y na 60.

16. Našej guličke potrebujeme nastaviť, aby sa správala podľa fyzikálnych zákonov. V hierarchii projektu vyberieme guličku (objekt Player). Vpravo v Inspectore klikneme dole na Add Component – Physics – Rigidbody.

17. Guličky chceme rozpohybovať pomocou skriptu. Vytvoríme priečinok Scripts v štruktúre projektu, kde máme priečinky _Scenes a Materials.

18. V hierarchii projektu vyberieme guličku (objekt Player). Vpravo v Inspectore klikneme dole na Add Component – New Script. Nový skript nazveme PlayerController. Skontrolujeme, či je vytváraný skript typu C Sharp. Stlačíme Create and Add. Novovytvorený skript vidíme v štruktúre projektu. Presunieme ho do priečinka Scripts.

19. Klikneme na skript v adresárovej štruktúre projektu a následne v Inspectore vyberieme Open. Skript sa otvorí v nami preferovanom editore.

20. Z predpripraveného kódu vymažeme časti void Start () a void Update () – aj s prislúchajúcimi krútenými zátvorkami. Tento kód nebudeme potrebovať.

21. Do triedy PlayerController pridáme nasledovný kód (http://pastebin.com/thuRKEUb):


private Rigidbody rb;
// Use this for initialization
void Start () {
rb = GetComponent();
}
// Update is called once per frame
void FixedUpdate () {
float moveHorizontal = Input.GetAxis ("Horizontal");
float moveVertical = Input.GetAxis ("Vertical");
Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);
rb.AddForce (movement);
}

Vysvetlime si tento kód:
Prvým krok je vytvorenie premennej typu Rigidbody. Už bolo spomínané, že komponent Rigidbody zabezpečuje, aby sa náš herný objekt (gulička) správal podľa fyzikálnych zákonov.

Funkcia Start sa spustí vždy len raz, a to pri inicializácii vytvorenej aplikácie. Tu pomocou lambda výrazu (nezaručujeme, že ide o správnu terminológiu) premennej rb, ktorá je typu Rigidbody, priradíme komponent Rigidbody, ktorý má naša gulička. Určite bude vybraný komponent Rigidbody, ktorý má gulička a nie Rigidbody iného objektu, nakoľko aj skript je priradený k tomu istému objektu ako komponent Rigidbody.

Funkcia FixedUpdate sa spustí počas každého framu behu aplikácie. Keďže využívame prácu s fyzikou, použijeme FixedUpdate. Keby sme s fyzikou nepracovali, tak použijeme Update.

Vytvoríme premennú moveHorizontal (typu float), ktorá bude niesť informáciu o stlačení smerových kláves, v tomto prípade horizontálny smer (doľava-doprava). „Horizontal“ je štandardný vstup, ktorý sníma vstup zo šípok, WSAD alebo aj gamepadu počítača. (Ak chceme toto prenastaviť, je to možné v prostredí Unity.) Obdobne funguje vertikálny smer.

Vector3 je typ premennej, ktorý predstavuje 3 hodnoty súradnicovej sústavy (X,Y,Z).

Pomocou funkcie AddForce rozpohybujeme komponent Rigidbody našej guličky (a tým aj ju samotnú). Parametrom funkcie AddForce je vektor, ktorý obsahuje vstup z klávesnice.

22. Skript uložíme a vrátime sa do editora Unity. V hornej časti stlačíme grafické tlačidlo Play. Týmto sa spustí naša hra. Šípkami na klávesnici vieme pohybovať guličkou. Hru vypneme grafickým tlačidlom Stop.

23. Vidíme, že gulička sa pohybuje pomerne pomaly. Chceme ju zrýchliť. Na začiatok skriptu (pred alebo po „private Rigidbody rb;“) pridáme novú verejnú (public) premennú:
public float speed;

24. Výhodou použitia public premennej je to, že jej hodnotu vieme nastavovať priamo v Unity editore v okne Inspector daného objektu.

25. Posledný príkaz v skripte zmeníme na: rb.AddForce (movement * speed);

26. V Inspectore objektu Player (gulička) nastavíme Speed na 10. Opäť vyskúšame správanie guličky v hernom móde.

Please login to get access to the quiz
(Ďalšia lekcia) Roll a Ball – nastavenie kamery
Späť na Základy 3D enginu Unity – projekt Roll a Ball

No Comments

Comments are closed.

Lektor
Kolektív pracovníkov ÚAMT
Rola : Skupina lektorov
  • Website : http://uamt.fei.stuba.sk
  • Prax : Viacročné skúsenosti
  • Špecialista na oblasť : Viaceré oblasti mechatroniky
Čitať ďalej