Implementujte animáciu chôdze pre 4-smernú sprite postavu
Prostredie overovania
- Windows
-
- Windows 11
- Editor jednoty
-
- 2020.3.25f1
- Vstupné systémové balíky
-
- 1.2.0
Predpoklady pre tento tip
Nasledujúce nastavenia sú vopred nakonfigurované ako predpoklad na vysvetlenie týchto tipov.
Referenčné miesto
Príprava vychádzkovej grafiky
Po prvé, animácia chôdze sa dosahuje neustálym prepínaním medzi viacerými obrázkami, aby to vyzeralo, že kráčate. Preto je potrebné pripraviť toľko obrázkov, koľko je potrebné na zobrazenie smeru pohybu a chôdze.
Aby sa dosiahla čo najjednoduchšia animácia chôdze, je bežné pripraviť nasledujúci obrázok. Tento vzor sa používa aj v mnohých RPG.
Po prvé, je rozdelený do štyroch čiar nad a pod, ale ukazuje smer, ktorému budete čeliť pri chôdzi. Zhora je to "dole, vľavo, vpravo, hore".
A pre ľavicu a pravicu to bude chôdza týmto smerom. Všeobecný tok je "stredný, ľavý, stredný, pravý, stredný...".
Veľkosť jednej bunky tentokrát pripravenej postavy je 32x32px. Pretože je pripravený pre štvorce 3x4, skutočná veľkosť obrazového súboru je 96x128px. Mimochodom, veľkosť jedného znaku nie je obmedzená, takže je možné aj 32x48px alebo 64x64px.
* Obrázok pripravený tentokrát je Iwamaru-kun, ktorý som urobil už dávno. Môžete ho použiť ako overenie správania.
Vytvorenie projektu a príprava obrázkov
Vo vzorke, ktorú tentoraz vytvoríme, budeme predpokladať, že môžete umiestniť postavu a presunúť ju kurzorovými klávesmi na klávesnici.
Prvým krokom je vytvorenie nového 2D projektu. Pridajte obrázok znaku, ktorý ste pripravili pre svoj projekt.
Vyberte obrázok, ktorý ste práve pridali, a nakonfigurujte nasledujúce nastavenia v inšpektorovi:
názvu položkyPoznámky k hodnote | ||
---|---|---|
Typ textúry | škriatok | |
Sprite režim | plurál | |
Počet pixelov na jednotku | 32 | Ovplyvňuje veľkosť pri zobrazení |
Typ oka | Celý obdĺžnik | |
Režim filtra | bod | V prípade potreby |
kompresia | bez | V prípade potreby |
Po nastavení kliknite na tlačidlo "Použiť" v dolnej časti.
Potom rozdeľte obrázok tak, aby ste medzi nimi mohli prepínať v Unity. V inšpektorovi je tlačidlo "Sprite Editor", takže naň kliknite.
Keď sa zobrazí dialógové okno Sprite Editor, kliknite na rozbaľovaciu ponuku "Plátok", nastavte "Typ" na "Mriežka podľa veľkosti bunky", Zadajte veľkosť pixela 32 (v závislosti od veľkosti postavy) a kliknite na tlačidlo Výsek.
Potom sa obrázok rozdelí podľa zadanej veľkosti. Ak je to mätúce, stlačením klávesu Ctrl zobrazte deliacu čiaru.
Po rozdelení kliknite na tlačidlo "Použiť", aby ste ho zatvorili.
Ak kliknete na pravé kruhové tlačidlo súboru obrázka v projekte, aby ste ho rozbalili, môžete vidieť, že obrázok je rozdelený.
Vytváranie údajov animácie
Presuňte obrázok vytvorený v predchádzajúcej časti do zobrazenia.
Potom sa namiesto pridania obrázka zobrazí dialógové okno uloženia. Tým sa uložia nastavenia animácie, takže zatiaľ ich uložte ako "< názov obrázka >Animation.anim".
Tým sa v projekte vytvoria dva súbory, pričom rozdelený obrázok sa zobrazí v zobrazení a neskorší obrázok v zobrazení.
Mimochodom, ak hru spustíte v tomto stave, myslím si, že postava sa bude animovať sama. Toto je stav, v ktorom sa kedykoľvek prepína a zobrazuje 12 obrázkov.
Ak je hra spustená, ukončite ju a vyberte kartu Animácie. Ak nie, vyberte z ponuky "Window -> Animation -> Animation".
Z hierarchie ste vybrali objekt, ktorý ste vytvorili (v tomto prípade Iwamaru_0).
Automaticky generovaná animácia už existuje, ale nepotrebujem ju, takže ju neskôr odstránim. Existuje rozbaľovacia ponuka s názvom "IwamaruAnimation", ktorú som tentokrát pomenoval, takže na ňu kliknite a vyberte možnosť "Vytvoriť nový klip".
Potom sa zobrazí dialógové okno uloženia. Keďže vytvoríme animáciu pohybu nadol, necháme ho ako "Iwamaru Down".
Vyberte "Iwamaru_0" z hierarchie a zmeňte animáciu na "IwamaruDown".
Tentokrát zopakujeme animáciu v "ľavej, strednej, pravej, strednej časti", takže počet vzoriek nastavíme na 4. Potom bude časová os vpravo rozdelená na 4 časti.
Presuňte Iwamaru_0, obrázok v ľavom hornom rohu projektu, na časovej osi animácie na hodnotu 0.0.
Potom umiestnite "Iwamaru_1" na strednom obrázku vyššie na 0,1 a 0,3.
Nakoniec znížte "Iwamaru_2" na pravom hornom obrázku na 0,2.
Po dokončení kliknite na tlačidlo prehrávania. Môžete vidieť, že postava v zobrazení chodí a animuje. (Tento ukážkový obrázok je trochu ťažké pochopiť, ale ...)
Pri vytváraní animácií vľavo, vpravo a hore postupujte rovnako.
Obrázok nastavenia | názvu súboru animácie |
---|---|
IwamaruDown | Iwamaru_0, Iwamaru_1, Iwamaru_2, Iwamaru_1 |
IwamaruLeft | Iwamaru_3, Iwamaru_4, Iwamaru_5, Iwamaru_4 |
IwamaruRight | Iwamaru_6, Iwamaru_7, Iwamaru_8, Iwamaru_7 |
IwamaruUp | Iwamaru_9, Iwamaru_10, Iwamaru_11, Iwamaru_10 |
Konečný výsledok by mal vyzerať podobne ako na obrázku nižšie.
Uistite sa, že každý smer animuje správne.
Nastavenie prechodu animácie
Potom dvakrát kliknite na "Iwamaru_0.controller" z projektu, aby ste ho otvorili.
Potom sa otvorí karta Animátor a uvidíte obrazovku podobnú tej, ktorá je znázornená na obrázku. Je to preto, že animácia, ktorú ste práve vytvorili, je ". kontrolór".
Kliknite pravým tlačidlom myši na prázdne miesto a vyberte položku Vytvoriť štát -> Z nového stromu priateľov.
Vytvorí sa nový "Blend Tree", kliknite naň pravým tlačidlom myši a vyberte možnosť "Nastaviť vrstvu ako predvolený stav".
Záznam sa potom pozrie na Blend Tree. To znamená, že keď sa animácia pohne, Blend Tree bude prvá vec, ktorá sa pohne.
V Blend Tree nastavíme animácie, takže odstránime všetky existujúce animácie.
Vľavo je karta "Parametre", takže ju vyberte a pridajte "Float" z tlačidla +.
Pretože existujú dva parametre, sú pomenované "X" a "Y".
Dvakrát kliknite na strom zmiešania.
Vyberte strom zmiešania, ktorý sa zobrazí.
V časti Inšpektor zmeňte typ zmesi na 2D Simple Dictional.
Nastavte parametre na "X" a "Y".
V tlačidle + v časti Pohyb vyberte 4-krát položku Pridať pole pohybu.
Počiatočná hodnota sa môže líšiť, ale mala by vyzerať ako na obrázku.
Pre štyri položky pohybu, ktoré sme pridali, nastavíme horný, dolný, ľavý a pravý .anims v projekte.
Potom určite, ktorým smerom sa majú jednotlivé animácie pohybovať.
Smer | X | Y |
---|---|---|
pod | 0 | -1 |
vrchol | 0 | 1 |
Vľavo | -1 | 0 |
Doprava | 1 | 0 |
Tým sa dokončí nastavenie animácie.
Nakoniec môžete automaticky generovaný súbor animácie odstrániť, pretože ho nepotrebujete.
Ovládanie pohybu
Pohyb sa vykonáva stlačením klávesu na klávesnici, takže môžete vytvoriť skript na jeho ovládanie. Tentokrát bude skript pripojený k postave, takže ho necháme ako "CharacterMove".
Skript vyzerá takto:
using UnityEngine;
using UnityEngine.InputSystem;
public class CharacterMove : MonoBehaviour
{
// あらかじめ Animator コンポーネントを持っておくようにする
private Animator _animator;
// 最初のフレーム更新の前に開始が呼び出されます
void Start()
{
// オブジェクトに紐付いている Animator を取得する
_animator = GetComponent<Animator>();
// 最初の向き (下) を設定する
_animator.SetFloat("X", 0);
_animator.SetFloat("Y", -1);
}
<summary>一定時間ごとに呼ばれるメソッドです。</summary>
void FixedUpdate()
{
// キーボードの入力方向を取得
var move = GetMove();
if (move != Vector2.zero)
{
// 入力されている場合はアニメーターに方向を設定
_animator.SetFloat("X", move.x);
_animator.SetFloat("Y", move.y);
// 入力した方向に移動
transform.Translate(move * 0.2f);
}
}
<summary>キーボード入力による移動方向を取得します。</summary>
<returns>キーボード入力による移動方向。</returns>
private Vector2 GetMove()
{
Vector2 move = Vector2.zero;
if (Keyboard.current.upArrowKey.isPressed)
{
move += new Vector2(0, 1);
}
if (Keyboard.current.downArrowKey.isPressed)
{
move += new Vector2(0, -1);
}
if (Keyboard.current.leftArrowKey.isPressed)
{
move += new Vector2(-1, 0);
}
if (Keyboard.current.rightArrowKey.isPressed)
{
move += new Vector2(1, 0);
}
// 入力した値がある場合は正規化して返す
return move == Vector2.zero ? move : move.normalized;
}
}
Nasleduje vysvetlenie každej časti.
// あらかじめ Animator コンポーネントを持っておくようにする
private Animator _animator;
// 最初のフレーム更新の前に開始が呼び出されます
void Start()
{
// オブジェクトに紐付いている Animator を取得する
_animator = GetComponent<Animator>();
// 最初の向き (下) を設定する
_animator.SetFloat("X", 0);
_animator.SetFloat("Y", -1);
}
Start
Najprv získajte komponent v metódeAnimator
. Update
Toto bude použité v , takže ho majte vopred.
Animator.SetFloat
Metóda môže nastaviť hodnotu pre zadaný názov parametra.
V nastaveniach animácie nastavíme, ktorá animácia sa má použiť podľa hodnôt X a Y.
Ak nastavíte smer parametrov X a Y, animácia sa vykoná v tomto smere.
V počiatočnom stave chceme smerom nadol, preto špecifikujeme (X: 0, Y: -1).
Mimochodom, všimnite si, že názvy parametrov rozlišujú veľké a malé písmená.
<summary>一定時間ごとに呼ばれるメソッドです。</summary>
void FixedUpdate()
{
// キーボードの入力方向を取得
var move = GetMove();
if (move != Vector2.zero)
{
// 入力されている場合はアニメーターに方向を設定
_animator.SetFloat("X", move.x);
_animator.SetFloat("Y", move.y);
// 入力した方向に移動
transform.Translate(move * 0.2f);
}
}
FixedUpdate
V metóde pravidelne kontrolujeme vstupný stav klávesnice a spracovávame ho, keď je vstup.
GetMove
Metóda je navrhnutá tak, aby vracala smery ako vstupy klávesnice.
Obsah spracovania je založený na tom, čo je popísané v tipoch na vstup z klávesnice, takže ho vynechám.
Ak je vstup z klávesnice, Animator.SetFloat
nastavte smer metódy. To umožní animáciu v smere, v ktorom ste sa pohybovali.
transform.Translate
Potom objekt presúvame metódou.
Po vytvorení skriptu ho pripojte k objektu znaku.
poprava
Týmto sa celý proces zavŕšuje. Skúste hru spustiť a stlačením kurzorových klávesov na klávesnici ju presunúť. Ak sa postava pohybuje v smere, ktorým ste ju stlačili, a animácia chôdze sa pohybuje, zatiaľ čo grafika mení smer smeru, ktorým čelíte, máte hotovo.