読者です 読者をやめる 読者になる 読者になる

Mokosoft開発者ブログ

こんなブログ読んでも時間の無駄ですよ

公開されたUnityちゃん3Dデータを使ってアプリ版ドラクエっぽい物を作ってみる方法

 

4月7日19時からUnity公式キャラクタのUnityちゃんが公開されました。

UNITY-CHAN!

どういった表記が正しいのかいまいちわかりませんが、高品質な3Dモデリングデータ+ボーンアニメーション+音声が無料で使えるようになりました。

 

これを使ってドラクエ的なものを動かしてみたいと思います。

 

 

 

 FLASH書き出し版はこちら

読み込み時、バーチャル十字キーが出てこない時があるので、その時は再読み込みしてみてください。

しばらく歩いたら戦闘に突入して、戦闘は同じことの繰り返しでそのままエンドレスです。

 

考え方は簡単です。

フィールド用のシーンを作り、キャラクタを移動させる。

特定条件でエンカウントさせ、バトル用のシーンへ切り替える。

バトル用のシーンで、バトル処理。

 

フィールドシーンを作る

f:id:mad_ochi:20140409100006p:plain

 まずは空プロジェクトを作成します。

StandardAssetは後からも追加できるので、ここでは入れなくていいでしょう。

 

f:id:mad_ochi:20140409100139p:plain

Unityちゃんパッケージをインポートします。

ダウンロードしてきたファイルを開くと、インポートができます。

 

その他、今回は下記Assetを使っています。

NGUI (※有料) 2Dメニュー表示用に便利!

 iTween ベクターアニメーションを簡単に実装できる

iTween Visual Editor iTweenのパスをシーンビュー上で管理できる

Terrain Asset Terrain用のテクスチャなどの集合

Unity Mask Man Unity Mask Man

Universal Mobile Joystick モバイル向けジョイスティックコントローラー

 

まずはTerrainを使ってフィールドを作ってみましょう。

f:id:mad_ochi:20140409100811p:plain

Terrainを使うと直感的な操作で、地形を作成することができます。

昔ポピュラスというゲームがありましたが、あれに近い感じで、地面を盛り上げたり、ほったりして、地形を作成するわけです。

 

f:id:mad_ochi:20140409100914p:plain

最初はとても大きいフィールドが作成されるので、Terrainオブジェクトのインスペクタで大きさを修正します。

Width, Length, Height あたりがそれに当たります。

 

Terrainの基本操作はここが詳しいです。

 

f:id:mad_ochi:20140409102142p:plain

 

コツがいまいちわかりませんが、地形を作成してみました。

 

UnityChanフォルダの中にPrefabsフォルダがあるので、中にあるライトと、for Locomotionの中にあるUnitychan、MainCameraをシーンへ配置します。

元からあったMainCameraは削除しときましょう。

これだけで、Unityちゃんがキーボードを使って歩き回れる環境が完成です。

f:id:mad_ochi:20140409121045p:plain

 

 

あと、背景の青空ですが、これはSkyboxというものを、カメラへ貼り付けてやればできます。

f:id:mad_ochi:20140409121237p:plain

 

この状態では、キーボードによる操作系なので、キーパッドにより操作に切り替えたいと思います。

Universal Mobile Joystick Assetから、Controllerプレハブをシーンへ追加します。

Controllerの中のButtonとRightjoystickはDisable状態へとしておきます。

また、Controllerオブジェクトは(0,0,0)に配置してやらないと、画面外へはみ出してしまいます。

f:id:mad_ochi:20140409102911p:plain

 

 

シーンに配置したUnityちゃんへUMJDemo_PlayerControllerスクリプトを追加します。

f:id:mad_ochi:20140409103006p:plain

ジョイスティックとの関連付けをこんなかんじでしてみました。

 

後は、キーボードの制御をしている、UnityChanControlScriptWithRigidBodyスクリプトのFixedUpdate内の処理をコメントアウトして、

UMJDemo_PlayerControllerで動作するように適宜修正してやれば、それっぽくなります。

かなり動きは荒いというか適当なので、本当にそれらしくする場合には、分岐処理を書く必要があるでしょう。

 

f:id:mad_ochi:20140409103448p:plain

 

f:id:mad_ochi:20140409103507p:plain

キーボード制御系では、キーボードの操作キーに合わせて、UnityちゃんのAnimatorコンポーネントへパラメーターを送り、アニメーションを変化させていたので、

UMJの方でも、移動時にアニメーションをするよう、パラメーターを送るようにしておきます。

 

バトルシーンを作る

こちらも同様に、Terrainでフィールドを作成し、敵、味方のキャラクタを配置しておきます。

敵キャラにUnityMaskManを使用。

f:id:mad_ochi:20140409103815p:plain

こんな感じで配置して、キャラの斜め前方にそれぞれ斜め上から見下ろすカメラを配置します。

 

カメラの表示切り替えは簡単です。

f:id:mad_ochi:20140409103937p:plain

カメラオブジェクトをスクリプトで呼び出しておき、enabledを切り替えれば、カメラ表示が切り替わります。

また今回は、敵登場時にカメラをズームさせたかったので、それにiTweenとiTween Visual Editorを使用しています。

 

f:id:mad_ochi:20140409104136p:plain

カメラにiTween Pathコンポーネントを追加してやるとNode Countに応じてシーンビューにも、パスの点が追加されます。

 

f:id:mad_ochi:20140409104306p:plain

 

これで、カメラの開始位置、通過位置、終了位置を指定してやれば、iTweenで利用ができるようになります。

 

f:id:mad_ochi:20140409104404p:plain

シーン開始時にカメラをぐいっと移動させる処理をいれときます。

 

吹き出しやボタンはNGUIで定義をし、alpha値を変更することで表示・非表示を制御します。

f:id:mad_ochi:20140409104809p:plain

 タイミング良くアニメーションの切り替えと、カメラの切り替え、表示物の切り替えをやれば、それっぽく見えるような気がしますね。

他にも、ダメージ時にパーティクルを表示してやったり、ターン制で敵からの攻撃なんかも付け加えてやるとそれっぽくなるかもです。

 

アニメーションの切り替えはMecanimが利用できますが、最初から添付されてるものはサンプル用になっているので、カスタマイズしてやれば使えるようになると思います。

 

 

後は、フィールドシーンで移動中にランダムエンカウントを発生させて、バトルシーンへ遷移させれば完了です。

 

f:id:mad_ochi:20140409105302p:plain

 超適当ランダムエンカウントです。

フェードアウト処理はこちらのスクリプトを利用しています。

 

実際には、シーン切り替えの前に、どのモンスターとのエンカウントなのかを、座標であったり確率であったりで計算をした上で、登場させるモンスターを変更させたり、

戦闘が終了した後に、フィールドへ戻って、先ほどいた場所へキャラを配置させる処理だったりと、必要な処理は数え切れないほどあるのですが、

その辺の処理を積み重ねていけば、3Dの知識なんて全然ない私なんかでもゲームを作れちゃう時代になったってことですよね。

 

そのためにはこういった利用できる3Dデータが色々と公開されていくのは非常に助かるので、どんどん増えていってほしいなと思います。

 

できれば、全作業過程と成果物をブログに掲載したいのですが、それらのキャプして貼り付けるだけで大変な作業なので、今後は動画だとか、なんだとかがいいのかもしれませんねー。