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!


MOBA Starter Kit Project - Bevezető

Népszerű MOBA-k
MOBA: Multiplayer Online Battle Arena, 2002 környékén Warcraft III pályaszerkesztőjével készült az első ilyen játék. Eul nevű modder nevéhez fűződik. Később komoly figyelmet kapott a játék. A történetéről egyenlőre elég ennyi, ha valakit érdekel, utána olvashat a wikipédián: http://en.wikipedia.org/wiki/Multiplayer_online_battle_arena

Játékmenet: a legáltalánosabb változatában két 5 fős csapat küzd egymás ellen a képen látható felosztású pályán. A sárga színnel jelölt részek a un. "lane"-k, a köztük lévő zöld terület a "jungle". A kék pontok tornyokat jelölnek.
A játékosok egy-egy hőst (champion) irányítanak. A játék kezdetétől fogva nem-játékos karakterek (minionok) indulnak útra a csapat bázisából (naracssárga negyed körök), ezeket wave-knek nevezik.
A játék célja az ellenfél bázisának lerombolása. A hősök játék közben szinteket és aranyat szereznek, az utóbbiból felszerelést vásárolhatnak.

Az utóbbi pár évben elég sokat játszottam League of Legends-el, hogy elkezdjen érdekelni programozási szinten is. Különböző kihívások merülhetnek fel egy ilyen játék alapjainak létrehozásakor. Bár sikerének vagy sikertelenségének a titka inkább a játék-egyensúly, tanulási nehézség megtalálásában rejlik, és persze abban, hogy mennyire kreatív hősöket tudnak kitalálni hozzá, remek gyakorlási lehetőség programozás terén is úgy gondolom.

Ez a sorozat egyfajta tutorial jellegű is lesz, de inkább csak megoldás technika szintjén. Úgy gondolom, hogy aki már tud programozni unalmas tartja ha az alapoktól kezdem, aki meg nem tud az meg nem hiszem, hogy pont tőlem fog megtanulni. :) Inkább azokra a részekre térek ki, ami engem is érdekelne:

  • Camera : alapvetően nem túl összetett feladat, de elég sokat szoktam kutatni mindig megfelelő kameráért, ezért veszem előre.
  • Champions : a játékos által irányított hősök területét több részre bontom:
    • Statok: a Pioneer közben megismert módszert fogom alkalmazni, ami egy rugalmas tulajdonság rendszert biztosít majd. Ez fontos szempont, mert nem egy konkrét játékban gondolkozom, hanem egy kezdő csomagban.
    • Skillek: szintén a Pioneer tapasztalatokat fogom használni, a különböző célpont kijelölési megoldásoknál. Maguk a skillek típus skillek lesznek, ne lepődjön meg senki, ha nem váltom meg a világot egyediségükkel. :P
    • Items: ebbe a kategóriába sorolom az vásárolható tárgyakat. Érdekes lehet, hogy nagyon hasonlóan fognak működni, mint a buff típusú skillek. ;)
    • Model, animáció, hangok: színesítő elemek, a kronkrét projekt nem követelné meg, de szeretem ha nem csak jó, hanem szép is amit csinálok. :) Mindenesetre alacsony a priorítása.
  • Mobs: Nem tökéletes megfogalmazás, de a minionokat (csapathoz tartozó lények, amik a lane-en mozognak) és a monstereket (jungle-ben lévő lények) értem alattuk.
    • AI : egyértelmű. ez lesz a legfontosabb ebben a témakörben, és mivel eddig ezzel nem nagyon foglalkoztam, számomra a legizgalmasabb is a projektben. :)
  • Game : Alapvető játékirányítási funkciókat foglal magába. wave-k kiküldése, csapatok kezelése, ölési/halási statisztikák követése, nyerés.
  • Network : Bár egy rendes moba megkövetelné a dedikált szervert, de ebben a projektben ezzel mégsem fogok foglalkozni. Alapvetően client to client megoldást fogok alkalmazni, ahol a master client fogja elvégezni azt, ami a dedikált szerver feladata lenne. Ugyanakkor két különböző, megoldásilag mégis nagyon hasonló verziót fogok csinálni: egyet a unity alap hálózat kezelőjével, egyet pedig a Photon Cloud szolgáltatással.
  • GUI : erről sokat nem mondanék. Grafikus felhasználói felület. Ennyi. Viszont esélyes, hogy nyár környékén fogok ezzel érdemben foglalkozni, amikor kijön a Unity 5-ös verziója az új GUI rendszerrel (Yey!) 
  • Developer Panel: mint említettem a projekt alapvetően egy starter kit létrehozásáról szól. Ennek eredményeként szükség van olyan funkciókra is, amelyeket a unity editorjában lehet használni. Ez egyenlőre elég képlékeny, időközben fog még formálódni:
    • Championok adatbázis
    • Tárgy adatbázis
    • Minion/Monster/Turret beállítások
Nagyjából tehát ezeket tervezem átfogni a sorozatban. Szerintem nem hagytam ki semmit, ha mégis, akkor ér beírni a kommentek közé. :)


2014. május 6., kedd

Artcraft—The Spires of Arak készítése


Nem kifejezetten Unity, de elég erőteljesen játék készítés, hiszen nem más mint Chris Robinson a WoW (World of Warcraft) senior art director-a (bocs a félangol mondatért :P) betekintést enged a kulisszák mögé. A videó és a cikk is érdekes és hasznos információval szolgál.
Én kifejezetten szeretem nézni az alkotói munkát, mert sokszor ad új ötleteket. A videó elég jól bemutatja egy terület elkészítésének munkafolyamatát egy ilyen szintű játék esetében.

A teljes cikket itt találjátok: http://us.battle.net/wow/en/blog/13987918



2014. május 3., szombat

Pioneer Project #1 - Skill rendszer

Végre vállalható állapotba került a Pioneer Project skill rendszere. A konkrét képességek még nincsenek kialakítva, de a rendszer már kezeli a fő típusokat. A számolási rész teljes egészében a szerver oldalon fut, a kliens a megjelenítésért felel, illetve egyenlőre a célpont kiválasztásért. Ez utóbbit majd nagy eséllyel át kell költöztetnem a szerverre, de egyenlőre nem akartam szerver oldali fizikát létrehozni, így a "hacker-barát" megoldást választottam.
Íme egy rövid kis videó arról, hogyan is néz ki. Sajnos nem sikerült két klienssel felvennem, mert valamitől haldoklik a gépem, a 10 fps-es videón meg nem sok látszódott volna. Így kénytelenek lesztek elhinni, hogy ezek működnek multiplayer módban is és még sebzik is a másik játékost. :)


A kliens oldalon ötféle célpont választás (targetelés) van lekezelve:
  • Self - a skill a használójára hat
  • Crosshair - a skill arra hat, akit a célkereszttel becéloztunk, ha a célpont nem érvényes, akkor a képesség self-nek minősül. (a videóban a fehér áldás-szerű effect ilyen)
  • Melee - Már a projekt elejétől ragaszkodtam ahhoz a megoldáshoz, miszerint a közelharci fegyver pengéjének (sebzőfelületének) el kelljen érnie a célpontot sérüléshez. Ehhez a unity Raycast-ját használom, mely a fegyver markolatától indul, és a hegyéig tart. Találat akkor jön létre amikor ebbe a vonalba bekerül egy ellenséges collider.
  • Projectile - Távolsági támadásokhoz (íjászat, tűzlabda a videóban) egy lövedék jön létre, aminek el kell találnia a célpontot.
  • AOE - területre hat. Itt aránylag könnyű dolgom volt, mert hasonlít a lövedékhez, csak nem mozog. Viszont amit meg kellett oldani az a terület kijelölése. Ehhez egy külső assetet használtam. Röviden egy projektort mozgat oda ahova az egér mutat. Ha eszembe jut honnan töltöttem le, berakom az asset ajánlóba.
Még egy típusra lesz majd szükségem: az Aurára. Ezt olyan skillek fogják használni, melyek létrejötte után változó mennyiségű célpontra vannak hatással. Egyik példa erre a tűzfal, ami létrejötte után azokra sebez bizonyos időnként, akik a hatótávolságán belül vannak. Másik példa, amiről végül el neveztem, a karakter körül lévő valamilyen méretű aura, mely különféle módon hathat a benne lévőkre. 

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

Asset Ajánló: Elementals (Free)

Tegnap töltötték fel ezt a 53 particle-t tartalmazó asset csomagot. Nagyon megörültem neki, mert elég sok, számomra is hasznos dolgot találtam benne (tűzlabda, tűzfal, meteoreső...stb).
Örömmel fedeztem fel, hogy ezek egyszerű Shuriken Particle-kkel (Unity alap rendszerével) vannak megoldva, semmi extra scriptet nem tartalmaz.
Az 53 effekt felét tűz alapú hatások teszik ki, de vannak más elemekkel kapcsolatos is néhány (föld, levegő, villám, jég, sötétség, fény, víz). 

2014. április 25., péntek

Pioneer Project - Bevezető


Miért kezd valaki bele egy MMORPG készítésébe?
Régóta ott motoszkált a fejemben. 2013-ban nagy csalódást okozott a Neverwinter Online (vagy én vártam túl sokat tőle?) , melyet úgy hirdettek, hogy méltó utódja a klasszikus Neverwinter Nights-nak (ami egyébként az első mmo élményem volt réges rég). Hát nem lett méltó utód... maradjunk ennyiben. :) De végülis innen jött az ötlet, hogy ha a modern mmo-k nem tudnak olyat felmutatni, ami nekem tetszik, akkor "kénytelen" vagyok magam megcsinálni.
2013-ban belevágtunk egy projektbe (Worldshaper), ami aztán rövid úton be is halálozott. Rossz kezdés, de legalább tanulságos volt. 2014 februárjában aztán kezdetét vette a Pioneer Project.



Miről is van szó?
Pioneer Project egy újfajta megközelítést próbál megvalósítani az mmorpg témakörben. A hagyományos rpg (nem mmo!) elemeket igyekszik vegyíteni a modern harcorientált játékok (főként a mobák) rendszerével. Választási lehetőséget felajánló küldetések, csapdák, rejtvények lesznek kombinálva az alapvetően "skillshot" alapú harcrendszerrel.
A karakterek ereje a kevésbé fog függni a felszerelésétől mint a jelenleg divatos mmo-kban, és jobban a játékos ügyességétől, mind pvp, mind pedig pve terén.

Mielőtt még valaki megemlíteni, hogy egy mmo fejlesztése milyen kemény feladat, jelzem: tudom. :) Csomó blogon jártam, és az esetek 90%-ában a tanács a "hogyan csináljak mmo-t"-ra az, hogy "ne csinálj!". Másrészt már negyedik hónapja foglalkozok vele, sorra jönnek elő olyan dolgok, amikre korábban nem számítottam. Viszont én élvezem ezeket a kihívásokat, és azt hogy jobban beleláthatok az mmo-k működésébe.

In Game GUI és HUD
Hogy áll most a projekt?
Unity3d és a Photon Server segítségével összeraktam egy szerver oldali alkalmazást, ami biztosítja az alapvető működést, kicsit tovább tartott, mert szeretem a rugalmas rendszereket, amik esetleg később más játékokhoz is hozzáigazíthatóak a legkevesebb változtatással, nos ez ilyen lett.
Kész van a karakter statisztika, az inventory rendszer és a skill rendszerből is csak néhány dolog van hátra.
Ezen a héten létrehoztam és implementáltam UMA (Unity Multipurpose Avatar) segítségével a karakterek kinézetének testreszabási lehetőségét (még a csúszkákat kell valami normális intervallumba szorítani).

Egyfős csapatom időközben kettőre bővült párom lévén (Skyie néven szerepel itt a blogon), aki összerakta a GUI dizájnját, valamint elkezdett ismerkedni a particle készítés és scene rendezés világával. Röviden az ő munkáját dicséri az amit látni fogtok, az enyémet az amit nem.  :)

További GUI tervek, jelenleg még csak photoshopban, illetve a háttérben a leendő karakter választó scene.
Itt jegyezném meg, hogy örömmel fogadunk mást is a köreinkbe, de le kell szögezni, hogy a projekt alapvetően hobbi alapú (ami azt jelenti: dolgozz mint a güzü, de nem kapsz érte pénzt :P).

Ahogy haladunk előre a projektben, újabb információkat fogunk majd közzétenni, addig is várjuk az esetleges kérdéseket, illetve a felajánlásokat az ingyen munkára :D

2014. április 24., csütörtök

Tutorial: Multiplayer FPS



A BurgZerg-es tutorialhoz hasonlóan a GTGD (Gamer To Game Developer) videóit is nagyon hasznosnak találtam. Amíg a Hack&Slash RPG főként az egyszemélyes játékok készítését tanítja, addig a GTGD a többszemélyes, LAN-on játszhatóakhoz szükséges tudást adja át.
Persze vannak átfedések a kettő között, de érdemes végig nézni a teljes sorozatot.

Sajnos a második nekifutásra csak két videót sikerült alkotnia a szerzőnek, de még így is 36 videónyi anyag áll rendelkezésünkre.