2014. május 8., csütörtök

MOBA SK Projekt - Előkészületek

Mint a bevezetőben említettem, nem fogok mindent lépésenként részletezni, ha esetleg káoszt érzel az itt leírtak kapcsán, nézz utána! Bár sokan úgy gondolják, hogy a félangol-félmagyar mondatok idegesítőek, itt bizony csak ilyeneket fogsz találni. Ennek nem szókincsbeli hiányosságom az oka, egyszerűen csak bizonyos szakszavakat érdemes megtanulni, hogy tudj keresni rá, ha netán valahol elakadsz.
Egy lehetőség: http://unity3d.com/learn/tutorials/modules

Terrain előkészítése:
Nem kell túl gondolni a dolgot. Egyenlőre bőven elegendő ha van egy terrain-ünk, egy-két directional light-unk és egy Main Cameránk a scenen. Később majd kell valamennyit alakítani rajta, de egyenlőre még textura sem szükséges hozzá.

Character prefab létrehozása:
Nem szeretem kockákkal (értsd mindenféle grafika nélkül, egy kockát tologatva) kezdeni a fejlesztést. Korábban kihagytam a karakter kinézetét és az animációt, aztán előfordult, hogy újra kellett gondolnom pár dolgot mikor be akartam rakni őket. Úgyhogy már az elején érdemes szerintem egy humanoid charactert lérehozni (vagy amilyet akarsz).

Én alapvetően Mecanim animáció rendszert használok, Root Motionnal, a karakterre pedig rigidbody-t és capsule collidert teszek. Vannak akik a Character controllert jobban szeretik. Ezen lehet vitatkozni, de egyrészt kényelmesebb az első megoldás, másrészt a unity csapata és közössége is erre felé hajlik inkább.
A mecanim rendszer nagy előnye hogy átirányítható (retargetable) animáció rendszert lehet vele létrehozni. Az átirányíthatóság azt jelenti, hogy egyik modellen lévő animációt könnyedén alkalmazhatod egy másik modellen.

Retargetable Character
A Sample Assets Beta csomagban találtam egy ötletes megoldást erre (nekem újdonság volt, bár lehet csak bamba voltam :D): egy Empty GameObject-ből készítünk prefabot. Erre rakunk egy Animator komponenst, ide helyezzük a Animator Controllerünket. Magát a tényleges karakter modelt ebbe az Empty-be fogjuk berakni gyermek objektumként. A megoldás szépsége, hogy a modelt akár futás közben is létrehozhatjuk, vagy váltogathatjuk. Ehhez persze kell, hogy amikor új model kerül a Character prefab-ba, megadjuk neki az aktuális avatárt amire az animátornak hatnia kell. Mivel egyenlőre nem akarjuk dinamikusan váltogatni, elég a scene indításakor megtenni:

void Start () 
{
   anim = GetComponent();
   foreach (Animator childAnimator in GetComponentsInChildren()) 
   {
      if (childAnimator != anim) 
      {
          anim.avatar = childAnimator.avatar;
          Destroy (childAnimator);
          break;
      }
   }
}
A fenti script végignézi az összes olyan gyermek objektumát a karakernek, amin van Animator komponens. Fontos észben tartani, hogy a GetComponentsInChildren 0. eleme maga a karakter objektumunk lesz (hiszen annak is van Animator komponense).
Amikor megtaláltuk, beállítjuk az Avatárt, majd töröljük a gyermekről az Animatort, hiszen innentől kezdve nincs szükségünk rá.

A következő lépés, hogy össze kell raknunk, egy nagyon egyszerű animator controllert. Én egészen konkrétan két teljes animációt raktam bele, mind a kettő a Sample Asset Beta-ból van. A flowchartom így néz ki:
Nagyon egyszerű animation flowchart
Egyetlen paramétert határoztam meg speed néven. Ami fontos lehet (főleg később), hogy a Transaction ablakban az Atomic ne legyen bepipálva! Ez annyit mutat, hogy az animáció megszakítható-e bármikor. Ha be van pipálva, akkor csak bizonyos pontokon szakítja meg.

Miután ez megvan, húzzuk be a character objektumunk megfelelő helyére. És készen is vagyunk az előkészületekkel.
Teszteléshez indítsuk el a scene-t, és ha a karakter lejátsza az idle animációt, akkor jól csináltuk az előkészületeket!


0 megjegyzés:

Megjegyzés küldése