BF6 「Portal」の作り方解説 – カスタムのゲームモードをゲームエンジン「ゴドー」とGUIプログラミングで作る方法

表題の通りです。

動画作ったので↓ご覧ください。


ファイル一覧:
・ガイドドキュメント markdown
 → https://www.mediafire.com/file/h22co7ll2n0h22f/PORTAL_DOC.md/file
・Limestoneのspatial.json
 → https://www.mediafire.com/file/jmkn6dq118bpw6a/MP_Limestone.spatial%25281%2529.json/file
・ブロックエディタのworkspace.json
 → https://www.mediafire.com/file/5pn0ksp2wau5gqi/small_tdm_init_workspace.json/file


Portal でのポイント

動画でも述べていますがつまづきやすいポイントをまとめました。

チーム人数は必ず2人以上に設定

1人だと0人になってしまうようです。もしかしたら観戦者用スロット扱いとかなのかもしれません。

マップインポート時は必ず「Include Default Spatial」にチェック

挙動が安定しないのかな?と最初思っていたのですが、どうやら再インポートする際などは勝手にチェックが外れるようで、その状態でインポートすることで崩れたりしていたみたいです。
そのため、一度削除して再インポートする場合は必ずチェックを入れるように意識したほうがいいかと思われます。

Godot でのセットアップ方法
  1. Godot を起動
  2. Godot でSDK同梱(どうこん)のプロジェクトを開く
  3. 待つ
  4. 右パネルの「Portal Setup」を押す
  5. 待つ
  6. メニュ-の「シーン」→「シーンを開く」または左のパネルからlevelsの中の項目をどれかひとつ開く
  7. 下パネルの Object Library を開いてそこからドロップ
マップカメラは「DeployCam」を配置

出撃時の全体マップはゴドー上で DeployCam を配置しておきましょう。
それでも若干ズレてる気がしますが、本編(マルチプレイヤー)でもズレてるのでたぶん全体的なバグだと思います。

マップ対応表
Map/Level NameLevel file
Empire StateMP_Aftermath
Iberian OffensiveMP_Battery
Liberation PeakMP_Capstone
Manhattan BridgeMP_Dumbo
Mirak ValleyMP_Tungsten
New Sobek CityMP_Outskirts
Operation FirestormMP_Firestorm
Saint’s QuarterMP_Limestone
Siege of CairoMP_Abbasid
Godot で使えるオブジェクト
名称(英語)説明(日本語)用途 / 備考
Combat Areaマップ内でプレイ可能な領域(戦闘エリア)を定義するPolygonVolume を使い、頂点を編集して範囲を描く。外へ出ると警告または死亡処理になる
HQ_PlayerSpawnerチーム専用のHQスポーン(本拠地スポーン)出撃画面でHQを選んでスポーンできる。InspectorでTeam IDを設定必須
PlayerSpawnerチームに属さない汎用スポーンポイントスクリプトから直接 Teleport / Deploy させる用途に向く(HQが無くても可)
SpawnPointHQ_PlayerSpawnerPlayerSpawner に接続される実際の出撃位置HQやSpawnerにリンクしないと無効。位置(座標)だけを示すオブジェクト
AreaTriggerPolygonVolume などと組み合わせて、侵入・退出イベントを発火させるOnPlayerEnterAreaTrigger / OnPlayerExitAreaTrigger でスクリプト制御可能
DeployCamデプロイ画面(出撃前マップ)で使われるカメラロビーで表示されるマップの角度・ズームを決める。上面図にしたい場合はここに真俯瞰カメラを置く
VehicleSpawnerスクリプトでビークルを湧かせるトリガーとして使うTriggerVehicleSpawner などで呼び出せる
WorldIconワールド空間にピンやテキスト表示を出すためのオブジェクトHQピン・目的地マーカーなどに利用可能
InteractPointプレイヤー操作に反応するポイント(例:押す、起動する)スクリプトで OnPlayerInteract 的な処理が可能
AI_SpawnerカスタムAI用のスポーンポイントSpawnBot() 系スクリプトでここからBotを出現させる

公式動画のメモ

7 Godot Add-ons for Battlefield Portal MAP Creation
https://www.youtube.com/watch?v=YRh_70gmXV8

https://drive.google.com/drive/folders/1fSuUywsBAxw2wMQRZ2Id0nWKrlKfB83I

  • gibbファイルは配置できない。tsnとかだと置ける。(けどビークルはスポーンしないはず……)
  • 大きさの縦横比変えると正常に表示されないらしい。
  • Node3Dはメモ用らしい。
アドオンの説明

画面上部のAssetLibのタブからアドオンをインストール可能。

名前配布説明画像
Recolorizerオブジェクトはデフォで白いので見分けるために使用![[Pasted image 20251016115017.png]]
MagnetSnapVキーでオブジェクト同士にスナップ可能。
後述のGodot標準機能で代替可能
Spacer間隔を空けるやつ
Duplicator3D配列配置
Alignmentオブジェクトを整列可能。![[Pasted image 20251016115032.png]]
ProtonScatterいい感じにオブジェクトを散らばすやつ。
シーンパネルから追加。オブジェクトのパスを右クリから取得し、Pathに設定。
ただしエクスポート対象にできないので、アセットとしてコピーを実際にレンダリングする設定にして消すこと。
PhysicsPlacer↑の実際に物理演算させるVer.
落として散らばす感じ。
2025-10-16 追記 オブジェクトのスナップ

オブジェクトをスナップさせて配置させたい場合、
左のシーンパネルからStatic > (マップ名)~_Terrain を右クリックし「□Editable Children」を有効化。できたMeshに対しさらにもう一度実行。
出てきたTerrainを選択すると3Dビュー上部にMeshという項目が出てくる。
これを押して
「Create Collision Shape」>「Sibling(兄弟)」を「Static Body Child(スタティックボディの子)」に変更する。

こうすると自動でオブジェクトが地形にスナップするようになる。
~_Assetsも同様にすると薄いオレンジの建物にもスナップされる。
この状態で Shift+G を押すとスナップモードでの配置が可能。

ロジック実装は「HELP」を見る

Rules Editor のブロックエディタではすぐに右クリックするクセをつけましょう。


今回の動画について

今回、動画作成にあたっていくつかチャレンジをしたので何かと至らない部分もあるかもしれませんが、ご了承ください。

なるべく早めにまとめる

発売直後でまだ熱気があるうちにできるだけ早く投稿できるように考えました。
結果としては1週間近く経ってしまいましたが……
土日祝でわりと普通にプレイしていたのと、まさか Godot や TypeScript まで使った本格的なものだとは思っていなかったのと、仕様の理解などに結構時間がかかってしまったのが反省点でした。
(最初は個人的に Firestorm でやっていたりしたのですが、動いたり動かなかったり、マップを読み込めたり読み込めなかったり……結構苦戦していました。)

AIナレーションのテスト

個人的に一番収穫が大きいのはこれでした。
今回、Google AI Studio によるナレーションを使用したのですが、非常にクオリティが高く一部読み間違いなどはあるものの、ここまでできるとは知らなかったので大変勉強になりました。

GPTによるエクスプレッション支援

ChatGPTを使って自動でAEのスクリプト等を組んでもらいました。
これによりめんどくさいもの(今回のインデックスは時間に応じて自動で背景ハイライトがつくようになっています)を数秒で作ってもらえて大変ラクでした。

解説動画の作り方ノウハウ

スクリプト(台本)、ナレーション音声、字幕、実際のデスクトップ動画、ゲーム動画……これらをすべて並行して作ったのですが作りにくいことこの上なかったです……。

理想の本来の作り方は、

  1. スクリプトをすべて整理
  2. 動画のインデックス(目次)の素材をPNGで何枚か作成しておく
  3. ナレーションを作成
  4. ナレーションを Audition で編集しつつつなげる。ロード画面等時間がかかりそうなら分割する
  5. ナレーションを再生しながら実際の画面をキャプチャする。このとき2の工程の素材をOBSであらかじめ合成
  6. ナレーションから字幕を Premiere の自動機能で自動起こし
  7. 字幕やどうしても必要なエフェクトだけ AE を使用してレンダリング or Dynamic Link
  8. 最終レンダリングは Premiere 側から (全然速度が違う)

自分は字幕から動画のカットまですべてAEでやってしまったので、レンダリング時間が3時間とかかかってしまいました。
ただ、編集しやすさは圧倒的に AE のほうがやりやすかったです。
AE は多機能すぎるのが難点ですが、その分慣れると Premiere が使いにくくてしょうがなくなってしまうというメリットなのかデメリットなのかよくわからない状況になります。

ただ、本来はカット編集等メインを Premiere, エフェクトを After Effects と、
ソフト名通りの役割が正しいので、徐々に慣れていくことにしたいです。


もし参考になったなら幸いです。

あ、ちなみにAIナレーションは架空の設定なので本気にしないでください。
(一瞬信じかけちゃうのはよくわかります……なんで本人まで騙されそうになってるのか謎ですが……)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です