![見出し画像](https://assets.st-note.com/production/uploads/images/145843251/rectangle_large_type_2_c4740a5591205364d077a6ac8eec2989.png?width=800)
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はエディタ上で直接操作するためのものではありません。
(以下略)
Godot Engine 4.3の日本語のドキュメント ImageTexture
以上です~
この記事が気に入ったらサポートをしてみませんか?