2023年11月30日(現地時間)- 無料オープンソースのゲームエンジン Godot 4.2 がリリースされました。
新機能ハイライト
Godot 4.1リリースからのこの5ヶ月の間に、359人のコントリビューターから1,800以上の改善点が提出され、多くの改良が行われています。次の動画で新機能をざっと確認できます。
2D および 3D 機能
Godot は汎用ゲームエンジンであり、2Dと3Dの両方のゲーム開発を支援することを目的としたさまざまなコンポーネントを備えています。
- 2Dゲーム向けに新たに2つの機能が追加されました。
- レイキャストの接触点から正確な法線を必要とするプロジェクトでは、重心座標を取得する機能が非常に重要になります ( GH-71233 )。さらに、回転と角度を正しく扱うのをサポートするために、2 つの新しいグローバル メソッド
rotate_toward
とangle_difference
が追加されました(GH-80225)。
アニメーション
アニメーションチームはアニメーションシステムの堅牢性を向上させるために尽力しており、今回のリリースにおける彼らの最大の貢献は、AnimationPlayer
とAnimationTree
の両方を内部的に作り直し、それらの実装の一部を新しいAnimationMixer
ノード ( GH-80813 ) に統一したことです。この変更により、2つのノード間の多くの問題や不一致に対処できるようになりました。また、Tokage氏は、新しい決定論的(deterministic)ブレンディングオプションなどのような、いくつかの機能も組み込みました。
Pedro J. Estébanez 氏によってさらなるアニメーション機能が追加されました。この中には、アニメーションをプレビューするためのオニオンスキニングモードが含まれています。オニオンスキニングは、アニメーションの前後のフレームを赤と緑の半透明のオーバーレイとして表示するもので、他のソフトウェアでアニメーターがよく利用する機能です。もともとはPedro氏自身がGodot 3.0に実装したものですが、この機能はGodot 4では問題があり、使えなくなっていました。( GH-80939 )
ナビゲーション
によって、エンジンのナビゲーションシステムに新しい機能が追加されました。中でも最も重要なのは、2D用のナビゲーションのメッシュベイキングで、3Dナビゲーションと同等になりました ( GH-80796 )。物理ボディ、メッシュ インスタンス、プレーン ポリゴン、そしてもちろんタイルマップ も処理できます。 ( GH-82465)
さらに、2Dと3Dの両方のナビゲーションサーバーが、ナビゲーションメッシュ ( GH-79972 ) をベイクするときにマルチスレッドをサポートするようになり、途切れ(stutters)が取り除かれ、パフォーマンスが一段と向上しました。
タイルマップ
最もフィードバックが多い分野のひとつが、タイル/タイルマップ システムとエディターです。そのため、Godot 4.2 では、使いやすさとパフォーマンスの両方を対象として、多くの改良が加えられています。
今回のリリースで最も注目すべきは、タイルやタイルパターンをワールドに配置する際に、反転や回転を可能にする新しいツールです ( GH-80144 )。さらに、シーンタイルの改良、ポリゴン編集、ユーザーを導くさまざまなヒントやTIPSなど多くの改善が行われています。 ( GH-77986、GH-79285、GH-79512、GH-79676、GH-79899、GH- 79904、GH-80754、…)。
レンダリング、パーティクル、シェーダー
レンダリング チーム Bastiaan Olij氏、bitsawer 氏、Clay John氏、Darío Samo氏、Hugo Locurcio氏、Juan Linietsky 氏は、わずか 3 か月という短期間で多くの大きな機能を実装、改善、修正しました。
モバイルデバイスでのパフォーマンス向上を目指し、ラスターバリアを頂点コンポーネントとフラグメントコンポーネントに分割するようになりました( GH-77420 )。ノイズ テクスチャは最適化され ( GH-80407 )、Depth プリパスも最適化されました ( GH-80070 )。また、ShaderRD コンパイルグループのおかげで、シェーダのロード時間とコンパイル時間は改善されているはずです。
このリリースのもう 1 つの主要な最適化は、エンジンがメッシュを保存する方法に対する 2 つの変更によるものです ( GH-81138 )。頂点データのメモリレイアウトにおいて、法線と接線から位置を分離するという異なるアプローチにより、モバイル デバイスでのパフォーマンスが向上し、状況によってはデスクトップでも同様にパフォーマンスが向上します。新しい圧縮オプションは、帯域幅の要件を削減し、帯域幅が制限されたシナリオでパフォーマンスを向上させることができます。
重要なのは、これらの変更は互換性を損なうことなく実装されたことです。エンジンはロード時に古いメッシュを新しい形式に自動的にアップグレードします。[Project > Tools]メニューの新しいツールを使用すると、永続的な変換を実行できます。ただし、これは一方向の変更です。4.2 以降でインポートされたメッシュは Godot の古いバージョンと互換性がなく、4.1.x 以前に戻す場合は再インポートが必要になります。
Compute Shaderには、2つの便利な機能が追加されました。まず、カスタム テクスチャ オブジェクトを作成する機能が新たに追加されました ( GH-79288 )。この compute texture demo を使用して、水のエフェクトを作成することが実際にどのように機能するかを確認できます。そしてもう1つは、Computeシェーダとレンダリングを同期させる必要がある場合のために、レンダースレッド上でコンピュートコードを呼び出すためのAPIセットが追加されました ( GH-79696 )。
ライト、デカール、反射プローブを合わせて204個を超えるとクラッシュする問題が修正されました ( GH-80845 )。この問題は、ユーザーがForward+レンダラーの強さを十分に発揮することを妨げていましたが、現在では、デフォルトの設定で各エンティティタイプを512個まで自由に使用できます(この制限は増やすことができます)。また、内蔵のグロー効果が改善され、Godot 3.x ( Raffaele PiccaのGH-82353 ) の高品質な外観に近いビジュアルになりました。
新機能
Godot 4.2 では、すべてのベンダーの GPU で動作するオープンなアップスケーリング技術である AMD の FSR 2.2 がサポートされました( GH-81197 )。これは、 Darío Samo氏によって可能になりました。彼はまた、スケルトン、ブレンド シェイプ、パーティクル ( GH-80618、GH-80688 ) のモーション ベクトルの必須サポートを実装し、ユーザーを悩ませていた現在の TAA システムの多くの問題を解決しました 。Icterus Games と Todogodot によるこのデモを使用すると、FSR がハードウェアのパフォーマンスにどのような影響を与えるかを確認できます。
Darío 氏はまた、古くて非常に大きく、遅いOIDNノイズ除去に代わる、新しいLightmapperノイズ除去アプローチを実装しました。OIDNはより新しく改良されたバージョンが利用可能ですが、技術的な互換性がないため、残念ながら古いバージョンにとどまっていました。新しいJNLMデノイザーは同様の問題を回避しています。また、コンピュートシェーダー(つまりGPU)を利用するためはるかに高速で、大幅に軽量化されています ( GH-81659 )。
状況によっては画質が低下することもありますが(逆に画質が向上することもあります)、ノイズ除去の時間が大幅に短縮されるため、より高い画質のオプションを使用して全体的な画質を向上させることができます。OIDNを使用したい場合は、外部OIDN実行ファイルを使用するようにエディタを設定することで、GPUノイズ除去をサポートした最新バージョンにアクセスすることができます。(GH-82832 by Pāvels Nadtočajevs).
また、ライトマッピングの品質と一貫性に関する複数のバグ修正も行われました。 ( GH-61910、GH-81545、GH-81872、GH-81951、GH-82068、GH-82533 )。
Forward+とMobileのレンダリング方法について、このリリースでは2D HDRレンダリングが導入され、2Dゲーム向けにグローなどの3Dエフェクトが解禁さ れました ( GH-80215 )。HDR レンダリングを使用すると、パフォーマンスを犠牲にして 2D レンダリングの品質を大幅に向上させることができます。また、Compatibilityレンダラーには、3Dシャドウ ( GH-77496 ) も追加されました。
最後に、macOSとWindows用にANGLEに対応したOpenGLレンダリングドライバが追加されました ( GH-72831 )。ANGLEは、MetalとDirect3D 11の上にあるOpenGLの互換性レイヤーで、これにより、macOSでは非推奨でメンテナンスされていないOpenGLドライバを回避することができ、Windowsでは、いくつかの古い統合チップセットのための同様に時代遅れのOpenGLドライバを回避することができます。これにより、ローエンド デバイスでの Godot ゲームの移植性が向上します。
パーティクル
は、GPUパーティクルのメンテナンス性向上のために内部構造を改善することを目的とした手直しを行いました ( GH-79527 )。その過程で、彼女はまた、VFXアーティストがパーティクルの動きをよりコントロールできるようにするために、あらゆる種類の細かな点を調整しました。
ライフタイムに対する速度の直接アニメーション、発射速度の継承(inherit projectile velocity)、パーティクルの放出(emission)量の変更が可能になりました。これは重要な手直しですが、互換性の破壊を避ける方法で行われたため、現在使用しているすべてのパーティクルエフェクトを問題なく使用し続けることができます。
技術的な面では、、GPUパーティクルとCPUパーティクルの両方が、発光とシミュレーションが終了したときのための専用シグナルを持つようになりました ( HolonProductionのGH-76853、GH-76859 )。これは、正確な操作順序を必要とするアニメーションに非常に役立ちます。
前述の GPU パーティクルの変更は、パーティクルが CPU パーティクルと異なり始めるポイントとなります。つまり、将来的にはより多くの GPU 専用機能が実装され、CPU パーティクルは低コストの簡略化された代替機能として残され、同等の機能は提供されなくなります。GPU パーティクルは、Godot 4 のすべてのレンダリングバックエンドでサポートされています。この移行を支援するために、CPUパーティクルをGPUパーティクルに変換するビルトインツールが用意されました ( Yuri RubinskyによるGH-80779 )。
シェーダー
カスタムノードにドロップダウンリストのプロパティが追加され、ビジュアルシェーダが改善されました ( Yuri RubinskyによるGH-81688 )。また、ベクタータイプの出力ポートがデフォルトで拡張可能になりました( Dennis ManaaによるGH-82088) 。
テキストシェーダでは、均一サンプラ配列に改良が加えられ、フィルタモードなど、より多くのヒントタイプがサポートされました ( Tomasz ChaboraによるGH-79100 )。
コアとシステム
Godot 4.1 で行われたリソースの読み込みとマルチスレッドへの大きな変更に続き、コアチームは今回、より安定性に重点を置いています。コアとシステムでは次のような重要なバグ修正が行われました。
- これには、 クラッシュの原因となった、
ready
の実行中にシーンを変更したりノードの名前を変更したりするときにクラッシュを引き起こす設計上の制限( GH-78988、GH-78706、GH-85280 ) や、ファイルの名前変更や移動に関連するさまざまな問題 ( GH-80503、GH- 81657)への対処が含まれます。後者はシーンファイルの破損にもつながる可能性がありましたが、これはもう発生しないようになっています。また、シーン内のリソースIDが散発的に変更されるケースも解決されました ( GH-65011 )。まだ改善の余地はありますが、これにより、すでに 4.2 よりもバージョン管理が容易になります。
- クラッシュや
slot >= slot_max
を出力ログに出力しまくるという形で現れるかなり悪名高い問題は、Pāvels Nadtočajevs ( GH-85280 )の手によって Godot 4.2 で終焉を迎えました。これはプロジェクトのエクスポート ビルドでのみ発生する非常に厄介なバグで、何らかの形でシーン ツリーの操作に関連していました。
- プロジェクトBugsquadの有力チームであるAThousandShips ( GH-81020、GH-81037 )によって発見され、修正されたバグは、一見些細な使用例において、メモリの異常な使用とパフォーマンスの問題を引き起こしました。多くのプレーン Godot オブジェクトを使用している場合、4.2ではメモリ使用量が顕著に減少するはずです。ATThousandShips によるさらなる改善により、この間違いは将来再発しないことが保証されます。
また、小さいながらも注目すべき機能の追加もこのリリースに含まれています。実行時に、バッファーまたはファイルパスから OGG ファイルをロードできるようになりました ( KS Ernest LeeのGH-78084 )。SVG ファイルについても同様で、バイナリバッファまたは文字列からロードできるようになりました ( Felipe Augusto MarquesによるGH-78248 )。
エディターとユーザビリティ
Godotがリリースされるたびに、ユーザーエクスペリエンスを向上させ、ユーザビリティの問題を修正し、エディタツールをより一般的なニーズに合うように変更し、できるだけ邪魔にならないようにすることを目的とした改良が数多く行わ れています。
コードエディタ
コード エディターは code regions (GDScript 用) をサポートするようになりました。 code regions を使うことで、プログラムの流れに影響を与えることなく、スクリプトを名前付きのブロックに分割し、折りたたんで簡単に移動できるようになります ( Jean-Michel BernardによるGH-74843 )。また、Michałiwańczuk ( GH-44557 ) によるコメント切り替え動作の改善により、コードの一部をコメントアウトするロジックがより予測しやすくなりました。
3D ビューポートとツール
Godot 4.0 では、Ryan Roden-Corrent によって 3D ビューポートにBlender ユーザーなら誰でも使い慣れている便利なホットキーが追加されました。Blender スタイルのトランスフォーム(移動、回転、スケールに G
、R
、S
を使用)は、各操作の数値入力とマウス ラッピングのサポートにより改善されました ( GH-58389、GH-59467 )。これらの操作のホットキーはデフォルトではバインドされていませんので、エディタの設定で設定する必要があることに注意してください。
エンジンのさまざまなボックス形状は、中心点と左右対称のエクステントが定義されているため、長い間、編集方法が制限されていましたが、エディタのビューポート内で各辺を個別に拡張できるようになりました( GH-71092、GH-80278 )。これは、衝突シェイプ、CSG、およびボリュームで構成されたその他すべてのものに適用されます。
3Dビューポートでは、いくつかの補助的な視覚情報が選択されたオブジェクトにのみ表示されるようになり、ごちゃごちゃしなくなりました。 ( GH-75303 )。同時に、デカールやフォグ ボリュームなどの要素には、ビューポートで選択しやすくするためのインジケータが追加されました ( GH-81554 ) た。
ドックとリソースエディタ
氏によってインスペクターとシグナルドックに多くの改善が行われました。コンテキストメニューとタイプやそのプロパティに関するホバー時のドキュメントが改善され ( GH-80411、GH-81092、GH-81221 )、プロパティの説明はテーマエディタでも利用できるようになりました。( Michael AlexsanderのGH-81284 )でも利用できるようになりました。ファイルシステム ドックは、要望の多かった整理機能が追加されています。。さらにLucian氏 ( GH-80440 )により、さまざまなフォルダーに色を割り当てることができるようになり、プロジェクトをより直感的に操作できるようになりました。
インスペクターではいくつかの既存の機能がアップデートされました。リソースをユニークにする際、どのサブリソースをそれに従うべきか、どのサブリソースをそのままにしておくべきかをきめ細かく制御できるようになりました ( Tomasz ChaboraによるGH-77855 )。MewPurPur 氏は、アイコン以外にも、グラデーションリソースエディタをより直感的なものにし、スナップ機能を追加し、UI を改善しました ( GH-71915 ) 。
Yuri Sizov 氏は、テクスチャ領域エディター(Texture Region Editor)のいくつかの厄介な問題を解決し、スタイルボックス(styleboxes)やアトラス(atlases)など、サポートされているすべてのリソースで一貫して動作するようにしました ( GH-80435 ) 。
アセットライブラリ
AssetLib タブに、いくつかの便利な変更が加えられました。。ファイルや 検索結果 からアドオンやアセットをインストールする際に、別のインストールフォルダを指定したり、GitHub が通常生成するアセットアーカイブのルートフォルダをスキップしたりできるようになりました ( GH-81358、GH-81620 by Yuri Sizov )。
検索結果自体も改善され、コンテンツのオーバーフローの問題が解決され、ナビゲーションボタンが調整されました ( Dalton LangのGH-80555 )。
プロジェクトマネージャー
プロジェクト マネージャーは、ユーザーが Godot の利用を開始するときに最初に目にするものであるため、常に改善する必要であると同時に、慎重に扱われる必要がありますが、結果として、キー コントロールの一般的な配置とプロジェクト インポート ワークフローを改善することになりました ( GH-50674、GH-51478 )。これらの変更についてはフィードバックが募集されています。
エディタープラグイン
技術的なニュースとして、プラグインやツールスクリプトに関連するエディタ固有のスクリプティングAPIが、いくつか変更されました。
多くのエディター機能は、EditorInterface
クラスを介して直接的または間接的に公開されます。これは単一のインスタンスとして存在しますが、Godot の以前のバージョンでは、EditorPlugin
またはEditorScript
を介して参照を取得する必要がありました。ツールスクリプトの場合、これはアクセスを得るためにどちらかのクラスの無駄なインスタンスを作成するハックを用いることを意味します。現在は、EditorInterface
はその名前によって直接アクセスできるシングルトンであり、エディターでのみ利用可能です ( Yuri SizovによるGH-75694 )。
そして、そのシングルトンには、2Dと3Dのビューポートへの直接参照を取得する便利なメソッドが追加されました ( GH-68696 )
最後に、エディタプラグインが警告ダイアログをトリガーできるようになり、エディタを閉じるときに未保存の変更についてユーザーに注意を促すようになりました ( Tomasz ChaboraによるGH-67503 )。
GDExtension
GDExtensionシステムは、エンジンにバンドルする必要のない低レベルのエンジン拡張のためのフレームワークを提供します。これは、基本的な機能拡張やサードパーティライブラリとの統合から、追加のスクリプト言語や物理バックエンドの導入まで、さまざまな目的に対応します。基本的にエクステンションは、エンジンモジュールにできることすべてを行うものですが、独立してコンパイルして配布することができます。
そのため、GDExtension チームの目標のひとつは、リリースごとにエクステンションとモジュールの間の同等性を高めることであり、Godot 4.2 も例外ではありません。注目すべき改善点としては、非公開クラス登録( GH-70329 )、によるカスタムCallable
サポート( GH-79005 ) 、インデックス付きプロパティ( GH-79763 )、validate_property()
による高度な登録プロパティ管理( GH- 81261、GH-81515)などがあります。
また、このリリースには、拡張機能の開発ワークフローに対する待望の大幅な改善も含まれています。George Marques氏による初期作業( GH-80188 ) の後、David Snopek氏は、エディタ内でのホットリロード ( GH-80284 ) を実装することができました。以前は、GDExtension ライブラリの変更を反映するにはエディタを再起動する必要がありましたが、現在は更新をその場で処理できるようになりました。この変更により、拡張機能を使ったC++スクリプティングがより現実的なツールになりました。
その他の大きなニュースとして、動的ライブラリを Web プラットフォームにロードできるようになりました。これは、GDExtensions を Web エクスポートで使用できることを意味します ( GH-82633 )。まだいくつかの問題点がありますが、デバッグと解決に関しては順調に作業が進められています。
最後に、拡張機能を使用してスクリプト言語を作成する開発者にとって最も興味深いこととして、APIダンプにオプションで完全なクラス リファレンス ドキュメントを含めることができるようになりました ( Ricardo BuringによるGH-82331 ) 。
GUIとテーマ
TabBar
/TabContainer
の個々のタブがキーボード ナビゲーションや専用のスタイルを含むフォーカスを受け取ることができるようになりました ( GH-79104 )。
ナビゲーションは、すべてのControl
ノードで利用できる新しいメソッドにより、次に有効なフォーカスの近傍をあらゆる方向から見つけることができるようになりました。これは、カスタムの探索ロジック ( ATThousandShipsのGH-76027 ) を実装するときに役立ちます。
Godot 4.0から実験的なものとしてマークされた、GraphEdit
とGraphNode
は、クリーンアップおよび再編成され、ノードの機能がいくつかの異なるタイプに分割されました。これにより、開発者は、ほとんどの事前定義された動作を使用せずに、完全にカスタムのグラフノードを定義できるようになりました。この手直しにより、各グラフノードのタイトルバーもよりカスタマイズできるようになり、作業にもう少し時間がかかるコメントノードが一時的に削除されました。 ( GH-79307、GH-79308、GH-79311 )
また、メインGraphEdit
ノードのツールバーをよりカスタマイズしやすくするために、さらなる変更が加えられました ( GH-81582 )。ユーザーからのすべてのフィードバックが考慮されていることを確認するため、ノードは当面は実験版としてマークされたままになります。
VideoStreamPlayer
ノードに新しいプロパティが追加され、シームレスなループ再生が可能になりました ( GH-77857、GH-77858 by kinami-imai )。また、RichTextLabel
ノードでは、テキスト、パディング、比例サイズ変更、ツールチップの形状を変更しない素早い更新などの画像処理が改善されています ( Pāvels NadtočajevsによるGH-80410 )。
テーマ編集の面では、Tomasz Chabora 氏が内部リソースの編集時にテーマ エディターが折りたたまれる問題を修正しました ( GH-81523 )。このリリースには、カスタムコントロールのスタイリングに関する将来の改良のための内部的な変更も多数含まれています。これらの改善によってもたらされた変更点のうち、すでにユーザーが評価しているものの1つは、エディタテーマを適用したレイアウトがどのように見えるかを2Dビューポートでプレビューできる新しい機能です (GH-81130 by Yuri Sizov)。また、プロジェクトのテーマがエディタに影響する問題も修正されました。
インポートとアセットパイプライン
Godot 4.2 では、アセットインポートプロセスにおける最大のハードルの1つである、インポートタイプを変更するたびにエディタを再起動する必要性が解決されました ( GH-78890 )。インポートタイプの変更は、関連するシーンやリソースが無効化され、適切に更新されることで、その場で反映されるようになりました。
バージョン 4.0 以降、このエンジンにはパワフルなインポートパイプラインが搭載されており、各アセットを Godot の形式に変換する方法を詳細に設定できるようになりました。このリリースでは、高度なインポートオプションダイアログに、より多くのオプションとプレビュー機能が追加されました。Yuri Rubinsky 氏により、非常に便利なアニメーション再生 ( GH-76367 ) がプレビュー ウィンドウに追加、さらに、インポートしたオブジェクトの物理プロパティを上書きしたり、シャドウキャストや可視範囲を設定したりできるようになりました ( GH-77533、GH-78803 )。
GLTF は Godot でサポートされている主要な 3D アセット形式であり、FBX および.blend
ファイルインポートのバックボーンとしても機能します。そのため、インポート チームは、GLTF インポート、さまざまな拡張機能のサポートの改善、および関連するバグの修正に常に多大な注意を払っています。新しくサポートされる GLTF 拡張機能の 1 つは KHR_materials_emissive_strength
です。これは、Blenderの発光乗数(emission multiplier)を表す役割を果たします。Gordon MacPherson 氏は、これをインポートアセット用に実装し、その後 wojtekpil 氏は Godot から GLTF アセットをエクスポートするときにもサポートされるようにしました ( GH-78621、GH-79421 )。
Godot からのメッシュとモデルのエクスポートは、エディターでレベル ジオメトリをブロックしてからモデリング ソフトウェアで強化するなど、一部のワークフローの重要な部分です。そのため、Aaron Franke 氏は、このプロセスにおけるいくつかの問題や矛盾点の解決、および他のアセットパイプラインのバグの修正を行いました。 ( GH-79533、GH-79623、GH-79636、GH-79801 )
インポートプロセスにおけるもうひとつの重要な変更点は、新たに追加された KTX イメージフォーマットのサポートです ( GH-76572 ) 。このタイプのイメージは、GLTF の Basis Universal によく使用されます。
入力
ビューポートのマウス操作について、裏側で多くの作業が行われています。プロジェクトの入力専任メンテナであるMarkus Sauermann 氏は、マウスとフォーカスのイベントが複数のビューポートとウィンドウにわたって予測どおりに動作することを確認するために多くの時間を費やしました ( GH-67791)。これは、すべてのプラットフォームや環境に独自のギミックや妥協点があるため、正しく行うのが非常に難しい領域です。そのため、Markus 氏の大規模な手直しは、Kit Bishop氏 によるフォローアップを受け、最初の実装の不具合が改善されました( GH-84547 )。
Godot 4.2では、ゲームパッドに関する2つの大きな問題の解決も試みられています。まず、ゲームパッドのイベントが2度処理される原因となっていたSteam Inputの問題が修正されました ( GH-76045 )。2 番目の問題は、WASDとSamstick/D-Padで制御されるキャラクターの移動など、複数の入力メソッドが割り当てられたアクションに影響する悪名高いバグに関するものです。 (GH-80859, GH-81170, GH-84685 by Tomasz Chabora).
マルチプレイとネットワーキング
エンジンのハイレベルなマルチプレイヤーシステムに、いくつかの重要な改良が行われました。このMultiplayerSynchronizer
ノードが、オブジェクト全体を同期することなく、(サブ)リソースプロパティ、トランスフォームコンポーネント、およびその他のインデックス付きデータの同期をサポートするようになりました ( GH-79479 )。シーン レプリケーション オプションが合理化および最適化され、対応するエディタのUIがより混乱を招かないようになりました ( GH-81136 )。
このリリースには、以前に 4.0.4 RC1 ブログ投稿で公開されたセキュリティ修正も含まれています。プロジェクトでENetMultiplayerPeer
または 低レベルのENetConnection
を使用している場合、ENet ライブラリの欠陥を利用したサービス拒否攻撃の可能性があります。バージョン 4.0.4、4.1.2、および 4.2 に更新することが強く推奨されています。
移植とプラットフォーム
Godotは、すべての主要なデスクトッププラットフォーム、モバイルプラットフォーム、そしてウェブプラットフォームを含む、移植に関しては一流のサポートをしているとされています。
このサポートには、ホスト環境とのより良い統合が含まれます。今回のリリースでは、Godot の移植の第一人者である Pāvels Nadtočajevs が、、Linux、macOS、Windows 用のネイティブなファイル選択ダイアログを追加し、ゲームやアプリで使い慣れたユーザーインターフェイスを活用できるようにしました ( GH-47499、GH-79574、GH-80104 )。この機能は、macOS上のサンドボックス化されたアプリにとって特に重要です。
オペレーティングシステムとのもう1つの非常に便利なインタラクションは、画像のコピー&ペーストです。Deakcor氏とSetadokalo氏の努力のおかげで、これはすべてのデスクトップ プラットフォーム ( GH-63826、GH-81439 ) に実装されるようになりました。
Android
プラットフォームの統合は、多くの場合、シームレスなエクスペリエンスを実現するために、2つの全く異なるテクノロジーを融合させる妥協策です。Godot の Android プラットフォーム アーキテクチャは現在、そうした妥協の産物であるAndroid Fragmentコンポーネントをベースにしているため、そのプラットフォーム上で動作するGodotアプリケーションに対するコントロールが大幅に制限されています。数ヶ月の間、プロジェクトのリードアンドロイドメンテナであるFredia Huya-Kouadio 氏は、この制限を根本的に解決するためにプラットフォーム統合のリファクタリングに精力的に取り組みました。
新しい Android プラットフォーム アーキテクチャ ( GH-76821によって導入) は、Godotのアプリケーション部分をAndroid Fragmentコンポーネントから切り離し、その過程で、マルチウィンドウのサポートや、Godotアプリやゲームの起動時間の短縮などの新機能を実現しました。この作業の続きとして、Godot Android プラグイン フレームワークも更新されました ( GH-78958、GH-80740、GH-81368 )。
スムーズな移行プロセスを保証するために、これらの変更を必ずテストし、 Android プラットフォームのメンテナーにフィードバックを提供してください。変更点と新しい要件の詳細については、更新されたプラットフォームのドキュメントを参照してください。
Fredia 氏以外のコントリビューターもプラットフォームにいくつかの機能を追加しています。Distantz 氏は、 Android スタイラスの筆圧と傾きのサポートを実装し、Godot 4.0 ( GH-80644 ) で追加された Apple Pencil のサポートを補完しました。また、Andrés Botero 氏( GH-78164 )のおかげで、Android TVにアイコンを表示したり、Android上でアプリをランチャーとして実行したりするオプションも追加されました。
iOS
iOSプラットフォームは、ワンクリックデプロイ ( GH-70662 by Pāvels Nadtočajevs ) のが追加され、Androidと同等になりました。この機能は、実際のiOSデバイスやエミュレータ上で、使い慣れたエディタ・ツールを自由に使って、プロジェクトを素早くデプロイし、リモートデバッグできることを意味します。
Linux
多くのGodotコントリビューターが様々なLinuxディストリビューションを日常的に使用しているように、Linuxのサポートはオープンソースではごく自然なことです。このエンジンがサポートする、あまり知られていないバリエーションの 1 つにARM プロセッサ用の Linux があります。エンジンはいつでもこのターゲット向けに構築できましたが、ARM 上の Linux 向けの公式ディストリビューションを提供したことはありませんでした。しかし、HP van BraamとRémi Verschelde がビルド ツールチェーン ( GHBC-128、GHBC-131 ) をアップデートしてくれたおかげで、ビルドできるようになりました。
ARMバージョンのエディタ(32ビットと64ビットの両方)へのリンクはリリースページのダウンロードリストにあります。エクスポートテンプレートには、このプラットフォームが自動的に含まれます。これはエンジンの比較的新しいバージョンであるため、何らかの初歩的な問題が発生する可能性があります。実際、Raspberry Pi OS での実行可能ファイルの実行に関する問題はすでに認識されています。これは実験的な機能として扱い、問題が発生した場合は必ず報告するようにしてください。
スクリプティング
GodotにはGDScriptとC#という2つの主要なスクリプト言語があり、それぞれに特別な注意と配慮が必要です。特に C# ユーザーにとって、4.2 でサポートされる新しいプラットフォームは、アップグレードの魅力的な理由となるとされています。
一般的な変更として、スクリプトデバッガーは、実行スタックとブレークポイントを含め、スレッドコードを完全にサポートするようになりました( Juan LinietskyによるGH-76582 ) 。これはGodot 3時代からリクエストされていたもので、Godot 4のマルチスレッドサポートが改善されたことで、ようやく余分なスレッドをデバッグできるようになりました。
C# / .NET
3月にGodot 4.0がリリースされ、.NETプラットフォームの新バージョンでMonoがメインの.NETバックエンドに取って代わりました。これにより、モバイルとウェブへのエクスポートに関して不完全な状態となってしまい、Godot C#/.NETのメンテナーは、新しい.NET 8.0がリリースされるのを待つしかありませんでした。Godot 4.2 は、Android (.NET 7.0+ が必要) と iOS (.NET 8.0 が必要) のエクスポートターゲットを実験的にサポートするようになりました。( GH-73257 , GH-82729)
まだ解決すべき問題や考慮すべき注意点がありますが、すべてが期待通りに動くことを確認するために、公開テストが行われています。当分の間、このサポートは実験的なものにとどまり、ウェブプラットフォームもまだ不足していますが、プロジェクトがiOSやAndroidに配信予定であれば、現状で十分な計画が立てられると考えられています。
C#との統合に関するより一般的な改善点として、Thaddeus Crews氏によるbinding generatorの修正がいくつか行われています。( GH-80628、GH-80630、GH-80631 )言語バインディングは抽象クラスもサポートするようになりました( 398utubzytによるGH-81101 )。また、静的メソッドやreadonly/writeonly(読み取り専用/書き込み専用)プロパティのサポートに貢献したZae Chao氏とwscalf氏の追加により、GDScriptとの相互運用性が向上しました( GH-81783、GH-67304 )。
Raul Santos 氏はエディタ内のビルドパネルの見た目を更新し ( GH-80260 ) 、メインの出力ログやデバッガと機能的に同等にしました。彼はまた、GDExtensionの互換性APIを活用し、C#バインディングが他の貢献者の介入をほとんど受けずに同じ互換性メソッドを含むようにしました ( GH-80527 )。
GDScript
GDScript は変数の型付け(typing)に関して、両方の長所を兼ね備えています。完全にダイナミックにすることもできますが、コードベースに徐々に厳密な型を導入していくこともできます。これは、イテレーションのスピードや、プロトタイプを具体的なプロジェクトにする上で重要です。
今回のリリースでは、静的型付けされたコードに大きな影響を与えるいくつかの機能が追加さ れました。その中でも主なものは、型付けされていないコードのすべてのケースを報告する新しい警告で、コードベースが厳密で一貫していることを確認することができます ( Ryan BrueによるGH-81355 )。この警告を出さないようにするために、for
ループが静的型付けをサポートするようになりました ( GH-80247 )。スコープ付き定数(preload
されたスクリプトやメソッドブロック内のenumなど)を型ヒントとして使うこともできます( GH-80964 )。
型付けの改良に加えて、Danil Alexeev氏が新たに追加した機能には、raw string literalsや r-strings( GH-74995 )、返り値の型の共変性とパラメータの型の反変性が含まれます。同時に、George Marques氏はより高度なmatchステートメント
のパターンガードを実装し ( GH-80085 )、演算子呼び出しの最適化も行いました ( GH-79990 )。
通常のコメントや文書コメントもアップグレードされています。特別なTODOマーカー ( TODO
、FIXME
など) がコードエディターでハイライトされるようになり、より注意を引くようになりました ( GH-79761 )。さらにエディタ設定でキーワードと色を設定できるようになりました。ドキュメントのコメントで、@deprecated
タグと@experimental
タグがサポートされ、生成されるドキュメントでクラスメンバーを適切にマークできるようになりました ( GH-78941 )。ドキュメント生成自体も改善されました ( GH-80745 )。
Ryan Brue 氏による言語サーバーへの貢献により、ホバーされたシンボルの解決が改善され、リネームに関する様々なバグが修正され、参照ルックアップが実装されました ( GH-80973 )。これらの変更により、外部エディタを使用したGDScriptでのコーディングが大幅に改善されるはずです。また、新しいコマンドライン引数 。--lsp-port
が追加されました。これは、LSPプラグインの作者がGodot 3.xと4.xの両方、および複数のエディタインスタンスをサポートするのに便利です ( GH-81844 )。
XR
Godot の XR メンテナである Bastiaan Olij 氏が最近、XR の新機能と今後の予定についての進捗レポートを公開しました。
Bastiaan 氏自身によって実装された変更点のハイライトには、Godot 3.x から移植された foveated レンダリングのサポート ( GH-80881 ) や、ローハンドトラッキング・データへのアクセス ( GH-78032 ) などがあります。それに加えて、Migeranのkonczgにより、OpenXR モジュールが GDExtension API から拡張されインタラクティブに利用できるようになりました ( GH-68259 )
重要で破壊的な変更
この規模のプロジェクトでは、以前のリリースとの互換性に影響するいくつかの変更を実施せずに進めることは不可能ですが、ほとんどのユーザーにとって移行プロセスはスムーズに行われると考えられています。
アップグレードを検討する際に注意が必要な変更点は以下の通りです。
- 新しい
AnimationMixer
がAnimationPlayer
とAnimationTree
の中間クラスとして追加されました( GH-80813 )。- これにより、両方の既存ノードの機能と動作が同じになります。ほとんどの場合、この変更は既存のプロジェクトには影響しませんが、元の実装にはさまざまな問題があるため、トラックのキャプチャ更新モードは利用できなくなりました。Godotの将来のバージョンでこの機能または類似の機能が提供される予定ですが、今のところはTweensを使ってこの制限を回避する必要があります。
GraphEdit
ノードとGraphNode
ノードは複数の名前変更、コメントノードの一時的な削除、GraphElement
( GH-79307、GH-79308、GH-79311、GH-81582 ) の導入によって作り直されました。- 当面の間、これらのノードはユーザーからのさらなるフィードバックを収集するために実験版としてマークされたままになります。
- GLTF インポーター ( GH-80270、GH-81264 ) のいくつかの変更により、インポートされたシーン内のノードの名前が Godot 4.1 以前とわずかに異なる場合があります。
- 既存のインポートされたシーンは、アップグレードして再インポートするまで、ノード名がそのままの互換モードで残ります。
- エンジンがメッシュを内部的に保存する方法に変更が加えられ、ローエンドデバイスでのパフォーマンスと帯域幅の利用が改善されました ( GH-81138 )。
- これは、次のようなシステムを用いて行われます – Godot 4.1 以前の既存のメッシュは、その場でロードされ、変換されます。[Project] > [Tools]メニューには、プロジェクト内のすべてのメッシュの永続的な変換を 1 回だけ実行する新しいメッシュ サーフェスのアップグレードツールもあります。これを実行することをお勧めします。新しい形式にアップグレードすると、メッシュは 4.2 より前のリリースと互換性がなくなります。
- ラスター バリアを頂点コンポーネントとフラグメントコンポーネントに分割する最適化により、関連する列挙(enumerations)が変更されました ( GH-77420 )。
- 特定の数値に依存してどこかに保存しているのでない限り、これがプロジェクトに影響を与える可能性はほとんどありません。
change_scene_to_*
メソッドの内部的な手直しにより、 Godot 4.1 ( GH-78988 ) と比較して動作が変更されました。- 以前はトランジションは現在のフレームの最後に発生していましたが、Godot 4.2 以降では、現在のシーンがツリーから即座に削除されます。これは、ツリー内に
current_scene
が存在しない短い期間があることを意味するため、それを考慮してスクリプトを調整する必要がある場合があります。詳細については、更新されたドキュメントを参照してください。
- 以前はトランジションは現在のフレームの最後に発生していましたが、Godot 4.2 以降では、現在のシーンがツリーから即座に削除されます。これは、ツリー内に
- オーディオ バスの名前を変更しても、
AudioServer
のbus_layout_changed
信号は出力されなくなります。代わりに新しいbus_renamed
信号を使用できます ( GH-81641 )。 - Android パッケージ名のデフォルトのベース部分が
org.godotengine
からcom.example
に変更されました。( GH-80761 ) - 以前は使用されていなかった
NOTIFICATION_NODE_RECACHE_REQUESTED
という通知がエンジンから完全に削除されました ( GH-84419 )。
アップグレード プロセスを支援するために、Godot の貢献者は4.2 の移行ガイドの作成にも取り組んでいます。これは最新のドキュメントで、注意を払うべき箇所が特定され次第更新されます。不足している手順をバグトラッカーに報告することもできます。
既知の問題について
リリースのたびに、時間内に解決できなかった問題があります。これらの問題は特定されており、現在修正作業が進められているものもあれば、誰かがその問題に遭遇するまで不明なままのものもあります。bug tracker をたどれば、遭遇している問題が報告されているかどうかを知ることができます。新しい報告や既存の報告の確認は、特定の問題の修正に優先順位をつけるのに役立つので歓迎されます。
開発をサポート
次のリンクからエンジンの開発をサポートすることができます。
金銭的な支援以外にも、質の高いバグレポートの作成、コードベースへの貢献、ドキュメントの作成、チュートリアルの作成(ドキュメントや自分のスペースで)、さまざまなコミュニティプラットフォームで質問に答えたり役立つヒントを提供したりすることもサポートにつながります。
ダウンロード
Godot Engine 4.2 安定版のダウンロードはこちらから
コメント