Godotメモ
最終更新日:2024年08月31日記事作成日:2021年03月10日
オープンソースのゲームエンジンGodotの特徴やTipsをメモしています。
更新履歴
(2024年8月28日)「PCKファイルについて」にGodot 4.3のGDScriptのバイナリトークン化・難読化と、PCKの暗号化について追記
(2024年8月26日)Godot 4.3の変更点を反映、「物理シミュレーションについて」、「日本語のコミュニティはある?」を追加、「Godotの名前の由来と読み方について」を拡充、W4 Cloudについて追記
(2024年2月18日)Webエクスポートの対応状況等を更新、C#のサポート状況を反映、「Godot Engineの名前の由来と読み方について」を更新
(2021年3月10日)ページ作成
Godotとは
GodotはオープンソースのC++製2D/3Dゲームエンジンです。
もともとは2007年頃から元アルゼンチン在住のJuan Linietsky氏(現在はスペインに移住)とAriel Manzur氏が開発していたインハウスゲームエンジンですが、2014年にMITライセンスでオープンソース化されました。以後、Patreonで開発費の支援を募ったり、Mozilla、Microsoft、Epic Games、Facebook等から都度開発資金の支援を受けつつアクティブに開発が進められています。2022年8月にはGodot Foundationと、エンタープライズサポートや家庭用ゲーム機対応を行うW4 Games社が設立されました。現在はGodot Development Fundで開発費の支援を受け付けています。
Windows、macOS、Linux、iOS、Android、Webブラウザと主要な一通りのプラットフォームにゲームを出力できます。また、W4 Games社が家庭用ゲーム機(現在Nintendo SwitchとPS5、Xbox Series X/S)への有償エクスポートライセンスを提供しています。
スクリプトは独自言語のGDScriptですが、C#やC++も使用できます。また、Godotのエディタ自体がGodotで動いているという特徴があり、ブラウザ版エディタのWeb Editorや、Android版のエディタも動作しています。
従来のGodot 3系と、大型アップデートとなるGodot 4系があり、2023年3月1日にGodot 4.0が安定版としてリリースされました。
Godotは公式サイトからダウンロードできるほか、Steamでも日本国内向けに配信されています。基本的には公式サイトからダウンロードしてバージョンごとに手元で管理するのがおすすめです。
他のゲームエンジンの使用経験がある方がGodotの全機能を手っ取り早く把握したい場合、List of featuresを一読するのがおすすめです。
デモプロジェクト集がGitHubのGodot demo projectsにあります。masterブランチはGodot 4向けで、3.5ブランチ等がGodot 3向けです。ブラウザ上で動作するデモを見ることができます。
Godotの名前の由来と読み方について
公式のプレスキットには、「Godotは戯曲『Waiting for Godot(ゴドーを待ちながら)』にちなんで命名され、通常戯曲と同じように発音される。言語によってGodotの発音は異なるが、私達はそれを美しいと考えている」との説明があります。
「ゴドーを待ちながら(En attendant Godot)」はフランス語の戯曲で(なのでGodotの最後の「t」を発音しない)、いくら待ってもゴドーがやってこないというストーリーなのですが、Wikipediaの項目によればJuan Linietsky氏いわく「『エンジンに新しい機能を追加し、完璧なものへと近づけたい』という永遠の叶わぬ願いをサミュエル・ベケットの劇『ゴドーを待ちながら』になぞらえて取られた」とのことです。
さらに裏話として、Godotはもともとただのコードネームだったのが、逆転裁判にゴドーという同名のキャラクターが登場したことで正式名称に決まったそうで、こちらの由来からも日本語では「ゴドー」がよさそうです。
なお、英語話者についても、直近のGodotの公式カンファレンスGodotCon 2023では登壇者はほぼ全員「ゴドー(“Go-Doh”)」と発音しています。ただし、リード開発者のJuan Linietsky氏はアルゼンチン出身なので、スペイン語読みでゴードット(“Go-Dot”)と発音することにこだわっているようです。
W4 Games社について
Godotのメイン開発者のJuan Linietsky氏、Rémi Verschelde氏らがGodotのエコシステムを強化するため(エンタープライズサポートやゲーム専用機のサポート等)にW4 Games社を設立し、2022年9月にシードで850万ドルを調達 、2023年12月にシリーズAで1300万ドルを調達しています。ちょうどLinuxに対するRed Hatのような存在をイメージしており、Red Hatの創業者やOSS Capital等が出資しているようです。
2024年3月にはMetaとの戦略パートナーシップが発表されました。GodotのOpenXRサポートの向上、Meta Quest SDKのインテグレーション提供、最適化されたリリース用テンプレートの開発、Godot向けのQuestの高品質なサンプルとドキュメントの作成等を行うとのことです。
マスコットキャラはある?
公式というわけではありませんが、GodetteないしGodot-chanというキャラクターがあります。エイプリルフールのジョークにもなっています。ライセンスはCC-BY 3.0です。
日本語のコミュニティはある?
Saitosさんが2020年にGodot Japan User Communityを設立し、Discordサーバーを開設しています。
また、コミュニティ主催のオフラインイベントとして、Godot Meetup TokyoというLT会・交流会を開催しています。2023年10月に第1回、2024年7月に第2回が開催され、次回は2024年11月に開催予定です。
- Godot Engineの学び方からコントリビューターの心構えまで4講演。『Godot勉強会 #1』のスライド資料が公開|ゲームメーカーズ
- オープンソースのゲームエンジン「Godot Engine」の勉強会が渋谷で開催。Godot 4.3に移行すべき理由や、Godotベースのツクール誕生秘話などが語られた全6セッションをレポート|ゲームメーカーズ
ビルド(エクスポート)するには
ゲーム等を実行するためのファイル一式を出力する処理を、Godotではエクスポートと呼んでいます。
エクスポートするには、Project > Exportを開いて、Add…でターゲットのプラットフォームを追加します。初回はGodotのバージョンごとに1GBほどのテンプレートファイルをダウンロードする必要があります(赤字でメッセージが出ます)。
巨大なテンプレートファイルの正体は、全プラットフォームのビルド済みのGodotエンジンランタイム一式です(Editor > Open Editor Data/Settings Folderを開いてexport_templatesフォルダ(Godot 3ではtemplatesフォルダ)の中を見てみてください)。Godotはこのランタイムにプロジェクトのアーカイブデータ(.pckファイル)を添付して実行ファイル一式を生成するようになっています。エンジン本体に手を入れない限りは重い「ビルド」が必要ないため、イテレーションが非常に高速です。
スクリプト言語について
Godotではいろんな言語を使用できますが、Godot Community Poll 2024によれば76.5%のユーザーがGDScriptをメインに使っているようです(次点がC#で17.3%)。
GDScript
GDScriptはGodotの独自言語で、拡張子は.gdです。
コーディング環境はGodotにコードエディタが内蔵されているほか、Visual Studio Codeのgodot-tools拡張があります。Visual Studio Codeのほうが高機能ですが、Godotのコードエディタでは再生中に.gdを保存するとホットリロードされて便利です。
AOTコンパイルやJITコンパイルは現在行われていないため、パフォーマンス的にはC#より一桁遅いようです(optional typingを使用すると若干速くなるようです)。Releaseモードでエクスポートすると実行時のチェックが省略され速くなるようです。
こちらのプルリクエストの簡易ベンチマークより、DebugよりReleaseのほうが4倍程度、typedにすると2倍程度速くなることが推定できます。
C#
静的型付け言語が好みでパフォーマンスが欲しい場合はC#をとされています。
Godot 4.2時点でのC#のサポート状況がこちらで解説されています。デスクトップのサポートが最も進んでいて、CoreCLR、Mono、NativeAOTが使用できます。AndroidとiOSは実験的なサポートで、Webは現在C#が使用できませんので注意が必要です(上流の.NET側の対応が必要のようで、対応がずっと先になりそうです)。
Editor > Editor Settings > Dotnet > Editor > External Editorで使用するIDEを選択でき、Visual Studio、Visual Studio Code、Rider等に対応しています。
C#のAPIはGDScriptのAPIをそのままPascalCaseにした感じになっています。例えばGDScriptの_physics_processがC#では_PhysicsProcess、get_nodeがGetNodeになります。
パフォーマンスについて、「ベンチマークではC#のほうが最大4倍速かったが、Godot本体とのやり取りに高コストなマーシャリングが必要」という記述があります。
C#を使用すると、依存する.NETのDLL群(System.dll等)とGodotSharp.dllが.pckファイルに含まれ、そのぶんサイズが大きくなります(約30MB)。テンプレートのbcl(Base Class Library)フォルダに事前ビルドされているようです。
プロジェクト内の.csファイルは「プロジェクト名.dll」というファイルにコンパイルされます。
[Export]を変更したときにInspectorに反映させるには、右上のBuildボタンまたはAlt+Bでビルドする必要があります。
GDScriptからC#のコードを呼び出したり、C#からGDScriptのコードを呼び出したりできます(Cross-language scripting)。
GDNativeについて(Godot 3)
C++やその他のさまざまな言語を使用したい場合、Unityのネイティブプラグインに相当するGDNativeがあります。GDNative APIを使って、Nodeを拡張するコードをGDScriptのように書くことができるようです。(エンジンビルドと同様)ビルドツールとしてSConsを使用するようです。
- GDNativeの非常に簡単なサンプルがGDNative C++ Exampleにあります。
- HTML5プラットフォームではExport TypeをGDNativeに変更する必要があります。GDNativeを有効にしたテンプレートをビルドする必要があるようです(サイズが大きくなるとのことで、どれくらい増えるか要確認)。今のところマルチスレッドと同時には使えないようです。
- Godot 4では新しいGDExtensionが導入されています。
GodotでC++を使用する別の方法としてモジュールがあり、モジュール単位で有効・無効にしてエンジン本体と一緒にビルドします。
グラフィックスについて
座標系について
3D座標系はY-upの右手座標系です。OpenGLの標準に合わせているとのことです。
Godot was born on Linux+OpenGL and it uses the OpenGL standard (like Maya) and it’s proud of it’s roots.
Zマイナスが前方で、Vector3.FORWARDが(0, 0, -1)になっています。
3Dモデルのインポートについて
(Godot 4.3)Godot 4.3はFBXファイルのインポートに対応しました。FBXローダーとしてufbxが使用されています。
(Godot 4.2以前)Godotはさまざまな3Dフォーマットに対応していますが、glTF 2.0(.gltfまたは.glb)の使用が推奨されています。プロジェクトのフォルダにglTFファイルを置くとシーンとしてインポートされ使用できます。
BlenderでglTFを作成する場合、Godotのプロジェクト内のサイズを小さくしたい場合はglTF Binary(.glb)で、テクスチャのインポート設定を調整したい場合はglTF Separate(.gltf+.bin+テクスチャ画像)でエクスポートします。
インポートされた.gltf/.glbをダブルクリックするとAdvanced Import Settings for Sceneのウィンドウが開き、Actions… > Extract Materialsでマテリアルを抽出したり、MeshのLighmap UVをEnableにしてライトマップのUVを生成したりできます。
インポートされたシーンは直接編集できません。編集したい場合は、右クリックしてNew Inherited SceneでGodotのシーンファイル(.tscn)に変換する必要があります。
テクスチャの解像度等を調整するには、glTF Separateでインポートしてテクスチャを選択し、Importパネル(デフォルトのレイアウトではSceneパネルの隣にあります)で設定を調整してReimportボタンを押します。Inspectorでテクスチャの圧縮フォーマットとサイズが確認できます。
コリジョンの生成
3Dソフトでメッシュの名前に-colonly(=collision only)というサフィックスをつけておくと、インポート時にStaticBody3DとCollisionShape3Dが生成されコリジョンメッシュになります。この機能を使うと、レベル制作時に3Dモデルと簡略化したコリジョンメッシュを同時にインポートできます。コリジョン関連では他に-col、-convcol、-convcolonlyのサフィックスがあります。
その他、ナビゲーションメッシュ、物理やアニメーション関連のサフィックスが用意されています(「Importing 3D scenes」を参照)。
インポートしたアセットについて
プロジェクトの.godot/importedフォルダにインポートで変換されたファイルが生成されます。プロジェクトをエクスポートするとこのファイルがそのまま.pckファイルにパッケージされます。
Godotのマテリアル
StandardMaterial3D
さまざまな機能を手軽に使用できるPBMマテリアルです。UnityのStandardシェーダーのマテリアルに相当しますが、リムライト、クリアコート、サブサーフェススキャッタリング、トゥーンシェーディング等の機能も搭載しています。
ORMMaterial3D
アンビエント・ラフネス・メタリックのテクスチャを統合したORMテクスチャを使用するPBRマテリアルです。
ShaderMaterial3D
シェーダーを自分で記述するマテリアルです。
Godotのシェーダー
GodotのシェーダーはGLSLをベースにした独自言語で、拡張子は.gdshaderです。GLSLのシェーダーを利用する方法の解説があります。
また、ノードベースのVisualShaderもあります。
Godotで使用できるシェーダーを集めたGodot Shadersというサイトがあります。
ライトマップを焼くには
Godot 4では新しいGPUベースのライトマッパーが使用できます。
シーンにLightmapGIノードを配置して、ツールバーのBake Lightmapsをクリックするとライトマップのファイル(.lmbake)が生成されます。
CSGShape3DsとPrimitiveMeshesは焼けない、OpenGLバックエンドでは焼けないとのことです。
リアルタイム大域照明
Godot 4ではリアルタイム大域照明のSDFGIが使用できます。シーンにWorldEnvironmentノードを追加して新規のEnvironmentを作成、SDFGI > Enabledをチェックすると有効になります。Project Settings > Rendering > RendererのRendering Methodがforward_plusになっている必要があります。
Linietsky氏がUE5のLumenとの比較ツイートをしています。また、SDFGIの実装の解説が以下にあります。
なお、現在後継のHDDAGIが開発されています。SDFGIよりも軽量で、カメラが高速移動してもすぐ反映され、ライト漏れも少ないとのことです。
また、スクリーンスペースの間接光を付加するSSILが使用できます。同じくWorldEnvironmentノードのSSIL > Enabledをオンにします。SDFGIでカバーできないディテールを埋められるとのことです。
物理シミュレーションについて
Godot 3ではBulletが搭載されていましたが、Godot 4では独自エンジンのGodot Physicsに変更されています。また、Jolt PhysicsをGodotで使用できるようにしたGodot Joltがあり、Godot Physicsより高速で安定しているとのことです。Godot JoltはGodot 4.4で公式モジュールとして統合される見込みのようです。
なお、Godot 4.3時点ではGodot JoltはWebプラットフォームで動作しません。Webサポートを追加するドラフトPRが出ていて、ChromeOS以外では動いているステータスのようです。
ネットワーク対応について
中レベルのレイヤーにENet、WebSocket、WebRTC(データチャネルのみ)のNetworkedMultiplayerPeerの実装があります。
高レイヤーでは任意のNetworkedMultiplayerPeerを使用してシーンツリーを同期します。
W4 Games社がオンラインゲーム用クラウドサービスW4 Cloudを提供しており、アカウント認証、マッチメイキング、データベース、ゲームサーバーのオートスケーリング等が利用できます。GNU AGPLv3でセルフホストも可能で、SupabaseとAgonesを使っているようです。
VR対応について
「Godot 4 VR開発メモ」を参照してください。
Godot 3からの変更点
Godot 4にはGodot 3からの破壊的変更が多数あります。下記ページに新機能がまとめられています。
- Godot 4.0 sets sail: All aboard for new horizons
- Godot Engine - Godot 4.0 development enters feature freeze ahead of the first beta
- Godot Engine - Major milestone ready for testing: Godot 4.0 alpha 1 is out!
Godot 4ではノード名やAPIが多数変更されています。2Dのノードと3Dのノードを区別しやすいように3Dのノードにはサフィックス3Dがつきます。Godot 3のプロジェクトをGodot 4で開くとコンバートが走ります。
Godot 4のグラフィックスAPIはVulkanとGLES3に集約されています。
GDScriptにasync/awaitが追加されています。
Godot 4でProject Settingsの項目が少ない
Project Settingsを開いて右上のAdvanced Settingsを有効にすると表示項目が増えます。
アンチエイリアスを有効にする方法がなかなか分からずはまりました(Advanced Settingsを有効にするとRendering > Anti Aliasingが出てきます)。
プロジェクトをGitでバージョン管理するには
Version Control Systemsのページに.gitignoreするフォルダ・ファイルが書かれています。
Godot 4では新規プロジェクト作成時にそのままCreate & Editすると.gitignoreが生成されるので(.godotフォルダがignoreされています)そのままgit initすればオーケーです。
プラットフォームごとのメモ
Web(HTML5)
(2024年8月現在)Godot 4のWebエクスポートには諸々の制限があり注意が必要です。
Compatibilityレンダラーについて
Webエクスポートでは機能制限のあるCompatibility(互換性)レンダラーのみが使用できます。CompatibilityレンダラーはWebGL 2を使用し、以下に解説があります。
CompatibilityレンダラーはGodot 4.0時点では2Dと基本的な3Dのみのサポートとなっていて、Godot 4.0時点では以下が使用できず、4.1以降で実装予定となっています。
- 3Dシャドウ
- リフレクションプローブ
- LightmapGI
- VoxelGI
- ポストプロセスエフェクト (SSAOとグローのみ使用可?)
- Reading from SCREEN_TEXTURE and DEPTH_TEXTURE in spatial shaders
- Vertex shading mode
また、sRGBでレンダリングされます(リニアカラーにならない)。
WebGPUがサポートされれば制限が解消されそうですが、まだ時間がかかりそうです(Add WebGPU support)。
Godot 4.3でMSAA、解像度スケーリング、グロー、リフレクションプローブ、ライトマップGI、Adjustments、カラーコレクションが実装され、feature completeと考えられる状態になっているとのことです。VoxelGIは長く実装されない見込み、SDFGIは実装される見込みがないようです。
Cross-origin Isolation
Godot 4でWebエクスポートしたページを配信するには、ウェブサーバーの設定でCross-origin Isolationを有効にするか、Godot 4.3以降でシングルスレッドにする(エクスポート設定のThread Supportをオフにする)必要があります。
マルチスレッドでCross-origin Isolationが有効になっていない場合、以下のようなエラーが出ます。
Warning!
The following features required to run Godot projects on the Web are missing:
Cross Origin Isolation
SharedArrayBuffer
- SharedArrayBuffer と過渡期な cross-origin isolation の話
- Site Isolation 及び Web のセキュリティモデルの更新 | blog.jxck.io
動作させるには、ウェブサーバーの設定で以下の2つのヘッダを送信します。
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
たとえばローカルウェブサーバーとしてBrowsersyncを使用する場合、
$ browser-sync init
で設定ファイル(bs-config.js)を生成し、設定ファイルの"middleware"のところを以下のように書き換えます。また、“server"と"https"をtrueにします。
"middleware": [
function (req, res, next) {
res.setHeader('Cross-Origin-Embedder-Policy', 'require-corp');
res.setHeader('Cross-Origin-Opener-Policy', 'same-origin');
next();
}
],
"https": true,
"server": true,
$ browser-sync start --config bs-config.js
で上記ヘッダが送信されるサーバーが立ち上がります。
C#についての注意
(Godot 4)Godot 4.3現在、WebエクスポートではC#が使用できません。.NETのWASMがサイドモジュールをロードできない等がブロッカーになっていて対応を待つしかないようです。Godot 3のようにMonoのサポートを復活させることも代替手段として検討しているようです。
(Godot 3)C#を使用すると.pckに.NETのライブラリ群が含まれ、これが圧縮前17MB強、Brotli圧縮して約5MBになります。ランタイムのWASMとあわせると約9MBからになってしまいますので、配信サイズを小さくしたい場合はGDScriptのみを使用するのがよさそうです。また、MonoのILインタプリタで実行されるため速度が遅いです。
テクスチャフォーマット
Project > ExportのHTML5プラットフォームのVram Texture Compressionで、デスクトップとモバイル(iPhone・Android)それぞれ対象となるプラットフォームのスイッチをオンにする必要があります(それぞれオンにしないとテクスチャが表示されません)。
For DesktopがオンだとS3TC圧縮テクスチャ(.s3tc.stexファイル)が、For MobileがオンだとETC圧縮テクスチャ(.etc.stexファイル)が.pckに格納されます。両方オンにするとPCとiPhone・Android両対応になりますが、出力サイズが増えます。
ランタイムの出力サイズ
(Godot 4.0 beta 10)WebAssemblyランタイムのReleaseモードのサイズはGDScript版で約26MBありますが、Brotliで圧縮すると約4.6MBになります(Brotli v1.0.4あたりでbrotli HelloGodot.wasm等で圧縮して、ウェブサーバーで圧縮配信します)。これにローダーのJavaScript(圧縮前0.4MBほど)と.pckを加えたサイズが配信サイズになります。
iOSとmacOSでの動作
Godot 4.3以降でThread SupportをオフにするとWebエクスポートがiOSとmacOSで安定動作するようになります。iOSは16以前でクラッシュが多発するようで、17以降に上げる必要があります。
Windows
rceditがないとエクスポートで警告が出ます。実行ファイルのアイコンを設定するツールです。rceditのリリースページからrcedit-x64.exeをダウンロードしてEditor Settings > Export > Windows > rceditでパスを指定します。
iOS
(Godot 4.2)iOSエクスポートのC#が実験的にサポートしています。.NET 8.0のNativeAOTが使用されます。
エクスポートするには、Exportウィンドウに警告が表示されている通り、App Store Team ID、Identifier、Required Iconsの設定が必要です。少なくとも120x120、76x76、1024x1024の3種類の画像ファイルを用意する必要があります。
“Failed to export the project for platform ‘iOS’“のエラーダイアログが表示される場合は、Godotエディタ本体のOutputウィンドウにエラー詳細が表示されています(上記のアイコンの解像度違い等で発生します)。
Android
(Godot 4.2)AndroidエクスポートのC#が実験的にサポートされています。.NET 7.0のMonoが使用されます。実行速度がNativeAOTより遅いと思われるので要注意です。
(Godot 4.1.2、Windows 11で確認)Androidビルドをするにはビルドのためのセットアップが必要です。Exporting for Androidに手順の説明がありますが、おおまかに以下の3つが必要になります。
- システムに適切なAndroid SDKがインストールされ、GodotのEditor Settingsで参照されていること
- debug.keystoreを作成し、GodotのEditor Settingsで参照されていること
- 環境変数JAVA_HOMEで適切なSDKが参照されていること
公式ドキュメントの手順と少し違いますが、上記のためにまずAndroid Studioをインストールします。起動してCustomize > All settings…でSDKの管理画面が表示されますので、Exporting for Androidで示されている必要なパッケージを一通りインストールします。
Editor Settingsで、Export > Android > Android SDK PathにSDKのパスを設定します。WindowsでAndroid Studioのデフォルト設定だと C:/Users/USERNAME/AppData/Local/Android/Sdk になります。
Exporting for Androidで示されている方法で debug.keystore ファイルを作成して Export > Android > Debug keystore で設定します。
システムの環境設定で環境変数JAVA_HOMEにAndroid Studio同梱のOpenJDK(C:\Program Files\Android\Android Studio\jbr)を設定します。
エクスポート時に"Building of Android project failed"というエラーが出て何の手がかりもない場合は、適切なJavaランタイムが使用されていない可能性があるので、環境変数JAVA_HOMEを確認します。
開発効率化のための機能
Debug > Deploy with Remote Debugをオンにしてウィンドウ右上の実行ボタンを押すと、動作中の実機のシーンをエディタで操作できます。
Debug > Small Deploy with Network Filesystemをオンにすると、実行ボタンでアセットを全部転送せずUSB経由で読み込みが行われるようです(Androidのみ)。アセットが多いプロジェクトのテストに便利なようです。
パフォーマンス最適化について
場所がちょっと分かりにくいですが、コードエディタの下のDebuggerタブを選択して上のProfilerタブを選択するとプロファイラが使用できます。スクリプトや物理シミュレーションの実行時間等を確認できます。
ビューポート左上のPerspective > View Frame TimeをオンにするとフレームレートとCPU・GPUの実行時間が、View Informationをオンにするとドローコールや頂点数等が表示されます。
Godot 4で実行時にパフォーマンス情報を表示するDebug Menuアドオンが公開されています。AssetLibからインストールしてProject Settings > Pluginsで有効にします。F3キーで表示します。
GPUのプロファイリングについて、Windowsエクスポートした実行ファイルについてRenderDocが使用できるのを確認しています。RenderDocのLaunch ApplicationタブのExecutable Pathに実行ファイルのパスを入力してLaunchします。Vulkanの設定をする必要があります。Event Browserの時計のアイコンで実行時間が表示されます。
Godot 3でGLES 2だと下記エラーが出ます。GLES 3、またはGodot 4のVulkanだとRenderDocが使用できます。
OpenGL. Context not created via CreateContextAttribs. Capturing disabled.
Only OpenGL 3.2+ contexts are supported.
PCKファイルについて
.pckファイルはGodot独自のパッケージ形式で、Godotのプロジェクトをエクスポートするとデータファイルとして作成されます。
注意として.pckファイルはgodotdecやGodot RE Toolsを使うと中を見ることができます。
Godot 4.3以降ではGDScriptはデフォルトでバイナリトークン化されて.gdcファイルに変換され、最低限の難読化がされます。依然逆コンパイルはできてしまうので注意が必要です(.NETなども同様ですが)。
.pckファイル自体を暗号化することもできますが(ExportのEncryptionタブを確認)、Godotのテンプレートを自分でコンパイルして実行ファイルに暗号鍵を含める必要があります。こちらも鍵が見つかれば解除できてしまうので注意が必要です(基本的にソフトウェアの解析を完全に防ぐ方法は存在しないと思います)。
.pckファイルを実行時に読み込むこともできます(ProjectSettings.load_resource_pack()を使用)。プロジェクトのファイルを置き換えることができるので、DLCやパッチの配布に使用できます。
Godotで使用できる3Dアセットは?
Godotにはいわゆるアセットストアがありません(Godot Foundationで現在準備中のようで、XにGodot Asset Storeのアカウントが作られています)。特に3Dゲームを制作する場合、自分で制作するのでなければアセットの準備に苦労すると思うのですが、入手場所として以下が考えられます。
Sketchfab
Sketchfabの3Dモデルを公式のGodotプラグインを使用して検索・インポートできます。ライセンスは都度確認が必要です。
Sketchfab公式のプラグインはGodot 3系向けですが、Godot 4で動作するバージョンが作られています。
(2022年11月現在)Godot 4 beta 2以降でファイル操作周りの破壊的変更があり、masterから引っ張ってくる必要があります。cloneしてaddons/sketchfabフォルダをプロジェクト内にコピー、Project Settings > PluginsでSketchfabのEnableをチェックするとウィンドウ上部にSketchfabのボタンが追加されます。
Unity Asset Store
Unity Asset Storeのアセットは基本的に他のゲームエンジンでも使用できます。以下が根拠になります。
-
(日本語)アセットストアのEULAの解釈を変更しました – Unity公式 Asset Portal
2020年4月13日13時より、Unity AssetStoreの利用規約と使用許諾(EULA)の解釈を現在の需要に合わせて以下の通り変更しました。 アセットの全部または一部は、Unityに限らずゲームエンジンやオーサリングソフトウェアなどに取り込んで、ゲームもしくはインタラクティブメディア、ノンインタラクティブメディアへ組み込むためにお使いいただけます。
-
> I would like to use an Asset in a different game engine
We cannot provide assistance on how to get Assets working in other engines. -
(英語)Can free Unity Store assets be used in non-Unity games?
You can also use free assets in your game for commercial use. Using Unity assets is fine, though please be aware that many developers use Unity to create their games and most are aware of the assets we provide. For an original game they might not be the best fit.
(訳)また、商用利用であれば、フリーアセットをゲーム内で使用することも可能です。Unityのアセットを使用しても構いませんが、多くの開発者がUnityを使用してゲームを制作しており、ほとんどの開発者は当社が提供するアセットを知っていることをご了承ください。オリジナルのゲームに使用するには、最適ではないかもしれません。
特別なライセンスがあるアセットに注意してください。また、アセットのダウンロードにはUnityのインストールが必要です。
Unreal Engine Marketplace
Unreal Engine Marketplaceのアセットは基本的に他のゲームエンジンでも使用できます。以下が根拠になります。
-
Can I use these products in other gaming engines, like Source or Unity?
Any Marketplace products that have not been created by Epic Games can be used in other engines unless otherwise specified.
Epic Gamesが作ったものは使用できないことに注意する必要があります。また、アセットのダウンロードとエクスポートにUEのインストールが必要です。
Kenney
Kenney氏がCC0のゲーム用アセットを大量に制作しています。
OpenGameArt.org
Godotのエンジンビルドをするには(Godot 3)
Godotのエンジンの設定を変えてビルドする必要がある場合があります。使用しないモジュールを無効にしてサイズを減らしたりできます。
下記ページに説明があります。
WindowsではC++ビルドができるVisual Studio 2019とPython 3.5以上があればビルドできます。ビルドシステムにSConsを使用しているのでインストールし、GitHubからクローンしたプロジェクトをビルドします。
$ git clone https://github.com/godotengine/godot.git
$ python -m pip install scons
$ scons -j[使用コア数] platform=windows
しばらく待つと(うちのRyzen 9 5950X機で3分ほどでした)binフォルダに実行ファイルができます。また、
$ scons p=windows vsproj=yes
でVisual Studioのソリューションを作成して、Visual Studio上でデバッグ実行できます。
リリースビルドはtarget=release_debugを、テンプレート(エディタのないGodotエンジン)をビルドするにはtools=noを設定するようです。その他、詳細や各プラットフォームのビルドは公式ドキュメントを参照してください。
Tips
コーディングスタイルについて
Project organizationのページにプロジェクトの構造のガイドラインがあります。
- フォルダやファイル名はsnake_caseで(C#スクリプトを除く)。models、characters、levelsといった名前のフォルダが例示されています。
- ノード名はPascalCase
エディタのスクロール速度について
マウスホイールでのエディタのスクロール速度について、Editor SettingsのText Exitor > BehaviourにV Scroll Speedという設定がありますが、現状この設定が効かず3行ずつにハードコードされているようです。Altキーを押しながらホイールを回すと15行ずつになります。
再生中にシーンツリーを見るには
SceneドックでLocalタブからRemoteタブに切り替えます。Editor Settings > DebuggerのAuto Switch To Remote Scene Treeをオンにすると自動的にRemoteになります。
ユーザーの入力を処理するには
Project > Project Settingsを開いて、上のInput MapタブでActionとそれに対応するキーボードやジョイスティック等の操作を登録します。GDScriptで以下の要領で入力を処理できます。
if Input.is_action_pressed("{アクション名}"):
シーンの環境を設定するには
環境光・スカイボックス・ポストエフェクトを使用するには、シーンにWorldEnvironmentノードを追加します。ビューポート左上のPerspectiveメニューのView Environmentをオンにするとビューポートの表示に反映されます。
スカイボックスを設定するには、下記の要領でHDR画像等を設定します。
WorldEnvironmentノードの設定は、Camera3DノードのEnvironmentを設定すると上書きできます。
日本語を表示するには
フォントファイル(.ttf/.otf/.woff)を使用して表示できます。ノードのFontにDynamicFontを設定して開き、Font Dataのところでフォントファイルをロードします。
LineEdit等で日本語フォントを指定すれば日本語入力もできるようです。
動画を再生するには
VideoPlayerコントロールを使用してWebM(.webm)、Ogg Theora(.ogv)の再生ができるようです。HTML5ではパフォーマンスの問題があるとのことです。H.264は2027年まで特許で使えないようです。
マルチプレイヤーの動作チェックについて
(Godot 4)Debug > Run Multiple Instancesを変更すると最大4つまでのインスタンスを同時に実行できます。
ゲームをポーズしたい
Sceneの階層の特定のNodeのみ動作を停止させることができます(Pausing games)。また、InspectorでPauseのModeを設定すると、親のNodeをポーズしても止まらないようにできます。
プロジェクトを整理するには
Project > Tools > Orphan Resource Explorerでリソースの参照数が確認できるので利用できそう?
CIを構築したい
CLIでコマンドラインからエクスポート等ができます。
mkdir builds
godot project.godot --export "Windows Desktop" builds/game.exe
指定したproject.godotのプロジェクトを開き、“Windows Desktop"プリセットでエクスポートします。出力先にフォルダがない場合は作っておく必要があります。
InspectorのTransformがいつも折りたたまれている
Editor SettingsのInterface > Inspector > Disable Foldingをオンにすると常時展開になります。
テクスチャのインポート設定について
こちらのエントリが参考になりそうです。
.s3tcファイルはUnityのDXT1からDXT5に相当?
カメラアングルを簡単に調整するには
ビューポートでマウスの右ボタンを押しながらWASD/QEキーで視点を調整し、Cameraノードを選択して、ビューポート左上のPerspectiveメニューからAlign Transform with Viewを実行(またはCtrl+Alt+Mキー)すると簡単です。
起動時のGodotロゴを非表示にするには
Project Settings > Application > Boot Splash > Show Imageをオフにします。
プラットフォームの判定をするには
OS.has_feature("Android")
Export(エクスポート)ウィンドウでターゲットごとに有効になっているFeature(機能)を確認できます。
エクスポートサイズを小さくする方法
Export PCK/Zipでzipファイルとして出力して、含まれているファイルおよびファイルサイズを確認すると便利です。
また、エクスポート設定のResourcesタブで使用するシーンだけ選択すると、選択したシーンで使用されているアセットのみパッケージされ省サイズになります。
ウィンドウの背景を透過させるには
(Godot 3)Project SettingsのDisplay > WindowでPer Pixel TransparencyのAllowedとEnabledをオンにして、以下を呼びます。
get_tree().get_root().set_transparent_background(true)
さらにBorderlessをオンにするとウィンドウ枠を消せます。
コンソールウィンドウについて
WindowsでGodot 3のエディタを起動するとコンソールウィンドウが一緒に表示されます。Editor > Editor Settings…のInterface > Editor > Hide Console Windowをオンにすると起動後すぐ閉じるようになります。
macOSではデフォルトでコンソールウィンドウが表示されません。表示するには、GodotをShow Package Contentsで開いてContents/MacOS/Godotを実行します。
Unityのあれはどこにあるの?
Unityからの移行ガイドページがありました。
- GameObjectに相当するものはNodeです。
- Updateに相当するのが_process、FixedUpdateに相当するのが_physics_processです。Project Settings > Physics > CommonのPhysics Ticks Per Secondで物理シミュレーションのフレームレートを設定できます。補間を有効にするにはGodot 3.5以降でPhysics Interpolationを使用します。
- UnityのPrefabの代わりに、GodotではSceneの中にSceneを追加できます。Sceneドックで右クリック > Instantiate Child Sceneです。子シーンのインスタンスに変更を加えるには、子シーンを右クリックしてEditable Childrenをオンにします。ノードを右クリックしてSave Branch as Sceneでツリーからシーンを作れます(Unityのプレハブ化に相当)。
- Unityの[SerializeField]に相当するものは@export(GDScript)または[Export](C#)になります。
- Tweenが標準で組み込まれています(Godot 4.0でTweenを試してみる)。
- DontDestroyOnLoadの代わりに、Project SettingsのAutoLoadタブにSceneまたはスクリプトを登録すると、どのSceneからでもアクセスできます(Singletons)。
- VR機能がエンジン本体に組み込まれています。UnityのXR Interaction Toolkitに相当するGodot XR Toolsアドオンがあります。
- Unityのネイティブプラグインに相当するGDNativeがあります。
- Terrainはありませんが、HeightMap terrain pluginというアドオンがあります(Godot 3系のみ)。
その他のTips
- ノード作成ダイアログのFavoritesのノードはプロジェクトのフォルダに保存されます。.godot/editor/favorites.Nodeファイルです。
- Unityではフォルダ名の後ろに~(チルダ)をつけるとUnityに認識されなくなりますが、Godotではフォルダに.gdignoreを配置すると無視されます。
便利なショートカットキー
- F5(Macではcmd+B)でメインシーンを、F6(Macではcmd+R)で現在のシーンを再生します。F8(Macではcmd+.)で停止します。
- Fキーで選択しているオブジェクトにフォーカスします。ビューポートがSelect Modeになっていて、マウスカーソルがビューポートの中にある必要があります。
- Page Downでオブジェクトを接地させられます(Unreal EngineのEndキーに相当)。
- Ctrl+F1/F2/F3で2D・3D・Script画面を切り替えます。
GDScriptメモ
connectでエラーが出る
Godot 4でSignalsのconnectメソッドが文字列リテラルを使用しないように変更されています。下記の要領で修正します。
(Godot 3)
$Button.connect("pressed", self, "_on_button_pressed")
(Godot 4)
$Button.pressed.connect(_on_button_pressed)
現在時刻を取得するには
Timeシングルトンに時刻関連のAPIがあります。
var time = Time.get_datetime_dict_from_system()
print(time)
print("%04d/%02d/%02d" % [time.year, time.month, time.day])
{ "year": 2022, "month": 11, "day": 15, "weekday": 2, "hour": 1, "minute": 57, "second": 56, "dst": false }
2022/11/15
以下φ(..)メモメモ中