Dungeon: díl 3 – brána

Dobrý den, v tomto díle vytvoříme bránu, pro jejíž otevření bude hráč muset najít páku, vyřešit hádanku, nebo najít klíč.

Pro tento tutoriál jsem vytvořil jednoduché modely v blederu, můžete si je stáhnout zde. Celou složku models nakopírujeme do složky assets.

Začneme animací brány, prefab si přetáhneme na požadované místo ve scéně a otevřeme si Window/Animation (né Animator)
p001
Vytvoříme nový Animation Clip, pojmenujeme ho open a uložíme.
p002
Všimněme si hierarchie modelu. Máme zde frame, to jsou jakoby zárubně a pak pivot, to je jakoby pant podle kterého se brána otáčí (jinak by se otáčela podle středu, což nechceme). V okně Animation klikneme na Add Property a vybereme pivot->Transform->Rotation.
p003
Na časové ose se nám objeví klíčové body. Jelikož naše animace bude statická, budeme potřebovat jen první sloupeček, druhý smažeme.

p004

nyní rozklikneme pivot: Rotation a nastavíme rotaci v ose Y tak aby dveře byly otevřené.

p005
Vytvoříme ještě jednu animaci, pojmenujeme ji closed, a hodnotu Y nastavíme tak aby dveře byly zavřené.
p006
Tím máme animace hotové, možná si říkáte že to přeci žádné animace nejsou, nic se tam nehýbe. Máte pravdu, ale my je budeme mezi sebou prolínat takže brána animovaná bude. Otevřeme si Window/Animator, kde najdeme obě naše animace. Klikneme pravým tlačítkem na animaci open, vybereme Make Transition a klikneme na closed, poté uděláme to samé ještě opačně.
p007
Nyní vytvoříme proměnnou typu bool která bude určovat zda jsou dveře zavřené nebo otevřené. Kliknene na záložku parameter, přidáme proměnnou typu bool a pojmenujeme IsOpen.
p008
Nyní klikneme na šipku směřujicí z open do closed a inspektoru nastavíme prolínání. Poté nastavíme kdy se má prolínání spouštět. V Conditions klikneme na +, vybereme proměnnou IsOpen a vybereme false. Tím se nám animace spustí pokaždé když je hodnota IsOpen false
p009
to samé uděláme i s opačnou šipkou, jen v Conditions u hodnoty IsOpen vybereme true. Nakonec ješte klikneme pravým na close a vybereme Set as Layer Default State aby dveře byly zpočátku zavřené.

Nyní přichází na řadu náš první script. Upozorňuji, že zde nebudu vysvětlovat základy jazyka C#. Můžeme si vytvořit buď složku na scripty, nebo ho dát do složky s modelem, já se rozhodl pro druhou variantu. vytvoříme si script a pojmenujeme ho GateController
p010
Otevřeme si ho ve Visual Studiu (pokud máte superpočítač z nasa 🙂 ), nebo v monodevelopu, nastavit se to dá v Edit->Preferences->External Tools. Základní script má v sobě 2 třídy, Start a Uprade. Metoda Start je zavolána při vytvoření objektu, Update se volá při každém snímku (při 60fps 60x za sekundu). My chceme aby se stále kontrolovalo zda se má brána otevřít/zavřít, proto napíšeme kód do metody Update. Začneme něčím snadným, abychom otestovali zda se brána může vůbec otevřít a zavřít, nabindujeme si otevírání brány na klávesy G a H. Okomentovaný kód snad mluví sám za sebe:

using UnityEngine;
using System.Collections;

public class GateController : MonoBehaviour {

Animator anim; //proměnná ukazující na komponent animátor na naší bráně
void Start () {
anim = gameObject.GetComponent<Animator> (); //načtení animátoru do proměnné

}

// Update is called once per frame
void Update () {
if (Input.GetKeyDown (KeyCode.G)) { //pokud bylo stisknuto G...
anim.SetBool ("IsOpen", true); //...nastav hodnotu IsOpen na true
}
if (Input.GetKeyDown (KeyCode.H)) { //pokud bylo stisknuto H...
anim.SetBool ("IsOpen", false); //...nastav hodnotu IsOpen na false
}
}
}

Nyní stačí script vzít a přetáhnout ho na bránu. Můžeme otestovat ve hře, po stisknutí G by se brána měla otevřít a po stisku H zavřít.
p011p012
To je pro dnešek všechno, příště naanimujeme páku a propojíme jí s bránou.

One thought on “Dungeon: díl 3 – brána

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *