TextureをPNGファイルとして保存する方法

先日、PNGファイルを読み込んでTextureとして使う方法という記事を書きましたが、逆にTextureをPNGファイルとして保存したい場合は、EncodeToPNGを使って次のような感じで実装できるみたいです。

Texture2D texture;
string path = "texture.png";
byte[] bytes = texture.EncodeToPNG();
File.WriteAllBytes(path, bytes);

PNGフォーマット以外にもEXRフォーマット、JPGフォーマット、TGAフォーマットに対応しているそうです。

リンク

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

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

C#でプロパティーを使ったinterfaceの使い方

C#でプロパティーを使ったinterfaceの使い方をよく忘れてしまうので、メモしておこうかなと思います。

使い方は次のような感じです。

インターフェース

public interface IExample
{
  string Name
  {
    get;
    set;
  }
}

使っているところ

using System;

public class Example : IExample
{
  string _name = "";

  public string Name
  {
    get { return _name; }
    set { _name = value; }
  }

  public Example(string name)
  {
    _name = name;
  }
}

public class TestExample
{
  static public void Main ()
  {
    IExample example = new Example("name");

    Console.WriteLine($"example.name = {example.Name}");

    example.Name = "new name";
    Console.WriteLine($"example.name = {example.Name}");
  }
}

実行結果

example.name = name
example.name = new name

何故かよく忘れてしまいます。

リンク

Interface Properties – C# Programming Guide | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/interface-properties

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