ActionStreetMapを使って自分の住んでいる街で戦う
ActionStreetMapのデモを改造して、好きな街で戦えるようにした。
改造の手順を簡単にまとめておく。
環境は以下の通り。
- Windows 7 Service Pack 1
- Unity 4.6.0f3
マップ
好きな街の3Dモデルを生成する。手順は以下のエントリーで書いた通り。
ActionStreetMapを使って自分の住んでいる街をUnityで再現する
プレイヤーと弾
デモのプロジェクトはサードパーソンビューで戦車が操作できるようになっている。ここでは、ファーストパーソンビューで移動や攻撃ができるように変えていく。
プロジェクトにはすでにFirst Person Controller
が読み込まれているので、プレイヤーをあらわすオブジェクトとしてシーンに配置する。
シーンにあるPlayerTank
を参考に、プレイヤーオブジェクトに必要なコンポーネントを追加する。具体的には、ActionStreetMapのデモのエントリポイントとしてActionStreetMapBehavior
を追加する。
次に、攻撃の仕組みを実装する。デモのプロジェクトはマウスクリックで戦車から弾が撃てるようになっているので、これを再利用する。射撃のコードはPlayerTankController
を参考にする。弾はPrefabのBullet
を使う。プレイヤーオブジェクトには弾の発生起点としてSpawnPoint
オブジェクトを追加する。
何もない空間から弾が発生するのは味気ないので、プレイヤーオブジェクトには銃の3Dモデルを追加する。以下のアセットを使った。
Asset Store - Modern Weapons Pack
敵とAI
敵の3Dモデルを用意し、アニメーションとAIを設定する。
3Dモデルは以下のアセットを使った。アニメーションも付属している。
Mecanimでアニメーションの設定をする。デフォルトではアニメーションタイプがLegacyになっているため、Mecanimで使えない。Mecanimで使えるように、Assets\FT_CaveWorm\FBX\CaveWorm_anim
を選択し、RigメニューのAnimation TypeをGenericに変えてApplyする。
Mecanimで使う場合、FT_CaveWormに付属しているIdle
やWalk
はそのままではループしない。ループ用のモーションを作るためそれぞれをDuplicateし、Loop Timeにチェックを入れる。
Animator Controllerを作成してモーションと遷移条件を設定し、敵オブジェクトに追加する。元からついているAnimationは削除する。
AIにはUnitySteerを使う。UnitySteerは追跡や群れによる行動を簡単に実装できるライブラリ。ドキュメントが少ないが、サンプルプロジェクトが参考になる。Rader
を使う場合には、Layers Checkedが適切に設定されていることを確認する。
敵オブジェクトにアニメーションとAIが設定できたらPrefab化し、スポーン用のオブジェクトを作成する。
建物の破壊
デモのプロジェクトには建物を破壊するためのスクリプトDestroyableObject
が含まれている。DestroyableObject
は街の3Dモデルが生成されるとき建物オブジェクトに対して自動的に追加されるが、建物のMesh Colliderとの階層がずれていてうまく動かない。
場当たり的ではあるが、デモのソースコードに手を入れて修正する。
--- a/Assets/Scripts/Character/DemoBootstrapper.cs +++ b/Assets/Scripts/Character/DemoBootstrapper.cs @@ -26,7 +26,7 @@ namespace Assets.Scripts.Character // TODO add ability to register object without this trick _solidModelBehavior = new CompositeModelBehaviour("solid", new Type[] { - typeof (DestroyableObject), + typeof (MyCityBuilding), typeof (LocationInfoHolder), });
using UnityEngine; using System.Collections; using Assets.Scripts.Map; public class MyCityBuilding : MonoBehaviour { void Start() { foreach (Transform child in transform) { child.gameObject.AddComponent<DestroyableObject>(); } } }
空
雰囲気を出すため、SkyboxとAmbient Light, Fogを設定する。Skyboxには以下のアセットを使った。
Asset Store - Skybox Volume 2 (Nebula)
実行
東京スカイツリーをバックにモンスターと戦えるようになった。