Unity」カテゴリーアーカイブ

ゲームエンジン「Unity」に関するカテゴリーです。

PNGファイルを読み込んでTextureとして使う方法

Textureとして使いたい場合

PNGファイルを読み込んでTextureとして使いたい場合は、LoadImageを使って次のような感じで実装できるみたいです。

string path = "texture.png";
byte[] bytes = File.ReadAllBytes(path);
Texture2D texture = new Texture2D(2, 2);
texture.LoadImage(bytes);

Texture2D(2, 2)としていますが、LoadImage実行後にサイズも更新されるそうなので特に気にする必要はなさそうです。

Spriteとして使いたい場合

Spriteとして使いたい場合は

Rect rect = new Rect(0f, 0f, texture.width, texture.height);
Sprite sprite = Sprite.Create(texture, rect, Vector2.zero);

として使えるそうです。

リンク

Unity – Scripting API: ImageConversion.LoadImage
https://docs.unity3d.com/ScriptReference/ImageConversion.LoadImage.html

Unity – Scripting API: Sprite.Create
https://docs.unity3d.com/ScriptReference/Sprite.Create.html

Unity – Scripting API: Windows.File.ReadAllBytes
https://docs.unity3d.com/ScriptReference/Windows.File.ReadAllBytes.html

Shader.Findでエラーが発生してしまう場合

Unity Editor上では問題なく動作しているのに、ビルドしたゲームのShader.Findでエラーとなる場合はAlways Included Shadersを設定するとうまくいく場合があるそうです。

var s = Shader.Find("Custom/Example");
Assert.IsNotNull(s); //error

Always Included Shadersの設定

[Edit] » [Project Settings..]

を実行して、GraphicsタブのBuilt-in shader settingsAlways Included Shadersの項目に使いたいShaderを登録すると良いそうです。

リンク

Unity – Scripting API: Shader.Find
https://docs.unity3d.com/ScriptReference/Shader.Find.html

Tiling/Offset値をスクリプトから設定する方法

MaterialのTexture設定にあるTilingOffsetの値をスクリプトから設定したい場合はSetTextureScaleSetTextureOffsetを使って次のような感じでできるそうです。

Material material;
// Tiling
material.SetTextureScale("_MainTex", new Vector2(1.0f, 2.0f));
// Offset
material.SetTextureOffset("_MainTex", new Vector2(0.5f, 0.5f));

設定値を取得したい場合はGetTextureScaleGetTextureOffsetが使えるみたいです。

リンク

Unity – Scripting API: Material.SetTextureScale
https://docs.unity3d.com/ScriptReference/Material.SetTextureScale.html

Unity – Scripting API: Material.SetTextureOffset
https://docs.unity3d.com/ScriptReference/Material.SetTextureOffset.html