いよいよ PLATEAUシリーズ最終回です。前編で東京・丸の内のデータをBlenderに読み込み、中編でUnity向けに軽量化しました。今回の【後編】は、その街を 実際にプレイヤーが歩き回れるゲームに仕立てます。無料で手に入る実在の東京を、自分の足で歩く——その第一歩を作ります。
【前編】 PLATEAUのデータを入手してBlenderで読み込む
【中編】 ポリゴンを削減・整理してUnity向けに書き出す
【後編】(今回) Unityで配置して、街を歩けるゲームにする
前編・中編のおさらい
中編で、約4万5千個のオブジェクトを1つに結合し、テクスチャ付きでUnityに取り込んだ東京駅・丸の内エリアがこちらです。この街を舞台にします。
今回の環境
| 項目 | 内容 |
|---|---|
| マシン | MacBook Pro(Apple Silicon M4) |
| Unity | 6000.4.5f1(Unity 6・ビルトインRP/前中後編で統一) |
| 入力 | Input Manager(WASD・マウス) |
| プレイヤー | CharacterController+自作の一人称スクリプト |
街をシーンに置く
中編で書き出したFBXは、すでにUnityのシーンに配置済みです。あとは プレイヤーが歩けるように、街に「当たり判定(コライダー)」と「地面」を用意すれば、ゲームの土台が完成します。
- MeshCollider:街のメッシュに追加。これでビルの壁にぶつかれる(すり抜けない)
- 地面(Plane):PLATEAUは建物だけのデータで地面がないので、足元に床を1枚敷く
プレイヤーを置いて歩けるようにする
一人称で歩くプレイヤーは、CharacterController(人型の当たり判定+移動)と、短い自作スクリプトで作ります。WASDで移動、マウスで視点、Shiftでダッシュ、Spaceでジャンプです。移動の核はこれだけです。
// マウスで視点、WASDで移動(抜粋)
float mx = Input.GetAxis("Mouse X") * lookSpeed;
float my = Input.GetAxis("Mouse Y") * lookSpeed;
transform.Rotate(0, mx, 0); // 左右に振り向く
pitch = Mathf.Clamp(pitch - my, -85, 85); // 上下を見る
cam.localEulerAngles = new Vector3(pitch, 0, 0);
Vector3 move = transform.right * Input.GetAxis("Horizontal")
+ transform.forward * Input.GetAxis("Vertical");
velocity.y += gravity * Time.deltaTime; // 重力
cc.Move((move * speed + Vector3.up * velocity.y) * Time.deltaTime);このスクリプトと、カメラを子に持つ「Player」を街の中に置けば、もう歩けます。配置は エディタ拡張(メニュー1つ)で自動化し、コライダー追加・地面・プレイヤー生成を一括で行えるようにしました。
【落とし穴】街が実寸大すぎる問題
PLATEAUは実際の寸法のデータです。取り込み方によってはUnity内で1ビルが数百もの大きさになったり、逆に街全体が手のひらサイズになったりします。標準のプレイヤー(身長1.8m)をそのまま置くと、街に対して巨人になったりアリになったりして、まともに歩けません。
そこで、街の大きさからスケールを自動推定することにしました。「一番高いビル ≒ 200m」と仮定して『1mあたり何ユニットか』を計算し、プレイヤーの身長・移動速度・ジャンプ力・カメラの描画距離をすべてその比率に合わせます。こうすれば、取り込んだ街がどんなスケールでも、ちょうど良い等身で歩けます。
ライティングを整える
そのままだと街がのっぺりするので、太陽光(Directional Light)の角度・強さ・色を昼間らしく調整し、空・地面からの環境光(Ambient)も足して、影が真っ黒に潰れないようにしました。ビルのガラスや石の質感が出てきます。
NavMeshは必要?
当初は経路探索の NavMesh(過去記事で扱った仕組み)を敷く予定でした。が、整理すると——
- NavMesh=AI(敵キャラ等)が自動で道を探して歩くための仕組み
- 今回はプレイヤー自身が操作して歩くので、CharacterControllerだけで十分
というわけで、今回はNavMeshは使わずCharacterControllerで実装しました。「街にNPC(通行人や敵)を歩かせたくなったら、そこでNavMeshを街にベイクする」——という順番が自然です。次の発展に取っておきます。
リアル東京を歩いてみた
Playボタンを押すと——東京駅前・丸の内の街に降り立ち、ビルの谷間を歩けます。実在の高層ビルを見上げながら、自分の足で歩く感覚は格別です。
視点を上空に上げれば、街全体を見渡せます。中央に東京駅(特徴的な曲面の屋根)、その周りに丸の内の高層ビル群——実在の都市がまるごとUnityの中にあります。
上空から街の上を進んでみた様子がこちらです(酔わないようゆっくりめにしています)。
▲ 東京駅・丸の内エリアを上空から見渡す(Unity・Playモード)
3部作の振り返りと今後
- ✅ 前編:PLATEAUから実在の東京(丸の内)を無料で入手し、Blenderへ
- ✅ 中編:4万5千オブジェクトを1つに結合してUnity向けに軽量化、テクスチャも復活
- ✅ 後編:CharacterControllerでプレイヤーを置き、実在の街を歩き回れるゲームに
「無料で手に入る本物の街を、自分のゲームの舞台にできる」——PLATEAUの可能性を3回かけて体験できました。実在の街がベースなので、作るほど「自分の街のゲーム」になっていくのが楽しいところです。
じつは、まだ使っていない“街の部品”があります
今回の3部作では 建物(bldg) だけを使いましたが、前編でダウンロードしたPLATEAUのFBX一式の中には、ほかにも街を構成する部品が入っていました。改めて中身を確認したところ、丸の内エリアでは次の要素が含まれていました。
| 要素 | 内容 | 今回 |
|---|---|---|
| 建築物(bldg) | ビルなどの建物 | ✅ 使用 |
| 地形(dem) | 地面の起伏 | 未使用 |
| 道路(tran) | 道路の面 | 未使用 |
| 橋梁(brid) | 橋・高架 | 未使用 |
つまり、いま歩いている街は「建物だけ」の状態。足元に地面がなく道路もないので、どこか書き割りのような印象もあります。そこで後日、この地形・道路・橋梁を追加して、もっと“本物の街並み”に整備してみる予定です。地面と道路が入れば、本記事で「街が少し浮いて見える」と感じた部分も解消できるはずです。続きもお楽しみに。
※ 本記事で使用した都市データの出典:3D都市モデル(Project PLATEAU)国土交通省/G空間情報センター
それでは、今回はここまで。ありがとうございました😊