公開されたUnityちゃん3Dデータを使ってアプリ版ドラクエっぽい物を作ってみる方法
4月7日19時からUnity公式キャラクタのUnityちゃんが公開されました。
どういった表記が正しいのかいまいちわかりませんが、高品質な3Dモデリングデータ+ボーンアニメーション+音声が無料で使えるようになりました。
これを使ってドラクエ的なものを動かしてみたいと思います。
読み込み時、バーチャル十字キーが出てこない時があるので、その時は再読み込みしてみてください。
しばらく歩いたら戦闘に突入して、戦闘は同じことの繰り返しでそのままエンドレスです。
考え方は簡単です。
フィールド用のシーンを作り、キャラクタを移動させる。
特定条件でエンカウントさせ、バトル用のシーンへ切り替える。
バトル用のシーンで、バトル処理。
フィールドシーンを作る
まずは空プロジェクトを作成します。
StandardAssetは後からも追加できるので、ここでは入れなくていいでしょう。
Unityちゃんパッケージをインポートします。
ダウンロードしてきたファイルを開くと、インポートができます。
その他、今回は下記Assetを使っています。
NGUI (※有料) 2Dメニュー表示用に便利!
iTween Visual Editor iTweenのパスをシーンビュー上で管理できる
Terrain Asset Terrain用のテクスチャなどの集合
Unity Mask Man Unity Mask Man
Universal Mobile Joystick モバイル向けジョイスティックコントローラー
まずはTerrainを使ってフィールドを作ってみましょう。
Terrainを使うと直感的な操作で、地形を作成することができます。
昔ポピュラスというゲームがありましたが、あれに近い感じで、地面を盛り上げたり、ほったりして、地形を作成するわけです。
最初はとても大きいフィールドが作成されるので、Terrainオブジェクトのインスペクタで大きさを修正します。
Width, Length, Height あたりがそれに当たります。
コツがいまいちわかりませんが、地形を作成してみました。
UnityChanフォルダの中にPrefabsフォルダがあるので、中にあるライトと、for Locomotionの中にあるUnitychan、MainCameraをシーンへ配置します。
元からあったMainCameraは削除しときましょう。
これだけで、Unityちゃんがキーボードを使って歩き回れる環境が完成です。
あと、背景の青空ですが、これはSkyboxというものを、カメラへ貼り付けてやればできます。
この状態では、キーボードによる操作系なので、キーパッドにより操作に切り替えたいと思います。
Universal Mobile Joystick Assetから、Controllerプレハブをシーンへ追加します。
Controllerの中のButtonとRightjoystickはDisable状態へとしておきます。
また、Controllerオブジェクトは(0,0,0)に配置してやらないと、画面外へはみ出してしまいます。
シーンに配置したUnityちゃんへUMJDemo_PlayerControllerスクリプトを追加します。
ジョイスティックとの関連付けをこんなかんじでしてみました。
後は、キーボードの制御をしている、UnityChanControlScriptWithRigidBodyスクリプトのFixedUpdate内の処理をコメントアウトして、
UMJDemo_PlayerControllerで動作するように適宜修正してやれば、それっぽくなります。
かなり動きは荒いというか適当なので、本当にそれらしくする場合には、分岐処理を書く必要があるでしょう。
キーボード制御系では、キーボードの操作キーに合わせて、UnityちゃんのAnimatorコンポーネントへパラメーターを送り、アニメーションを変化させていたので、
UMJの方でも、移動時にアニメーションをするよう、パラメーターを送るようにしておきます。
バトルシーンを作る
こちらも同様に、Terrainでフィールドを作成し、敵、味方のキャラクタを配置しておきます。
敵キャラにUnityMaskManを使用。
こんな感じで配置して、キャラの斜め前方にそれぞれ斜め上から見下ろすカメラを配置します。
カメラの表示切り替えは簡単です。
カメラオブジェクトをスクリプトで呼び出しておき、enabledを切り替えれば、カメラ表示が切り替わります。
また今回は、敵登場時にカメラをズームさせたかったので、それにiTweenとiTween Visual Editorを使用しています。
カメラにiTween Pathコンポーネントを追加してやるとNode Countに応じてシーンビューにも、パスの点が追加されます。
これで、カメラの開始位置、通過位置、終了位置を指定してやれば、iTweenで利用ができるようになります。
シーン開始時にカメラをぐいっと移動させる処理をいれときます。
吹き出しやボタンはNGUIで定義をし、alpha値を変更することで表示・非表示を制御します。
タイミング良くアニメーションの切り替えと、カメラの切り替え、表示物の切り替えをやれば、それっぽく見えるような気がしますね。
他にも、ダメージ時にパーティクルを表示してやったり、ターン制で敵からの攻撃なんかも付け加えてやるとそれっぽくなるかもです。
アニメーションの切り替えはMecanimが利用できますが、最初から添付されてるものはサンプル用になっているので、カスタマイズしてやれば使えるようになると思います。
後は、フィールドシーンで移動中にランダムエンカウントを発生させて、バトルシーンへ遷移させれば完了です。
超適当ランダムエンカウントです。
フェードアウト処理はこちらのスクリプトを利用しています。
実際には、シーン切り替えの前に、どのモンスターとのエンカウントなのかを、座標であったり確率であったりで計算をした上で、登場させるモンスターを変更させたり、
戦闘が終了した後に、フィールドへ戻って、先ほどいた場所へキャラを配置させる処理だったりと、必要な処理は数え切れないほどあるのですが、
その辺の処理を積み重ねていけば、3Dの知識なんて全然ない私なんかでもゲームを作れちゃう時代になったってことですよね。
そのためにはこういった利用できる3Dデータが色々と公開されていくのは非常に助かるので、どんどん増えていってほしいなと思います。
できれば、全作業過程と成果物をブログに掲載したいのですが、それらのキャプして貼り付けるだけで大変な作業なので、今後は動画だとか、なんだとかがいいのかもしれませんねー。