スタッフブログ

STAFF BLOG

アプリ開発日誌

2017.03.03

【Unity】キャラクターをアニメーションさせてみよう

こんにちは、ケンです。

入社してもうすぐ一年になりますが、毎日新しい発見があり刺激を受けている今日この頃です。

今回は、Unityを使ってキャラクター(3Dモデル)をアニメーションさせてみたいと思います。

使用するキャラクター

今回はUnity Technologies Japanが提供する「ユニティちゃん」というキャラクターを使用したいと思います。

ユニティちゃんの公式サイトのダウンロードページから「ユニティちゃん 3Dモデルデータ」を選択して、3Dモデルデータのパッケージファイルをダウンロードしましょう。

下準備

ではダウンロードしたパッケージをプロジェクトにインポートします。

「Assets」->「Import Package」->「Custom Package…」からパッケージを選択しインポートします。

インポートする際どんなデータをインポートするのか選択できます。

今回はアニメーションさせるだけなのでモデルデータとアニメーションデータだけで十分なのですが、一応全部インポートしておきます。

ちなみにScenesフォルダに入っているシーンでユニティちゃんに様々なポーズをさせたり、ユニティちゃん視点で操作できたりするので興味のある方は試してみてください。

imort_unitychan

インポートしたら「UnityChan」->「Prefabs」->「Models」からunitychan をドラッグ&ドロップでHierarchy階層に移動させます。

移動させたらMain Cameraに映るようにユニティちゃんの位置を調整しましょう。

ユニティちゃん正面

アニメーションの設定を行う

次にアニメーションの設定を行います。

今回は「待ち」「走る」「ジャンプ」のアニメーションを設定してみます。

Project階層から「Create」->「Animator Controller」を選択し名前をつけてダブルクリックで「Animator」画面を開きます。

「Animator」画面のBase Layer上で右クリックから、「Create」->「Empty」でState(キャラクターの状態)を作成します。

Stateを三つ作ります。Inspector階層で名前を変更できるので、「Wait」「Run」「Jump」としましょう。

また「Any State」というStateは今回は使いません。

state1

次に状態から状態へ遷移させるための定義を行います。

Stateを選択した状態で右クリック->「Make Transition」で遷移を定義できます。

今回は以下のように設定しました。Waitを初期状態としています。

State2

次にある状態へ遷移するための条件を設定します。

まず「Animator」画面の「Parameters」のプラスボタンから各状態へ遷移するためのフラグを作成します。

ここでは、「isRun」「isJump」としました。Waitは初期状態なのでRunでもなくJumpでもない場合に自動的に遷移するのでフラグは必要ありません。

次に先ほど作成したTransitionにフラグを割り当てます。Transitionを選択し、Inspector階層のConditionsのフラグを追加します。

例えば、WaitからRunに遷移するためにはisRunフラグをOnに設定する必要があるので、WaitからRunへ遷移するTransitionを選択し、ConditionsにisRun=trueを追加します。

Conditionsにある条件を満たした時、状態から状態へ遷移します。

またアニメーション途中の遷移したい場合は、Transitionを選択してInspector階層の「Has Exit Time」のチェックを外すと実現できます。

State_Condition

次に各状態に対して行うアニメーションを設定します。

Stateを選択してInspector階層の「Motion」の右側の丸ボタンを押下し「Select Motion」画面を表示してMotionを選択します。

今回はWaitを「WAIT02」、Runを「RUN00_F」、Jumpを「JUMP00」を選択しました。

Motion

これでアニメーションの設定ができましたので、Heerarchy階層のunitychanに作成したAnimator Controllerをドラッグ&ドロップしましょう。

スクリプトで状態を切り替えよう

設定したアニメーションをスクリプトで切り替えてみます。

Project階層から「Create」->「C# Script」でスクリプトファイルを作成しましょう。

ここではファイル名をSampleAnimationとしています。

public class SampleAnimation : MonoBehaviour {

	// Animator コンポーネント
	private Animator animator;

	// 設定したフラグの名前
	private const string key_isRun = "isRun";
	private const string key_isJump = "isJump";

	// 初期化メソッド
	void Start () {
		// 自分に設定されているAnimatorコンポーネントを習得する
		this.animator = GetComponent<Animator>();
	}
	
	// 1フレームに1回コールされる
	void Update () {

		// 矢印下ボタンを押下している
		if (Input.GetKey(KeyCode.DownArrow)) {
			// WaitからRunに遷移する
			this.animator.SetBool(key_isRun, true);
		}
		else {
			// RunからWaitに遷移する
			this.animator.SetBool(key_isRun, false);
		}

		// Wait or Run からJumpに切り替える処理
		// スペースキーを押下している
		if (Input.GetKey(KeyCode.Space)) {
			// Wait or RunからJumpに遷移する
			this.animator.SetBool(key_isJump, true);
		}
		else {
			// JumpからWait or Runに遷移する
			this.animator.SetBool(key_isJump, false);
		}
	}
}

作成したスクリプトをHierarchy階層のunitychanにドラッグ&ドロップしたら完成です。
実行して確認して見ましょう。
アニメーションが切り替わっているのが確認できると思います。

終わりに

今回はUnityをつかってキャラクターをアニメーションさせてみました。

こんな可愛らしいキャラクターも自分の思い通りにアニメーションさせることができます。
創作意欲が湧いてくることこの上ないですね!

ちなみに僕が前回書いた記事の内容と組み合わせれば、AR表示したキャラクターをアニメーションさせることもできます。
【Unity+Vuforia】ARアプリを作ってみよう!!

以上です。

ライタープロフィール

【ケン】
エンジニア。システム開発部アプリチーム所属。
大学在学中にインターンとしてEDAでiOSアプリ開発を学ぶ。その後新卒で入社し、Swift・Unityを用いたアプリ開発に関わる。

BACK

お問合せ

イーディーエーに興味をお持ちいただいて
ありがとうございます!
スマホアプリに関するご相談、
お見積りや弊社へのご質問など、
お気軽にお問い合わせください。
担当者より折り返しご連絡させていただきます。

    お名前必須
    会社名
    メールアドレス必須
    電話番号必須
    お問合わせ種別必須
    お問合わせ内容必須

    アンケートにご協力ください。
    弊社サイトへはどのようにしてアクセスされましたか?

    個人情報のお取扱いに関する同意事項

    1.事業者の氏名又は名称

    株式会社イーディーエー

    2.個人情報保護管理者の氏名又は職名、所属及び連絡先

    個人情報保護管理者 小宮 保人
    Mail:[email protected]

    3.取得した個人情報の利用目的

    当フォームで取得した個人情報は、お問い合わせに関する回答のために利用し、目的外利用はいたしません。

    4.弊社が取得した個人情報の第三者への委託、提供について

    弊社は、ご本人に関する情報をご本人の同意なしに第三者に委託または提供することはありません。

    5.個人情報保護のための安全管理

    弊社は、ご本人の個人情報を保護するための規程類を定め、従業者全員に周知・徹底と啓発・教育を図るとともに、その遵守状況の監査を定期的に実施いたします。
    また、ご本人の個人情報を保護するために必要な安全管理措置の維持・向上に努めてまいります。

    6.個人情報の開示・訂正・利用停止等の手続

    ご本人が、弊社が保有するご自身の個人情報の、利用目的の通知、開示、内容の訂正、追加又は削除、利用の停止、消去及び第三者への提供の停止を求める場合には、下記に連絡を頂くことで、対応致します。

    株式会社イーディーエー 個人情報お問合せ窓口
    〒106-0032 東京都港区六本木7丁目14番23 ラウンドクロス六本木4F
    TEL:03-5422-7524 FAX:03-5422-7534
    Mail:[email protected]

    7.ご提供いただく情報の任意性

    個人情報のご提供は任意ですが、同意を頂けない場合には、第3項にあります利用目的が達成できない事をご了承いただくこととなります。

    8.弊社Webサイトの運営について

    弊社サイトでは、ご本人が弊社Webサイトを再度訪問されたときなどに、より便利に閲覧して頂けるよう「クッキー(Cookie)」という技術を使用することがあります。これは、ご本人のコンピュータが弊社Webサイトのどのページに訪れたかを記録しますが、ご本人が弊社Webサイトにおいてご自身の個人情報を入力されない限りご本人ご自身を特定、識別することはできません。
    クッキーの使用を希望されない場合は、ご本人のブラウザの設定を変更することにより、クッキーの使用を拒否することができます。その場合、一部または全部のサービスがご利用できなくなることがあります。