Unity初心者向け3Dキャラを動かす方法(おまけでAR化)

この記事は、NTTテクノクロス Advent Calendar 2022 の7日目です。
初めまして。NTTテクノクロス田中です。
入社して2年、映像系の開発に携わってきました。
今回はUnity上での3Dモデルのアニメーション編集方法を調べてみました。
おまけで編集したアニメーションをARアプリで表示させてみようと思います。

以下の手順で作ってみました。
1．Unityインストール
2．新しいプロジェクトの作成
3．3Dモデルインポート(ユニティちゃん)
4．アニメーションの編集
おまけ．ARアプリ作成
# 1．Unityインストール
・"Unity Hub"をインストール(バージョン:Unity Hub 3.3.0)

https://unity.com/download

・インストールが完了したら"Unity Hub"を起動
・"Unityエディターをインストール"をクリック(バージョン:2021.3.14f1)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/729a2e33-76f1-e27d-7dae-34c4116169e3.png)

Unityエディターのインストールを待っている間にアカウント作成を行います。
・左上のアイコン>"アカウント作成"をクリック
・ブラウザのアカウント作成のページに遷移するのでUnityのアカウントを作成
・左上のアイコン>"サインイン"をクリック
・作成したアカウントでサインイン

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/5322e4ea-b8eb-d300-f0f7-05c4eac44667.png)

続いてライセンスの取得を行います。
※企業での開発に使用する場合は有償のライセンスを購入する必要があります。
・左上のアイコン>"ライセンスの管理"をクリック
・表示されたウィンドウの"インストール"をクリックし"無料のPersonalライセンスを取得"をクリック
・利用規約を確認し、同意してインストール

![test.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/48c4cd47-5439-cc79-27ef-5df828f1af79.gif)

Unityエディターのインストールが完了したらAndroidアプリ作成用のモジュールを追加します。
・インストール>歯車アイコン>"モジュールを加える"をクリック
・"Android Build Support"にチェックを入れ次へをクリック
・利用規約を確認し、同意してインストール

![androidmodule.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/745b3bed-e4c1-9c6e-bcfb-19404855b19f.gif)

# 2．新しいプロジェクトの作成
今回編集するプロジェクトを作成します。
・３Dのテンプレートを選択して"新しいプロジェクト"をクリック
・プロジェクト名を適当な名前に変更
・"プロジェクトを作成"をクリック

![createproject.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/6076b928-1114-f05f-54f5-476db6d6131c.gif)
 Unity本体のアプリケーションであるUnity Editorが起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/6886bd6f-3229-ecac-b73e-e63b1de6c9db.png)
# 3．3Dモデルインポート(ユニティちゃん)
今回はユニティちゃんを使用します。
ユニティちゃんはUnity Technologies Japanが開発者向けにリリースしているキャラクターです。
利用規約に準じる形であればハイクオリティなモデルを無料で使用できます。

https://unity-chan.com/contents/about/

・"Window">"Asset Store"をクリック

![AssetStore.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/c5d7ebe0-a71e-2cad-4866-8ec2a9c24cb1.gif)

表示されたブラウザから[Unity-Chan! Model](https://assetstore.unity.com/packages/3d/characters/unity-chan-model-18705)を追加します。
・[Unity-Chan! Model](https://assetstore.unity.com/packages/3d/characters/unity-chan-model-18705)ページ上の"Add to My Assets"をクリック
・"Asset Store Terms of Service and EULA"ウィンドウが表示されるので"Accept"をクリック
![アセットストアA.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/ea399585-def2-6442-0566-d4848cf06633.png)
・ブラウザ上部に"Added to My Assets"が表示されるので"Open in Unity"をクリック
![アセットストアB.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/a1c107e8-83c0-f2eb-eb98-ecc4c3137fcd.png)
・"このサイトは、Unity　Editor を開こうとしています。"と表示されるので"開く"をクリック
![アセットストアC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/4b772d99-d726-80f7-1165-ba68d5884081.png)
・"Package Manager"ウィンドウが表示されるので右下の"Import"をクリック
![unityimportaaa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/ec005802-0e78-8481-1403-733c0ba27a64.png)
・"Import Unity Package"ウィンドウが表示されるので右下の"Import"をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/721822ac-a33f-7602-609f-4c3f4d2a3a72.png)

Unity上に"unity-chan!"が追加されていればインポート成功です。
![ユニティインストール完了.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/7a336e9d-0c18-15ff-33ca-bd980dfb1c9f.png)

# 4．アニメーションの編集
まずは3D空間上にユニティちゃんを配置します。
ユニティちゃんの3Dモデルは先ほどインポートした"unity-chan!"フォルダの中に入っています。
・Asset>unity-chan!>Unity-chan! Model>Art>Modelsにある"unitychan"をドラッグ＆ドロップして3D空間上に配置
![Unitychanput.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/38d159fb-1ef4-b54d-3eea-c52c4d2683be.png)
・モーション確認しやすくするためユニティちゃんの位置と向きをMain Cameraの画角に収まるよう変更
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/137bda65-82ac-94bb-6baf-12fca649b4d7.png)
ユニティちゃんにデフォルトで用意されたアニメーションを適用させて中を見てみます。
・ユニティちゃんをクリック
・"Controllerの◎"をクリック
・"UnityChanActionCheck"をクリック
・"Controller"に表示された"UnityChanAcionCheck"をダブルクリック
![animation.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/9305ad09-e036-70c8-ab1e-ac6716765efa.gif)
タブを切り替えることで元の画面に戻れます。
![tab.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/31c0ce41-4399-cfc8-3606-12ec315a1b1a.gif)
"Animator"から"Scene"に切り替えデフォルトで用意されているアニメーション遷移に必要となるスクリプトをユニティちゃんに適用させます。
・ユニティちゃんをクリック
・"Add Component">"Scripts">"UnityChan">"Idle Changer"をクリック

![next.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/6456035f-3ab5-667f-25b0-1eeb9b87325e.gif)
試しに動かしてみます。
・画面上部の▷をクリック
画面右上の"Next"ボタンをクリックすると次のモーションへ遷移します。
"Back"ボタンをクリックすると前のモーションに遷移します。
・再度画面上部の▷をクリックして停止

![testplay.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/ee5eb627-a13a-a22e-b665-20832d1f0227.gif)

"Animator"タブに切り替えてアニメーションの中を見てみます。
緑色の"Entry"がアニメーションのスタート地点となっており、オレンジの矢印線でつながったモーション"JUMP00B"が最初に再生されているようです。

![デフォルト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/d979f7e1-e835-2143-79d4-bb986043ad4e.png)

また"JUMP00B"から下に伸びている矢印線を見てみると"Next"が"true"の時に"JUMP01B"へ遷移する設定になっています。

![状態遷移.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/a99c2078-d5bf-6927-71a5-58b5d28a41ac.png)
隣の"JUMP01B"から上に伸びている矢印線を見てみると"Back"が"true"の時に"JUMP00B"へ遷移する設定になっていました。
![状態遷移戻るほう.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/d6f1e327-e49d-721a-8e10-75c03e225482.png)

"Next"または"Back"を"true"に切り替えているのがユニティちゃんに適用させた遷移用のスクリプト"IdleChanger.cs"のようです。
"Assets">"unity-chan!">"Unity-chan! Model">"Script">"IdleChanger.cs"
で中のスクリプトを見てみると、Nextボタン押下時に"Next"を"true"に、Backボタン押下時に"Back"を"true"にする処理が含まれていました。
↓IdleChanger.csより一部抜粋
```IdleChanger.cs
		void OnGUI ()
		{
			GUI.Box (new Rect (Screen.width - 110, 10, 100, 90), "Change Motion");
			if (GUI.Button (new Rect (Screen.width - 100, 40, 80, 20), "Next"))
				anim.SetBool ("Next", true);
			if (GUI.Button (new Rect (Screen.width - 100, 70, 80, 20), "Back"))
				anim.SetBool ("Back", true);
		}
```

また、"Next"、"Back"以外のトリガーは、"Animator"タブのParametersの"＋"で新規作成することができます。
![トリガー新規作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/8a39523c-09cb-7524-3af5-79c96e943464.png)
デフォルトのモーションを組み合わせてアニメーションを作成してみます。
・"JUMP00B"で右クリック>"Copy">Base Layer上で右クリック>"Paste"で"JUMP00B 0"を作成
・"Entry"で右クリック>"Set StateMachine Default State"で橙矢印線を"JUMP00B 0"に繋げる

![motioncopy.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/0febc9e3-dfbb-965b-05a4-b24d38fe3068.gif)
・他のモーションもコピー＆ペーストして複製
・"JUMP00B 0"で右クリック>"Make Transition"で白矢印線を複製したモーションに繋げる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/ad3f892a-9f7b-2aff-9af2-ec930fde92c5.png)
繋げた矢印線をクリックするとデフォルトでは"Conditions"が"List is Empty"となっています。
デフォルトの場合は直前のモーションが終わった時点でモーションが遷移します。
"Next"または"Back"が"true"になったら遷移などさせたい場合は"Conditions"のところの"＋"をクリックしてトリガーを適用できます。
今回はデフォルトのままで進めていきます。
![defaulttrasition.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/19c3dfed-32f3-bd9e-a89d-547eed327add.png)
上記の設定で再生するとジャンプしてから歩く動きになります。
![makeanimation.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/1a6f3f30-b17c-02ae-fe23-846b6de582c2.gif)
別のパターンも作成してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/b9340ca1-ab4e-45ea-c037-2a15526421bf.png)
上記を再生すると少し歩いた後ポーズをとる動きになります。
![makeanimationB.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/e437fcb1-826d-0084-6ebc-d38e39ede0b5.gif)

以上でUnity上でデフォルトのアニメーションを組み合わせてユニティちゃんに動きをつけることができました。

# おまけ．ARアプリ作成
次は作成したモーションをARアプリにして動かしてみたいと思います。
ARアプリを作るにあたりこちらの記事を参考にしました。

https://qiita.com/sa-da/items/219280d69e280af6ebab

記事ではいらすとやのトナカイからトナカイの３Dモデルを出していますが、今回はユニティちゃん公式サイトの[UCLロゴ](https://unity-chan.com/contents/guideline/)からユニティちゃんを表示させたいと思います。
![imageLicenseLogo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/6ff5f661-eeb3-02f3-b57b-e7ab77f3d3ab.png)

ARアプリの作り方については記事をご参考ください。
完成したARアプリの画面は以下のようになりました。
![androidapk.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981449/a98d9f0b-278e-12d1-9681-ab66e07b1aa8.gif)
コピー用紙に印刷したUCLロゴからユニティちゃんが出てきて先ほど編集したアニメーションが再生されていますね。
# 最後に
今回はUnityを用いて自分でアニメーションを編集したユニティちゃんをARで表示させてみました。
意外と簡単に色々出来るみたいなのでARのゲームなど作ってみるのも面白いかもしれません。
また今回は時間が無くて触れられませんでしたが、デフォルトで用意されているモーションだけでなく頒布されているモーションもつけられそうなので、ダンスさせたり武器を扱わせてみたりと色々拡張したアニメーションが作れそうです。

明日は、@etctaroによる NTTテクノクロス Advent Calendar 2022 の8日目をお届けしますので引き続きお楽しみください！