スクリプトで Image に Texture2D を設定する方法メモ。
一番簡単なのは直接設定。
1 2 |
Image img = GameObject.Find("XXX/YYY/Image").GetComponent<Image>(); img.material.mainTexture = tex2d; |
これで問題ないはずだけど、何故かSpriteを設定していないImageのテクスチャが全て変更されました(Version Unity5.5.0f3)。
追記:これはデフォルトマテリアルを操作してしまうようです(コメント参照)
原因を探るのも面倒なのでちょっと変更してスプライトを変更するようにする。
1 |
img.sprite = Sprite.Create(tex2d, new Rect(0,0,tex2d.width,tex2d.height), Vector2.zero); |
これで意図通りに変更できた。
>何故かSpriteを設定していないImageのテクスチャが全て変更されました
こちらの記事にお世話になったついでに、
原因について大まかな補足です(動作検証:Unity2019.2.0f1)
ImageのSource ImageとMaterial 両方ともNoneにしても
内部的には「Default UI Material」というものを参照しているようです。
この汎用マテリアルを編集してしまうので、上記の現象が起きるのかと。
普通にバグ要因なので、Sprite作成する方針は完全に正しいやつですね。
なるほど、それを変更してしまうのはまずいですね。
material.mainTextureをいじるのはスクリプトでマテリアルを作ったり特定のマテリアルそのものを変更するときなんかに使うのがよさそうですね。
ありがとうございます。