Unity 3D tutorial – karakter mozgása és animációk

Ebben a részben létrehozzuk a scriptet a karakter mozgásához, majd az egyhelyben állás és a sétálás animációkat is hozzá adjuk.

A kurzor elérése

A mozgás, mint ahogy azt az elején leírtam, úgy fog történni, hogy a karakter folyamatosan sétálni fog a kurzorunk felé.

Ehhez egyszerűvé kell tennünk a kurzor objektumunk elérését. Ezt egy Taggel tudjuk a legkönnyebben elérni:

  1. Válasszuk ki a hiearchiából a Cursor objektumot
  2. Az Inspector tetején a Tag melletti legördülő menüben kattintsunk az Add Tag… lehetőségre
  3. A Tags listában kattintsunk a kis plusz ikonra
  4. Adjuk hozzá a “Cursor” taget
  5. Majd újból a Cursor objektumot kiválasztva a Tag legördülő menüben válasszuk ki a Cursor taget

Animációk

Ahhoz, hogy jól nézzen ki a karakter mozgása és ne legyen lebegés effektusa a mozgásnak, be kell konfigurálni az Idle és a Walk animációk váltakozását.

Először is, az Assets/Character_Cactus/animation mappában a Cactus@Idle és a Cactus@Walk animációkat kiválasztva az Inspectorban az Animations fülön jelöljük be a Loop time-ot.

Majd hozzunk létre egy Animations mappát az Assets mappában és helyezzük át az előbbi két animációt.

Ezután létre kell hoznunk egy Animator Controllert, amelyben be tudjuk állítani az egyik animációból az átmenetet a másikba. Ehhez jobb klikk a mappában -> Create -> Animator Controller, nevezzük el CactusAC-nek.

Ezután nyissuk meg és húzzuk be az Idle és a Walk animációkat (lásd a képen).

Az Idle behúzásakor egyből kapott is az Entryből egy átmenetet, illetve narancssárga lett, amely jelzi, hogy ez az alapértelmezett állapot.

Jobb klikk az Idle állapotra és Make transition, ezután kattintsunk a Walk állapotra. Így létrehoztunk egy átmenetet az állóhelyzetből a sétálóba. Ugyanezt csináljuk meg visszafelé is.

Ezek után a tranzíciókra kattintva vegyük ki a jelölést a Has exit time checkboxból. Mivel azt szeretnénk, hogy egyből megálljon az animáció is, ha a karakter megállt, egyébként áttűnne a két animáció és nem nézne ki jól.

De honnan tudja a kontroller, hogy épp át kell, hogy menjen az Idle-ből a Walkba? Erre szolgálnak a paraméterek. A Hiearchy panel melletti panelban válasszuk ki a Parameters fület, majd a kis plusz ikonra kattintva hozzunk létre IsWalking néven egy Bool paramétert.

Az Idle -> Walk tranzíciónál a Conditions alatt válasszuk ki az IsWalking paramétert és true állapot hatására menjen végbe az átmenet.

A Walk -> Idle tranzíciónál pedig ugyanez false állapot hatására történjen meg.

Már csak annyit kell tennünk, hogy a hiearchiából a kaktuszunkat kiválasztva, annak Animator komponensének Controllerének válasszuk ki a CactusAC-t. Így a kontrollerrel már nem lesz dolgunk, már csak az IsWalking paramétert kell majd kódban manipulálni.

Script a mozgáshoz

A karakterünk mozgásának való scriptelése egyszerű feladat, mivel igénybe vehetünk néhány beépített mozgás függvényt.

Először is hozzunk létre egy új C# scriptet a Scripts mappában, nevezzük el FollowCursornak. Adjuk hozzá a Cactus karakterhez komponensként, majd nyissuk meg szerkesztésre.

Másoljuk be az alábbi kódot:

using UnityEngine;

public class FollowCursor : MonoBehaviour {

private Transform _cursorTransform;
private Animator _animator;

public float speed = 100f;

   void Awake ()
   {
      _cursorTransform = GameObject.FindGameObjectWithTag("Cursor").transform;
      _animator = GetComponent<Animator>();
   }

   void Update ()
   {
      float step = speed * Time.deltaTime;
      transform.position = Vector3.MoveTowards(transform.position, _cursorTransform.position, step);
      transform.rotation = Quaternion.FromToRotation(Vector3.forward, _cursorTransform.position);

      bool isWalking = transform.position != _cursorTransform.position;
      _animator.SetBool("IsWalking", isWalking);
   }
}

Szükségünk van a kurzorunk pozíciójára, ezért kell a Transform, illetve a GameObjecten levő Animator komponensre, hogy a paraméterét tudjuk módosítani.

Létrehoztunk egy publikus adattagot is, a speed-et, amellyel a karakterünk sebességét tudjuk állítani. Az, hogy publikus abból a szempontból érdekes, mert így a Unity Inspectorában tudjuk ezt állítani, nem kell kódban.

A step változót az előző képkocka megjelenítése óta eltelt idő és a sebesség alapján állítjuk be, így egyenletes sebességgel fog kaktuszunk mozogni.

A Vector3.MoveTowards() függvény segítségével a jelenlegi pozícióból a kurzor pozíciója felé, maximum step lépésnyit megy előre. Ez egy nagyon hasznos beépített Unity függvény, egyszerűvé teszi az életünket.

A Quaternion.FromToRotation() egy másik hasonlóan hasznos függvény, ahol az adott nézetből egy pont felé adja vissza a forgást. Így nem kell törődnünk sem a normlaizálással, sem mással a pontos számítás érdekében.

Az isWalking fogja megmondani, hogy épp mozgásban van-e karakterünk vagy sem. Ezt úgy tudjuk meghatározni, hogy a kaktusz jelenlegi pozíciója a kurzor jelenlegi pozíciójával megegyezik-e, ha nem, akkor épp mozgásban van.

Ennek a változónak az értékét adjuk át az Animator IsWalking paraméterének, hogy az animáció átmenetek működjenek.

Build és futtatás

Ahhoz, hogy futtatni tudjuk a Unity lejátszóján kívül is, le kell buildelni a projektet. Ehhez kattintsunk a File -> Build Settings… menüpontra. Itt kattintsunk a jobb szélén az Add Open Scene gombra, hogy hozzáadjuk a buildhez a megnyitott Scene-t.

Ezután kattintsunk a Build gombra, hozzunk létre egy App mappát az Assets mappán kívül! Nagyon fontos, hogy kívül, mivel másképp nem fog lefutni a build. Nevezzük el az .exe fájlt.

Amikor elkészült megnyílik a File Explorerben a lebuildelt állomány. Indítsuk el, vállasszuk ki a megfelelő grafikai beállításokat és már játszhatunk is.

A játék mostani verziójával csak annyi a probléma, hogy nincs benne menü, ahol kiléphetnénk, ezért csak a jól bevált Alt + F4 kombinációval tudjuk ezt megtenni. Ahhoz, hogy legyen ilyen menünk még programozni kellene egy kicsit.

Végszó

Relatív kevés munkával és néhány alapfogalom megismerésével egy egész “bonyolult” játékot hoztunk létre. Ebben látszik a játékmotorok igazi ereje, ezek nélkül már csak ez a néhány dolog is rengeteg munkába került volna. Természetesen az is nagyon sokat segített, hogy nem nekem kellett lemodellezni a karaktert, mert az szintén belekerült volna egy kis munkába.

Remélem, hogy sikerült elsajátítanod az alapokat és amennyiben bármi kérdésed van, nyugodtan tedd fel itt!

A sorozat részei:

  1. Alapok
  2. A legfontosabb koncepciók
  3. A pálya létrehozása és a kurzor mozgatása
  4. Karakter mozgása és animációk

A projekt a leírás sorrendjében végrehajtva megtalálható Githubon a projekt Dev branchén.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Create a free website or blog at WordPress.com.

Up ↑

Create your website with WordPress.com
Get started
%d bloggers like this: