見出し画像

Godotドキュメント ImageTexture

Godotエンジンのリソースクラス、ImageTextureの公式ドキュメントを読んでお勉強しました。

このページ、これまでにも何度か目にしてましたが、あらためてちゃんと読もうとすると、よく理解できませんでした。

Godotのテクスチャに関する理解が足りてないので、少しお勉強しました。そして改めて読んでみると・・・

↓こういう風に理解しました。くどいくらい肉付けすると多分こんな感じ。

Imageクラスに基づくTexture2D派生クラスです。Imageを画像として表示するには、対応するImageTextureを作成します。ImageTexture. create_from_image()関数を使って、Imageから変換することで生成できます。

まず、Image. load_from_file()関数でImageをロードするといいでしょう。それをImageTexture. create_from_image()関数で変換してImageTextureにします。この方法で画像からテクスチャを得ることができます。Image. load_from_file()関数は、ユーザフォルダ等にある外部画像ファイルを読み込むための関数です。なので、この方法は動的にテクスチャを生成できます。しかもこれは、ちゃんとしてれば、エディタ実行でもビルド実行でも動きます。

警告:
外部ファイルからテクスチャを生成するわけでもない場合、静的にインポートされたテクスチャを@GDScript.load関数でロードするのが無難です。なぜなら、ビルド実行ではImage. load_from_file()関数でうまくロードできないことがあります。もちろんこの方法を使う場合、ImateTextureはもはや関係ありません。Texture2D派生リソースを直接ロードするので。

なぜ、ビルド実行ではImage. load_from_file()関数が動かないのか? これは、画像ファイルというものは一般的に、@GDScript.loadでロードすることを考慮されており、真っ先(原文の"first")に、つまりデフォルト設定で、CompressedTexture2Dとしてインポートされるものだからです。しかしCompressedTexture2DはImage派生ではないので、Image. load_from_file()関数でロードできません。これが理由です。

ちなみに、エディタ上だとうまく動いてしまいます。これは半ば予期せぬ動作です。Godotではロード対象のファイルが、直接読み込めないファイル形式の場合、ctex等のインポート後のファイルに読込先がリダイレクトされます。しかし、元のpngファイル等は、Image. load_from_file()関数にとっては読み込めるファイルです。「インポートされたテクスチャ」にリダイレクトされずに、PNGをImageとして読み込めてしまうわけです。

上記のように警告しましたが、あなたは、Image. load_from_file()関数を使わない状況でも依然として、画像をテクスチャとしてロードするのではなく、ほかのRecourceと同じように画像を画像(Image)としてロードすることを好むかもしれません。その時は、インポート設定を「Image」にして、Imageとしてインポートしてください。これで普通に@GDScript.loadでロードできます。

注意:
一応、インポートされたテクスチャからでも、Texture2D. get_image()関数でImageを取り出すことができます。この関数は、インポート元の本来の画像と同じ内容のImageを返します。

「普段はImageTextureではなく、インポートされたCompressed系Textureを使いましょう」という警告は以上です。ここから本題に戻ります。

ImageTextureはエディタ上で直接操作するためのものではありません。
(以下略)

https://docs.godotengine.org/ja/4.x/classes/class_imagetexture.html#class-imagetexture
Godot Engine 4.3の日本語のドキュメント ImageTexture

以上です~


この記事が気に入ったらサポートをしてみませんか?