【3D】2Dキャラ・歩行アニメーション切り替え(左右)【Unity6】

unity技術

キー操作でアニメーションを切り替える方法です。

簡易版

  • 「待機」「歩行」アニメーションの用意。
  • Animator」に「AnimatorController」をそれぞれ配置。
  • Transition(矢印)」をそれぞれ作成。
  • 条件変数を作成。
  • それぞれの「Transition(矢印)」の設定。
  • スクリプト作成。
  • 適用オブジェクトにスクリプトをアタッチ。
  • 適用オブジェクトに「Animator」コンポーネントを追加・設定。

各アニメーションを作成

今回は「歩行」ということで、「左向き待機」「左向き歩行」「右向き待機」「右向き歩行」の4つを作ります。

それぞれ「AnimationClip」と「AnimatorController」が出来上がります。

Animatorウィンドウでの作業

AnimatorControllerを配置

「左向き待機(standL)」の「AnimatorController」を基準にするためにファイルを開き、その他3つ(standR)(walkL)(walkR)の「AnimatorController」をドラッグして登録します。

Transitionを作成

各「AnimatorController」を関連付けるために「Transition(矢印)」で繋げていきます。
後に条件設定しますが、「左向き待機」から○○だったら「左向き歩行」へなどの流れ(矢印)を設定します。

配置されている「AnimatorController」を右クリックするとメニューが出ます。
Make Transition」で矢印を作って繋げていきます。

最終的に、4つの「AnimatorController」が繋がるように「Transition」を繋げます。

条件変数を作成

スイッチのオンオフをするように、アニメーションを切り替える条件として「変数」を新規作成します。

左側にある「+」マークをクリックして変数リストを出します。
今回は「Bool」型の変数を作成します。

変数名は任意です。今回は「walk_L」「walk_R」の2つを作成しました。

条件変数の種類

  • Float ・・・・・・・ 浮動小数点を条件にします。
  • Int ・・・・・・・・ 整数を条件にします。
  • Bool ・・・・・・・ 真理値(true/false)を条件とします。
  • Trigger ・・・・・・ 特定条件(あるキーが押された場合を設定など)を条件とします。

Transitionの設定

条件変数を作成したら、各「Transiton」の設定をインスペクターで行います。

設定する「Transition(矢印)」をクリックしてインスペクターに表示させます。
ちなみにクリック状態の矢印は「Delete」キーで削除可能です。

Has Exit Time」のチェックを外し「Transition Duration」を「0」にします。
今回は2Dアニメなので、アニメーションを切り替える際の補完を行わないようにします。
補完を設定していても2Dの場合は補完されずにラグが生まれるだけとなっています。
3Dを扱うとき用と覚えておきましょう。

Conditions」の「+」を押し、作成した条件変数をセットします。
上記の場合、「左向き待機(standL)」から「左向き歩行(walk_L)」への「Transition(矢印)」なので、変数「Walk_L」が「true」になった場合をスイッチのオンと設定します。

これにより「左向き待機(standL)」の時に「Walk_L」が「true」だったら「左向き歩行(walk_L)」になるという設定になります。

各「Transition(矢印)」の設定も同じようにひとつずつ行っていきます。
条件変数のtrue/falseの設定に注意しましょう。

スクリプト作成

新規でスクリプトを作成します。
キーが押されているとき離れたときを条件とし、アニメ切換変数を設置します。

ファイル名は任意です。今回は「CharacterAnimationController」としました。

using UnityEngine;
public class CharacterAnimationController : MonoBehaviour
{
private Animator anim;
private void Start()
{
anim = GetComponent();
}
void Update()
{
float horizontalKey = Input.GetAxisRaw(“Horizontal”);
if (horizontalKey > 0) // 右に移動
{
anim.SetBool(“Walk_R”, true);
anim.SetBool(“Walk_L”, false);
}
else if (horizontalKey < 0) // 左に移動
{
anim.SetBool(“Walk_L”, true);
anim.SetBool(“Walk_R”, false);
}
else // 移動していない
{
anim.SetBool(“Walk_L”, false);
anim.SetBool(“Walk_R”, false);
}
}
}

適用キャラの設定

CharacterAnimationController」スクリプトをアタッチします。

さらにコンポーネントを追加します。
設定した「AnimatorController」を扱えるようにします。

Add Component」>「Animator

AnimatorController」である「standL」(配置や条件付けしたファイル)を「Controller」フィールドにドラッグして登録します。

テストプレイ

左側の「Animator」ウィンドウにて、アニメーションの遷移が行われていることも確認できます。

コメント