Unityのゲーム画面でマウスをクリックした場所にキャラクターを移動させる機能を実装したいと思い、何か良い方法がないか考えたところ、Animationという機能を利用すれば実現できるかなと思いつきました。

キャラクターの移動となると、動的に移動先が変わるのでスクリプトから制御できると良いなと思ったのですが、普段はUnityのエディタからしか操作したことがなかったので、どうやって実現すれば良いのか分かりませんでした。

今回は、UnityのAnimationをスクリプトから作成する方法をご紹介したいと思います。

準備

まずは、アニメーションを制御するゲームオブジェクトにAnimationコンポーネントをアタッチします。

スクリプトから、Animationコンポーネントを取得します。

// ゲームオブジェクトからAnimationコンポーネントを取得
Animation animation = GetComponent<Animation>();
if (animation == null) {
  animation = gameObject.AddComponent<Animation>();
}

// AnimationClipの作成
Animation clip = new AnimationClip();

AnimationCurveの作成

まずは、AnimationCurveの設定から行っていきます。

この例では、アニメーション対象のオブジェクトに対して、3秒かけてx軸方向に1進める設定を行っています。

AnimationCurve curve = new AnimationCurve(
  new Keyframe(0f, 0f),
  new Keyframe(3f, 1f)
);

// 子オブジェクトの"Cube"を対象
clip.SetCurve("Cube", typeof(Transform), "localPosition.x", curve);

AnimationEventの作成

今回の場合、アニメーション終了時に処理を実行したいと思ったので、イベントを付与したいと思います。

まず、timeにアニメーションが終了する時間を設定します。

そして、設定したタイミングで発火させたい関数の名前をfunctionNameに設定します。

設定したらAnimationClipのAddEventでイベントを追加します。

AnimationEvent evt = new AnimationEvent();
evt.time = 3f;
evt.functionName = "FinishAnimation";

clip.AddEvent(evt);

アニメーションの実行

アニメーションの詳細についてはAnimationClipに設定できたので、あとはAnimationのAddClipでクリップを追加します。

その際に、追加したクリップのアニメーションの名前を付けます。

animation.AddClip(clip, "move");

設定が完了したら、後は先ほど付けた名前を指定してアニメーションを再生すればOKです。

animation.Play("move");

まとめ

Unityでのアニメーションは、基本的にはエディターから操作が可能ですが、動的にデータを変更したい場合にも応用が効きます。

プロジェクトに合わせて使い分けてみると良いかと思います。

投稿者: TWEI

趣味はプログラミング。 以前は仕事でプログラミングをやっていました。現在はWebエンジニアを目指して勉強中。 勉強で得た知識などをブログで発信していく予定です。

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA