Unity講座|歩行アニメーションをつくる方法【2D版】

Unity
うさタブ
うさタブ

今回はUnityで2D歩行アニメをつくる方法について勉強するッピ!

ユウキ
ユウキ

歩行アニメをつくる方法

アイカ
アイカ

まだ習ったことないわ!

うさタブ
うさタブ

今回の記事で

アニメの作り方
・アニメの制御
・左右上下のキャラの動かし方

を学べるッピ!

うさタブ
うさタブ

これからこの2D歩行アニメをつくる方法を一緒に勉強して行くッピよ~

スポンサーリンク
スポンサーリンク

歩行アニメをつくる方法【2D版】

必要なもの

うさタブ
うさタブ

まずは必要なものを用意するッピ!

  • Unity
  • Windows または Mac のパソコン

が必要ッピよ~!

うさタブ
うさタブ

まだ Unity をダウンロードしてない人は

↓ の記事を参考に必要なものをインストールするといいッピ!

うさタブ
うさタブ

その他には

  • マップ
  • キャラクター画像

も必要ッピよ~!

うさタブ
うさタブ

今回のマップチップやキャラチップは

ぴぽや倉庫様

からマップチップ画像お借りしたッピ!

うさタブ
うさタブ

とってもクオリティの高い素材ッピ!

みんなもここから借してもらうと良いッピ!

ぴぽや倉庫様
アイカ
アイカ

ここからダウンロードさせてもらえばいいのね!

うさタブ
うさタブ

ついでにDLsiteにも

素敵なチップ素材が売ってるッピよ!<露骨なPR>

DLsiteより引用<PR>

キャラクター画像の設定

うさタブ
うさタブ

さっそくキャラクター画像をセッティングするっぴ!

うさタブ
うさタブ

ダウンロードした素材を

アセットに向かってドラッグ&ドロップするッピ!

ユウキ
ユウキ

オッケー!

キャラチップのスプライトモードを設定する

うさタブ
うさタブ

まずは

インスペクター→スプライトモードを「複数」に設定

ッピ!

うさタブ
うさタブ

こうすることで、あとからキャラチップを
ポーズごとに分割することができるッピ!

うさタブ
うさタブ

次は

ユニット毎ピクセル数を「32」に設定

ッピ!

うさタブ
うさタブ

そのまま

押出エッジを「」に設定

ッピよ~!

キャラチップの分割

うさタブ
うさタブ

次はスプライトエディターキャラチップを分割するッピよ~

うさタブ
うさタブ

まずは

Sprite Editor」を

クリックするッピ!

うさタブ
うさタブ

次に

クリックするッピ!

アイカ
アイカ

わかったわ!

うさタブ
うさタブ

次は

ピクセルサイズ」→「32*32」→「スライス

クリックするッピ!

うさタブ
うさタブ

最後は「適用する」を選ぶッピよ~

ユウキ
ユウキ

これでいいのか?

ユウキ
ユウキ

おお、バラバラになってる!

アイカ
アイカ

すごいわっ

スプライトエディタの説明

うさタブ
うさタブ

ちなみにスプリクトはこんな風になってるッピ!

覚えておくと良いッピ

名称解説
テクスチャタイプ画像を何に使うかを指定します。
ここでは2DとUIの画像として使います。
スプライトモード(単数)テクスチャを1枚の画像として使用します。
(複数)1枚の中の画像に複数のキャラクターやポーズが含まれている場合に使用します。
(ポリゴン)3Dなどで使うモードです。
単位毎のピクセス数1枚の画像に複数のキャラクターやポーズが含まれている場合、1キャラクターまたはポーズの大きさを指定できます。
メッシュタイプスプライトに生成されるメッシュの種類を決めます。
タイトに設定すると、ピクセルに基づいたメッシュを作ります。
押し出しメッシュスプライト(画像)の周囲に残す、透明な枠を設定します。
ピポッドゲーム上で画像を配置・認識するための、場所を決めます。(ジャンプ処理のための足元設定など)
物理形状を生成するこれによって、スプライトのメッシュ形状が自動で作られます。
ラップモード画像シートを使ったアニメのラップ方法を設定します。
フィルターモード画像を縮小拡大したときの処理方法を設定できます。
バイナリはぼやけた感じ、ポイントだとドットの質感が残ります。

アニメーションの作成

うさタブ
うさタブ

アニメーションを作成するには、まず

スプライトエディタでバラバラにした
キャラ画像の「▶」をクリック

するッピ!

うさタブ
うさタブ

画像が展開できたら

正面を向いている3ポーズを選んで
ヒエラルキーへドラッグ&ドロップ

するッピ!

ユウキ
ユウキ

オッケー!

うさタブ
うさタブ

するとウィンドウが出てくると思うッピ!

そのまま

Front

と名前をつけて保存するっぴ!

うさタブ
うさタブ

同じように

Left
Right
Back

のアニメも作るッピよ~

アイカ
アイカ

Left
Right
Back

も作るのね!

ユウキ
ユウキ

できたぜ!

余分なファイルを消す

うさタブ
うさタブ

ヒエラルキーの中の、

正面以外のキャラ消すッピよ~!

うさタブ
うさタブ

ついでにアニメコントローラーも消すッピ!

アイカ
アイカ

アニメコントローラーって、

こんなやつかしら?

うさタブ
うさタブ

それッピ!

ユウキ
ユウキ

オッケー!

レイヤーの追加

うさタブ
うさタブ

次はレイヤーを追加するッピよ~

うさタブ
うさタブ

このレイヤーがあることで、

キャラを確実に建物より前に表示できるッピ!

ユウキ
ユウキ

面白そうだな!
さっそくやってみようぜ

うさタブ
うさタブ

まずは

インスペクター→追加設定→ソートレイヤー→Default
[ Add Sorting Layer ]

と選択するッピ!

うさタブ
うさタブ

ソートレイヤー→ [ + ]
Leyer 1に「character

と入力するッピよ~

ユウキ
ユウキ

オッケー

うさタブ
うさタブ

次は実際にレイヤーを変更するッピ!

ヒエラルキー→プレイヤーを選択→Sprite Render →
ソートレイヤー→「 character

レイヤーを変更するッピ!

アイカ
アイカ

できたわ!

アニメコントローラーの作成

うさタブ
うさタブ

次はアニメーションを制御する

コントローラーを作るッピ!

うさタブ
うさタブ

アセット→右クリック→作成
アニメーターコントローラーを選択→「Player」

と名前をつけるッピ!

うさタブ
うさタブ

作ったプレイヤーをキャラにセットするッピ!

うさタブ
うさタブ

ヒエラルキー→プレイヤー→アセット→
アニメーションコントローラー
インスペクターのコントローラードラッグ&ドロップ

するッピ!

うさタブ
うさタブ

ついにアニメーションを制御するッピ!

うさタブ
うさタブ

アニメーションコントローラー
ダブルクリックして、設定画面に向かうッピ!

うさタブ
うさタブ

パラメーターを入力するッピ!

うさタブ
うさタブ

まずは

ッピよ~!

ユウキ
ユウキ

まかせろ!

アイカ
アイカ

できたわ!

方向ステートの作成

うさタブ
うさタブ

次は方向のステートをつくるッピ!

うさタブ
うさタブ

まずBaseLayerの中で、右クリックをして

ステートの作成→[ ]

を選ぶッピ!

うさタブ
うさタブ

New State

が作られると思うから、

それをクリックして、正面の[ Front ]を作成するッピよ~

うさタブ
うさタブ

New StateインスペクターMotion なし(モーション)

へ、Frontのアニメをドラッグ&ドロップするッピ!

うさタブ
うさタブ

名前を「Front」にするのも忘れちゃいけないッピ♪

ユウキ
ユウキ

名前を

Front

っと・・・

うさタブ
うさタブ

ついでに残りの

後ろ

の3つのステートも作るッピ♪

ユウキ
ユウキ

New Stateを3つ追加して

Left
Right
Back

の分を作れば良いんだな!

アイカ
アイカ

了解よ!

遷移の作成

うさタブ
うさタブ

次は遷移を作成するッピ!

Any State」を選択、右クリック→遷移を作成

をするッピ!

アイカ
アイカ

線が結ばれたわ!

うさタブ
うさタブ

いい感じッピ♪

うさタブ
うさタブ

そのまま4方向、全部の線を引くッピよ~

ユウキ
ユウキ

Any Stateから遷移を作成して残りの

Left
Right
Back

の分を作れば良いんだな!

うさタブ
うさタブ

その通りッピ♪

遷移(移り変わり)の制御

アイカ
アイカ

そういえば、遷移って何かしら?

うさタブ
うさタブ

それはアニメーションの移り変わりのことッピね~

うさタブ
うさタブ

このアニメーション制御を覚えると、

例えばビックリしたアニメの再生が終わったら、

倒れるみたいなアニメの制御ができるッピよ~

ユウキ
ユウキ

へ~便利だなあ

うさタブ
うさタブ

気を取り直して、

続きをいくッピ!

うさタブ
うさタブ

よくみると

があるっピ!

うさタブ
うさタブ

この「 」をクリックするッピよ~

遷移アニメの設定

うさタブ
うさタブ

まずは「Front」の設定ッピ!

インスペクター→終了時間ありに[]チェック

ッピ!

うさタブ
うさタブ

次は

Condithons →「 + 」→ direction →Greater → Equals

に設定するッピ!

うさタブ
うさタブ

最後に横の数字を「 0 」にするッピね!

セッティング項目

うさタブ
うさタブ

インスペクター「終了時間あり」の下に

Settings設定項目があるっッピ♪

うさタブ
うさタブ

ここを

に設定するッピよ~!

左右後ろのアニメ設定

うさタブ
うさタブ

続いて左右後ろの設定ッピ!

うさタブ
うさタブ

まずは「Left」の設定ッピ!

インスペクター→終了時間ありに[]チェック
Condithons →「 + 」→ direction →Greater → Equals

ッピ!

うさタブ
うさタブ

次は

・終了時間「0.3
・遷移間隔「0
・遷移オフセット「0.3

に設定するッピ!

うさタブ
うさタブ

最後に横の数字を「 」にするッピね!

アイカ
アイカ

ね!

うさタブ
うさタブ

まずは「Right」の設定ッピ!

インスペクター→終了時間ありに[]チェック
Condithons →「 + 」→ direction →Greater → Equals

ッピ!

うさタブ
うさタブ

次は

・終了時間「0.3
・遷移間隔「0
・遷移オフセット「0.3

に設定するッピ!

うさタブ
うさタブ

最後に横の数字を「 」にするッピね!

ユウキ
ユウキ

だな

うさタブ
うさタブ

まずは「Back」の設定ッピ!

インスペクター→終了時間ありに[]チェック
Condithons →「 + 」→ direction →Greater → Equals

ッピ!

うさタブ
うさタブ

次は

・終了時間「0.3
・遷移間隔「0
・遷移オフセット「0.3

に設定するッピ!

うさタブ
うさタブ

最後に横の数字を「 」にするッピね!

ユウキ
ユウキ

だな

アイカ
アイカ

できたわ!

プレイヤーの当たり判定/質量の追加

うさタブ
うさタブ

プレイヤーの当たり判定をつけるッピ!

うさタブ
うさタブ

まず

プレイヤーをクリック

するッピ~

うさタブ
うさタブ

それからインスペクター

コンポーネントを追加Physics2DCircle Collider2D

を選択するッピ~

うさタブ
うさタブ

質量を追加するッピ!
インスペクターから

コンポーネントを追加Physics2DRigidbody 2D

を選択するッピ~

うさタブ
うさタブ

重力や抵抗を設定するッピよ~!
インスペクターから

Rigidbody 2D

を選択するッピ~

うさタブ
うさタブ

そこから

リニアの抵抗0
回転抵抗 0
重力スケール 0

と入力し、

回転を固定  ☑Z にチェックを入れる

ッピよ~

アイカ
アイカ

まかせて!

歩くプログラムの作成

うさタブ
うさタブ

最後は歩くプログラムッピ!

ユウキ
ユウキ

やっときたか!

うさタブ
うさタブ

ヒエラルキー →キャラクター → インスペクター →
コンポーネントを追加New Script → 「Chara_move

と名前をつけて追加をクリックするッピ!

うさタブ
うさタブ

↓の文をコピーして

using UnityEngine;

public class chara_move : MonoBehaviour
{
    private float speed = 0.01f; //floatは小数点
    private Animator animator;

    private void Start()
    {
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        Vector2 pos = transform.position;
        if (Input.GetKey(KeyCode.DownArrow))//↓キーを押したら
        {
            pos.y -= speed;
            animator.SetInteger("direction", 0);//正面を向く
        }
        else if (Input.GetKey(KeyCode.LeftArrow))//←キーを押したら
        {

            pos.x -= speed;
            animator.SetInteger("direction", 1);//左を向く
        }
        else if (Input.GetKey(KeyCode.RightArrow))//→キーを押したら
        {
            pos.x += speed;
            animator.SetInteger("direction", 2);//右を向く

        }
        else if (Input.GetKey(KeyCode.UpArrow))//↑キーを押したら
        {
            pos.y += speed;
            animator.SetInteger("direction", 3);//後ろを向く
        }
        transform.position = pos;
    }
}

と入力→保存するッピ!

うさタブ
うさタブ

ちなみにこれは

うさタブ
うさタブ

という意味になるッピ♪

ユウキ
ユウキ

こういうことだったのか!

アイカ
アイカ

納得だわ!

ここまでのコード
using UnityEngine;

public class chara_move : MonoBehaviour
{
    private float speed = 0.01f; //floatは小数点
    private Animator animator;

    private void Start()
    {
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        Vector2 pos = transform.position;
        if (Input.GetKey(KeyCode.DownArrow))//↓キーを押したら
        {
            pos.y -= speed;
            animator.SetInteger("direction", 0);//正面を向く
        }
        else if (Input.GetKey(KeyCode.LeftArrow))//←キーを押したら
        {

            pos.x -= speed;
            animator.SetInteger("direction", 1);//左を向く
        }
        else if (Input.GetKey(KeyCode.RightArrow))//→キーを押したら
        {
            pos.x += speed;
            animator.SetInteger("direction", 2);//右を向く

        }
        else if (Input.GetKey(KeyCode.UpArrow))//↑キーを押したら
        {
            pos.y += speed;
            animator.SetInteger("direction", 3);//後ろを向く
        }
        transform.position = pos;
    }
}

Unityのキーボード入力について

うさタブ
うさタブ

Unityのキーボード入力には、

Input.GetKeyメッソドを使うッピ!

プログラムメッソド発動条件
Input.GetMouseButtonマウスのボタンが押されていたら発動
Input.GetKeyキーボードのキーが押されたら発動
ユウキ
ユウキ

インプットメッソド~?

って何だ?

うさタブ
うさタブ

インプットメッソドというのは、

マウスキーボードなど、外部から入力があったときに

発動するプログラムをつくるときに使うものッピ!

うさタブ
うさタブ

インプットゲットキーというのは、

キーボードでキーを入力されたあとに発動するプログラムッピ!

アイカ
アイカ

そうなのね!

ユウキ
ユウキ

へ~
だけどさ、うさタブ

using UnityEngine;

public class chara_move : MonoBehaviour
{
    private float speed = 0.01f; //floatは小数点
    private Animator animator;

    private void Start()
    {
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        Vector2 pos = transform.position;
        if (Input.GetKey(KeyCode.DownArrow))//↓キーを押したら
        {
            pos.y -= speed;
            animator.SetInteger("direction", 0);//正面を向く
        }
        else if (Input.GetKey(KeyCode.LeftArrow))//←キーを押したら
        {

            pos.x -= speed;
            animator.SetInteger("direction", 1);//左を向く
        }
        else if (Input.GetKey(KeyCode.RightArrow))//→キーを押したら
        {
            pos.x += speed;
            animator.SetInteger("direction", 2);//右を向く

        }
        else if (Input.GetKey(KeyCode.UpArrow))//↑キーを押したら
        {
            pos.y += speed;
            animator.SetInteger("direction", 3);//後ろを向く
        }
        transform.position = pos;
    }
}
ユウキ
ユウキ

この、

Input.GetKey (KeyCode.LeftArrow左←キー)

とかってやつ
左右とかのキー以外にもできないのか?

ユウキ
ユウキ

エンターキーとかスペースキーも使いたいんだけどな・・・

うさタブ
うさタブ

もちろんできるッピね~!

うさタブ
うさタブ

今回使ったエンターキー以外にも、
よく使うキーを紹介するッピ!
これをキーコードというッピ! 覚えておくと良いッピよ~

キーコード対応するキー
Returnエンターキー
Backspaceバックスペースキー
Deleteデリートキー
Tabタブキー
Escapeエスケープキー
Spaceスペースキー
UpArrow
DownArrow
RightArrow
LeftArrow
キーコードと対応キー
数字キーコード対応するキー
Alpha00
Alpha11
Alpha22
Alpha33
Alpha44
Alpha55
Alpha66
Alpha77
Alpha88
Alpha99
キーコードと対応キー
ユウキ
ユウキ

すっげええ!
こんなにあるのか

うさタブ
うさタブ

まだまだあるッピよ~!
詳しくは、Unityのリファレンスをチェックすると良いッピ♪

ユウキ
ユウキ

勉強になったぜ!

アイカ
アイカ

今日もまたひとつ学んだわ!

学習のまとめ

using UnityEngine;

public class chara_move : MonoBehaviour
{
    private float speed = 0.01f; //floatは小数点
    private Animator animator;

    private void Start()
    {
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        Vector2 pos = transform.position;
        if (Input.GetKey(KeyCode.DownArrow))//↓キーを押したら
        {
            pos.y -= speed;
            animator.SetInteger("direction", 0);//正面を向く
        }
        else if (Input.GetKey(KeyCode.LeftArrow))//←キーを押したら
        {

            pos.x -= speed;
            animator.SetInteger("direction", 1);//左を向く
        }
        else if (Input.GetKey(KeyCode.RightArrow))//→キーを押したら
        {
            pos.x += speed;
            animator.SetInteger("direction", 2);//右を向く

        }
        else if (Input.GetKey(KeyCode.UpArrow))//↑キーを押したら
        {
            pos.y += speed;
            animator.SetInteger("direction", 3);//後ろを向く
        }
        transform.position = pos;
    }
}
学習のまとめ
  • |素材をインストール
  • |キャラチップを分割
  • |歩行アニメの作成
  • |レイヤーの作成
  • |アニメーションコントローラーを削除
  • |新しいコントローラーを作成
  • |上下左右のアニメを1つのコントローラーに設定
  • |パラメーターで【Int型】を設定
  • |名前の設定とモーションの設定
  • |ConditionsをEqualsにして上下左右ごとに数字を変更
  • |キャラクターにアニメコントローラーを設定
  • |スプリクトの作成
  • |テストプレイ

うさタブ
うさタブ

上手くできたッピか?

これからも色んなゲーム作りやプログラムの解説をしていくッピ!

次回も楽しみにしているッピよ~~!

うさタブ
うさタブ

UnityはC#を元に作られているッピ!
まだまだ Unity や C#について勉強したい人は↓の記事を参考にするッピ♪

スポンサーリンク

どうしてもわからない、そんなときは?

ユウキ
ユウキ

うさタブ!

オレ、もっと本格的にゲームが作りたいんだ

アイカ
アイカ

私もだわ!

もっとたくさん実用的なコードを

学ぶことってできないかしら?

うさタブ
うさタブ

おお、2人ともやる気ッピね!

ゲームの作り方を学ぶなら、コレとかどうッピか?


うさタブ
うさタブ
Udemy」テレビでも有名な動画教材
人気の機械学習からUnityゲーム講座まで選び放題ッピ!

うさタブ
うさタブ

2DアクションRPG脱出ゲーム

3Dゲーム制作講座まで

買い切り講座だからいつでも勉強し放題ッピよ~!

ユウキ
ユウキ

お!いいじゃん!

アイカ
アイカ

あと、どこか素敵な素材を売っているところはないかしら? 公式の素材販売だと、クレカ支払いしかなくて・・・

ユウキ
ユウキ

小学生じゃクレカで支払えないぜ~

うさタブ
うさタブ

ゲームの素材を買いたいなら、

DLsiteBoothとかどうッピか?

うさタブ
うさタブ

素敵なドット絵や音楽素材がいっぱい売ってるッピ!

うさタブ
うさタブ

しかもUnityアセットストアと違って

クレカ支払いじゃなく、コンビニ支払いができるのもポイントッピ!

ユウキ
ユウキ

すげーカッコいい素材がいっぱいある!

アイカ
アイカ

わたしもさっそくチェックしてみようかな♪

スポンサーリンク
Unity
学んで遊んでジャンケンポン!
タイトルとURLをコピーしました