Open1

Godotの記事にしたいめも

ふぉるたふぉるた

GodotEngine バージョン4の概要メモを書きました。
GodotEngine以外のゲームエンジンを触ったことがある人向けの想定です。
良いところと悪いところを書いています。
このメモからチュートリアル記事のような何かを作る予定です。

ゲーム内(ゲーム実行中)のしくみ

  • シーンツリー SceneTree
    1つのみあるゲームのメインループです。
    シーンツリーにはノードがぶらさがっています。
  • ノード Node
    • 組み込みNode
      • GodotEngineで用意されているNodeです。
      • C++でGodotのエンジン機能へアクセスしています。
      • 様々なタイミングで発行されるシグナルがあります。
    • カスタムノード
      • 組み込みのNodeに自分でスクリプト拡張してつくるカスタムノード
      • ノードにアタッチできるスクリプトは1つです。
      • スクリプトからシグナルを発行・監視できます。
    • スクリプト
      • スクリプトは、GDScriptとGDExtention、C#があります。
        • GDScript
          • Godotを操作するための言語です。
            • なんらかのプログラムの経験があれば、すぐ使えるぐらいのとっつきやすさです。
            • GDScriptはGodotユーザーのメイン言語です。
              • Unityの(故)UnityScriptとは立ち位置が違います。
          • Pythonのように、インデントです。
            • Pythonとは関係なく、互換性もありません。構文が似てるだけです。
          • 動的型ですが、型をつけることもできます。
            • Godot4では型をつけると大きく速度上昇するようになりました。
            • 複雑な条件下だと自動補完が効かないこともあります。
              • アップデートで直ったりもする、がんばって!
          • Godot3からGodot4になり、GDScriptが大きく変わって、かなり使いやすくなりました。
            • シグナルが型になった
            • 文字列指定の引数の関数がなくなった
            • yieldがawaitになった(これは賛否ある)
            • 関数が第一級オブジェクトになった、無名関数もできるようになった
            • いまからGodot3のGDScript触るのはきびし~~。
          • interfaceやabstruct、traitがありませんが、相当のなにかを現在検討中のようです。
            • とても欲しい!たのみます!
        • GDExtentionという仕組みを使えば、他の言語も使用できます。
          • C++が公式です。
            • とても速い。
            • C++はエンジンでも使われているので、エンジン機能へアクセスできます。
          • GDExtentionはGodot4からの仕組みなので非公式言語は作成中のものが多いです。
            • Godot3ではGDNativeという仕組みでした。(GDExtentionに置き換え)
          • 使用できる言語
            • C++(Godot公式)
            • Rust(非公式)
            • その他(非公式、いろいろ)
        • C#はC#対応版のエディタでのみ使用できる公式言語です。
          • .NET6か7
          • Godot公式としての優先はGDScriptなので不安定なところもあります。
          • 実行速度はGDScript以上、C++以下と言われています。
          • 開発速度、快適さはGDScriptにかなり劣ります。(個人的な意見!)
          • C#対応版のエディタでは、GDScriptも使用できます。
          • C#の資産を使用できるのでツール系アプリでは便利!
          • Unityの資産流用は……どうでしょうね?(個人的にはいまいちかな?)
          • デコンパイルすると全部丸見えなのなんとかしてほしい
            • 関数名とC#メソッド名で紐づけてるみたいなので難読化もしにくいし~
  • シグナル
    • ノード間でメッセージを受け渡すしくみです。
    • データ付きシグナル、データのないシグナルがあります。
    • 組み込みノードでは、様々なタイミングで発行されます。
    • スクリプトから以下のことができます。
      • シグナルが発行されたときに実行される関数をセットする(connect)
      • シグナルの定義
      • シグナルを発行する。(emit)
  • リソース
    • スクリプトや画像音楽3Dモデルなどのバイナリはリソースとして扱います
    • ゲームをエクスポートすると、リソースはパックされて内蔵されます。
  • DisplayServer, PhysicsServer、RenderingServer、ResourceLoader、TextServerなど
    • Godotのエンジン機能に直接アクセスできるシングルトンです。
    • GDScriptからアクセスできる関数も用意されています。
    • C++からだとさらに深くアクセスできます。
    • 大量のオブジェクトなど、Nodeだとパフォーマンスが落ちる場合に有効です。
      • Nodeの機能を使わずに直接描画・物理を操作できます。

ゲーム外(ゲーム制作中)のしくみ

  • エディタ
    • エディタはGodotでできています。
    • スクリプトをエディタ上で動かすことができます。
      • 大量のリソースをGDScriptのバッチで作成したりできて便利!
      • エディタ上で動くアドオンをとても簡単につくることができます。
        • GDScript、GDExtenstionが使用できます。
        • C#はC#対応版エディタのみで使用できます。
        • アドオン沼 たのしい
  • リソース
    • リソースは、テキスト方式でエディタで保存読み込みされます。
    • 保存、読み込み、実行時にバイナリに変換され、ゲーム内で読み込み・使用されます。
  • シーン
    • エディタで作って保存したシーンは、PackedSceneというリソースファイルで保存されます。