Melaksanakan animasi berjalan untuk watak sprite 4 hala

Laman dikemaskini :
Tarikh penciptaan halaman :

Persekitaran pengesahan

Windows
  • Windows 11
Penyunting Perpaduan
  • 2020.3.25f1
Pakej Sistem Input
  • 1.2.0

Prasyarat untuk petua ini

Tetapan berikut telah diprakonfigurasi sebagai prasyarat untuk penjelasan petua ini.

Laman rujukan

Penyediaan grafik berjalan kaki

Pertama sekali, animasi berjalan dicapai dengan sentiasa beralih antara pelbagai imej untuk menjadikannya kelihatan seperti anda berjalan. Oleh itu, adalah perlu untuk menyediakan seberapa banyak imej yang diperlukan untuk menunjukkan arah pergerakan dan berjalan.

Untuk mencapai animasi berjalan yang paling mudah, adalah perkara biasa untuk menyediakan imej berikut. Corak ini juga digunakan dalam banyak RPG.

Pertama sekali, ia dibahagikan kepada empat baris di atas dan di bawah, tetapi ia menunjukkan arah yang akan anda hadapi apabila anda berjalan. Dari bahagian atas, ia adalah "bawah, kiri, kanan, ke atas".

Dan untuk kiri dan kanan, ia akan menjadi gerakan berjalan ke arah itu. Aliran umum adalah "tengah, kiri, tengah, kanan, tengah ...".

Saiz satu sel watak yang disediakan kali ini ialah 32x32px. Oleh kerana ia disediakan untuk petak 3x4, saiz sebenar fail imej ialah 96x128px. Dengan cara ini, tidak ada had kepada saiz satu watak, jadi 32x48px atau 64x64px juga mungkin.

* Imej yang disediakan kali ini ialah Iwamaru-kun, yang saya buat lama dahulu. Anda boleh menggunakannya sebagai pengesahan tingkah laku.

Cipta projek dan sediakan imej

Dalam sampel yang akan kami buat kali ini, kami akan menganggap bahawa anda boleh meletakkan watak dan mengalihkannya dengan kekunci kursor pada papan kekunci.

Langkah pertama ialah mencipta projek 2D baharu. Tambah imej aksara yang anda sediakan untuk projek anda.

Pilih imej yang baru sahaja anda tambahkan dan konfigurasikan tetapan berikut dalam pemeriksa:

Nama Item
Catatan Nilai
Jenis Tekstur sprite
Mod Sprite Majmuk
Bilangan piksel per unit 32 Mempengaruhi saiz apabila diletakkan dalam pandangan
Jenis Mesh Segi empat tepat penuh
Mod Penapis Titik Sekiranya perlu
Mampatan Tanpa Sekiranya perlu

Selepas menetapkan, klik butang "Terapkan" di bahagian bawah.

Seterusnya, pisahkan imej supaya anda boleh bertukar antara mereka dalam Perpaduan. Terdapat butang "Editor Sprite" dalam pemeriksa, jadi klik.

Apabila dialog Editor Sprite muncul, klik juntai bawah "Potong", tetapkan "Jenis" kepada "Grid Mengikut Saiz Sel", Masukkan saiz piksel 32 (bergantung pada saiz watak anda) dan klik butang Hiris.

Kemudian, imej akan dibahagikan dengan saiz yang ditentukan. Jika ia mengelirukan, tekan kekunci Ctrl untuk melihat garis pembahagi.

Selepas berpecah, klik butang "Terapkan" untuk menutupnya.

Jika anda mengklik butang kanan bulatan fail imej dalam projek untuk mengembangkannya, anda dapat melihat bahawa imej dibahagikan.

Mencipta Data Animasi

Jatuhkan imej yang dicipta dalam seksyen sebelumnya ke dalam pandangan.

Kemudian, daripada menambah imej, dialog simpan akan dipaparkan. Ini akan menyimpan tetapan animasi, jadi buat masa ini, simpannya sebagai "< nama imej >Animation.anim".

Ini akan mencipta dua fail dalam projek, dengan imej pisah dalam pandangan dan imej kemudian dalam pandangan.

Dengan cara ini, jika anda menjalankan permainan di negeri ini, saya fikir watak itu akan bernyawa sendiri. Ini adalah keadaan di mana 12 imej ditukar dan dipaparkan pada bila-bila masa.

Jika permainan sedang berjalan, keluarkannya dan pilih tab Animasi. Jika tidak, pilih "Window -> Animation -> Animation" daripada menu.

Anda telah memilih objek yang anda cipta daripada hierarki (dalam kes ini Iwamaru_0).

Sudah ada animasi yang dihasilkan secara automatik, tetapi saya tidak memerlukannya, jadi saya akan memadamkannya kemudian. Terdapat drop-down yang dipanggil "IwamaruAnimation" yang saya namakan kali ini, jadi klik padanya dan pilih "Buat Klip Baru".

Kemudian dialog simpan akan muncul. Oleh kerana kita akan mencipta animasi pergerakan bawah, kita akan meninggalkannya sebagai "Iwamaru Down".

Pilih "Iwamaru_0" daripada hierarki dan ubah animasi kepada "IwamaruDown".

Kali ini, kami akan mengulangi animasi di "kiri, tengah, kanan, sederhana", jadi kami akan menetapkan bilangan sampel kepada 4. Kemudian garis masa di sebelah kanan akan dibahagikan kepada 4 bahagian.

Jatuhkan Iwamaru_0, imej di sudut kiri atas projek, ke 0.0 dalam garis masa animasi.

Seterusnya, jatuhkan "Iwamaru_1" dalam imej tengah di atas kepada 0.1 dan 0.3.

Akhirnya, jatuhkan "Iwamaru_2" di imej kanan atas kepada 0.2.

Apabila anda selesai, klik butang main. Anda dapat melihat bahawa watak dalam pandangan sedang berjalan dan menganimasi. (Imej sampel ini agak sukar difahami, tetapi ...)

Ikuti langkah yang sama untuk mencipta animasi kiri, kanan dan atas.

Imej seting nama fail animasi
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

Hasil akhirnya harus kelihatan serupa dengan imej di bawah.

Pastikan setiap arah bernyawa dengan betul.

Seting peralihan animasi

Seterusnya, klik dua kali "Iwamaru_0.controller" dari projek untuk membukanya.

Kemudian tab Animator akan dibuka dan anda akan melihat skrin seperti yang ditunjukkan dalam gambar itu. Ini kerana animasi yang baru anda buat ialah ". controller" fail.

Klik kanan pada ruang kosong dan pilih Buat Negeri -> Daripada Pokok Rakan Baru.

"Pokok Campuran" baru akan dibuat, klik kanan padanya dan pilih "Tetapkan Lapisan sebagai Keadaan Lalai".

Entri kemudiannya akan melihat Pokok Campuran. Ini bermakna apabila animasi bergerak, Pokok Campuran akan menjadi perkara pertama yang bergerak.

Kami akan menyediakan animasi dalam Blend Tree, jadi kami akan memadamkan semua animasi sedia ada.

Terdapat tab "Parameter" di sebelah kiri, jadi pilih dan tambah "Terapung" dari butang +.

Oleh kerana terdapat dua parameter, mereka masing-masing dinamakan "X" dan "Y".

Dwiklik pada Pokok Campuran.

Pilih Pokok Campuran yang muncul.

Daripada Pemeriksa, tukar jenis campuran kepada 2D Simple Dictional.

Tetapkan parameter kepada "X" dan "Y".

Daripada butang + dalam Gerakan, pilih Tambah Medan Gerakan sebanyak 4 kali.

Nilai awal mungkin berbeza, tetapi ia sepatutnya kelihatan seperti angka itu.

Untuk empat item Gerakan yang kami tambah, kami akan menetapkan bahagian atas, bawah, kiri, dan kanan .anims dalam projek itu.

Kemudian, tentukan arah mana setiap animasi harus bergerak.

Arah XY
di bawah 0 -1
Atas 0 1
Kiri -1 0
Kanan 1 0

Ini melengkapkan persediaan animasi.

Akhirnya, anda boleh memadamkan fail animasi yang dijana secara automatik kerana anda tidak memerlukannya.

Kawalan pergerakan

Pergerakan dilakukan dengan menekan kekunci pada papan kekunci, jadi anda boleh membuat skrip untuk mengawalnya. Kali ini, skrip akan dilampirkan pada watak, jadi kami akan meninggalkannya sebagai "CharacterMove".

Skrip kelihatan seperti ini:

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;
  }
}

Berikut adalah penjelasan setiap bahagian.

// あらかじめ Animator コンポーネントを持っておくようにする
private Animator _animator;

// 最初のフレーム更新の前に開始が呼び出されます
void Start()
{
  // オブジェクトに紐付いている Animator を取得する
  _animator = GetComponent<Animator>();

  // 最初の向き (下) を設定する
  _animator.SetFloat("X", 0);
  _animator.SetFloat("Y", -1);
}

Start Pertama, dapatkan komponen dalam kaedah iniAnimator. Update Ini akan digunakan dalam , jadi dapatkannya terlebih dahulu.

Animator.SetFloat Kaedah ini boleh menetapkan nilai untuk nama parameter yang ditentukan. Dalam seting animasi, kami menetapkan animasi yang akan digunakan mengikut nilai X dan Y. Jika anda menetapkan arah parameter X dan Y, animasi akan dilaksanakan ke arah itu. Dalam keadaan awal, kita mahu menghadapi, jadi kita tentukan (X: 0, Y: -1). Dengan cara ini, ambil perhatian bahawa nama parameter adalah sensitif huruf.

/// <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 Dalam kaedah ini, kami secara berkala menyemak status input papan kekunci dan memprosesnya apabila terdapat input.

GetMove Kaedah ini direka untuk mengembalikan arah sebagai input papan kekunci. Kandungan pemprosesan adalah berdasarkan perkara yang diterangkan dalam Petua Input Papan Kekunci, jadi saya akan meninggalkannya.

Apabila terdapat input papan kekunci, Animator.SetFloat tetapkan arah kepada kaedah. Ini membolehkan animasi dalam arah yang anda alihkan. transform.Translate Selepas itu, kami memindahkan objek dengan kaedah tersebut.

Sebaik sahaja anda telah mencipta skrip, lampirkannya pada objek aksara.

Pelaksanaan

Ini melengkapkan keseluruhan proses. Cuba jalankan permainan dan tekan kekunci kursor pada papan kekunci anda untuk mengalihkannya. Jika aksara bergerak ke arah yang anda tekan dan animasi berjalan bergerak semasa grafik mengubah arah ke arah yang anda hadapi, anda sudah selesai.