Unity Mecanim キープレスでアニメーションを再生する方法
Mecanim は、Unity 用のステート駆動型ツールで、開発者に高度なアニメーション制御と機能豊富なエディターを提供します。
Mecanim の顕著な機能は、アニメーション ブレンディングとアニメーション リターゲットです。
アニメーション ブレンディングは、アニメーション間のスムーズな移行を行う自動プロセスです。
アニメーションのリターゲットは、複数のキャラクタ リグ間で動作するように既存のアニメーションを再利用するプロセスであり、新しいキャラクタごとに新しいアニメーションを作成する必要がなくなります。
このチュートリアルでは、Mecanim を使用して立方体をアニメーション化し、キープレスでアニメーションを再生する方法を説明します。
ステップ
Unity で Cube をアニメーション化するには、以下の手順に従います。
- 新しいキューブを作成します (ゲームオブジェクト -> 3D オブジェクト -> キューブ)
- Cube を選択し、アニメーション ウィンドウを開きます (ウィンドウ -> アニメーション -> アニメーション)。
- [アニメーション] ウィンドウで "Create" をクリックすると、新しいアニメーション、新しい Animator コントローラーが作成され、Animator コンポーネントが Cube にアタッチされます。
- 新しいアニメーションに名前を付けます "SpinAnimation"
- アニメーション ウィンドウで、[AddProperty] -> [Transform] -> [Rotation] をクリックします。
- このアニメーションには開始と終了の 2 つのフレームがあります。
- 最初のフレームでは、回転を (0, 0, 0) に設定します。
- 最後のフレームでは、回転を (0, 360, 0) に設定します。
アニメーションの準備ができました。
ヒント: さらにアニメーションを作成するには、アニメーション ウィンドウでアニメーション名をクリックし、"Create new Clip..." をクリックします。
Mecanim Animator コントローラーをセットアップするには、以下の手順に従います。
- アニメーションで作成された Animator Controller アセットをダブルクリックします。
- "Animator" というタイトルの新しいウィンドウが表示され、次のようになります。
- "Entry" から "SpinAnimation" を指している矢印があることがわかります。これは、シーンが開始するとすぐにアニメーションが再生されることを意味しますが、それは私たちが望んでいることではなく、キーを押したときにのみアニメーションを再生したいのです。
Mecanim にはエントリ アニメーションが必要なので、新しい Empty 状態を作成し、それをエントリにします。
- Animator ウィンドウを右クリック -> 状態の作成 -> 空:
- [Entry state] を選択 -> それを右クリック -> [Set StateMachine Default State] を選択し、"New State" をポイントします。
最後にやるべきことは SpinAnimation への遷移を行うことですが、特定の条件が満たされた場合にのみ遷移を実行したいと考えています。そのとき、[パラメータ] タブが表示されます。
- Animator ウィンドウの「パラメータ」タブをクリックし、(+) 記号をクリックします。
複数のタイプが利用可能であることがわかりますが、ここでは Trigger を選択します。これは bool に似ていますが、bool とは異なり、アニメーションが完了すると自動的に false に設定され、ワンショット アニメーションに便利です。:
- パラメータに名前を付けます "spinTrigger"
- 最後に "Any State" を選択し、右クリックしてトランジションを作成し、SpinAnimation をポイントします。
- トランジションの矢印をクリックし、インスペクター ビューの [条件] で (+) をクリックし、spinTrigger パラメーターが選択されていることを確認します。
- Unity で作成されたアニメーションはデフォルトでループが有効になっていますが、アニメーションを 1 回だけ再生したいので、プロジェクト ビューでアニメーション クリップを選択し、[ループ時間] チェックボックスをオフにする必要があります。
スクリプトから Mecanim パラメータを制御できるようにするには、特別な関数を使用する必要があります。以下のコードを確認してください。
- 新しいスクリプトを作成し、"AnimationTest" という名前を付け、そこからすべてを削除して、その中に以下のコードを貼り付けます。
アニメーションテスト.cs
using UnityEngine;
public class AnimationTest : MonoBehaviour
{
Animator animator;
// Start is called before the first frame update
void Start()
{
//Get Animator component
animator = GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
//Play spin animation on key press
if (Input.GetKeyDown(KeyCode.Q))
{
animator.SetTrigger("spinTrigger");
}
}
}
- Animator コンポーネントを使用して、AnimationTest.cs スクリプトを Cube にアタッチします。
では、テストしてみましょう:
すべてが期待どおりに動作し、Q を押すとアニメーションが再生されます。