オブジェクト指向の原則をGodotに適用する
エンジンは、再利用可能なオブジェクトを作成するための2つの主な方法を提供します: スクリプトとシーンです。これらのどちらも、内部でクラスを技術的に定義していません。
それでも、Godot を使用する多くのベスト プラクティスでは、ゲームを構成するスクリプトやシーンにオブジェクト指向プログラミングの原則を適用します。そのため、それらをクラスとしてどのように考えることができるかを理解することが有用です。
このガイドでは、スクリプトとシーンがエンジンのコアでどのように機能するかを説明します。Godotが内部でどのように機能するかを理解するのに役立ちます。
エンジン内のスクリプトの働き
エンジンは Node のような組み込みクラスを提供します。スクリプトを使用して、それらを拡張して派生型を作成できます。
これらのスクリプトは技術的にはクラスではありません。しかし代わりに、エンジンの組み込みクラスで実行される初期化シーケンスをエンジンに伝えるリソースです。
Godotの内部クラスには、クラスのデータを ClassDB に登録するメソッドがあります。このデータベースは、クラス情報へのランタイムアクセスを提供します。ClassDB には、次のようなクラスに関する情報が含まれています。
プロパティ。
メソッド。
定数。
シグナル。
この ClassDB は、プロパティへのアクセスやメソッドの呼び出しなどの操作を実行するときにオブジェクトがチェックするものです。ClassDB では、データベースのレコードとオブジェクトの基底型のレコードをチェックして、オブジェクトが操作をサポートしているかどうかを確認します。
オブジェクトに Script をアタッチすると、ClassDB から利用できるメソッド、プロパティ、およびシグナルが拡張されます。
注釈
extends キーワードを使用しないスクリプトでも、エンジンの基本クラス RefCounted から暗黙的に継承されます。その結果、コードから extends キーワードを使用せずにスクリプトをインスタンス化できます。ただしこのスクリプトは RefCounted を拡張するため、Node にアタッチすることはできません。
シーン
シーンの動作はクラスと似ているため、シーンをクラスと考えるのも理にかなっています。シーンは、再利用可能で、インスタンス化可能で、継承可能なノードのグループです。シーンを作ることは、ノードを作り``add_child()``を使ってノードを子として追加するようなスクリプトを持つことに似ています。
多くの場合、シーンは、シーン内のノードを使用するスクリプト化されたルートノードとペアになっています。このように、スクリプトは命令型コードによって動作を追加することで、シーンを拡張します。
シーンのコンテンツは、以下を定義するのに役立ちます:
スクリプトで使用可能なノード。
どのように構成されているか。
どのように初期化されるか。
それらが互いにどのようなシグナルで接続されているか。
シーン編成にとって、このようなものが重要なのはなぜでしょうか? なぜなら、シーンのインスタンスがオブジェクトだからです。結果、コードを書くのに適用された多くのオブジェクト指向原理はシーンにも適用されます : 単一責任、カプセル化、その他などです。
シーンは 常にルートノードにアタッチされたスクリプトの拡張 です 。なのでこれはクラスの一部として解釈できます。
このシリーズで説明するテクニックのほとんどは、これに基づいています。