11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UnityでTexture2Dに描き込む

Last updated at Posted at 2018-05-24

QIXを作成する過程でTexture2Dに直接ラインを引く、塗り潰すことを検討していました。

実際には採用しなかったのですが、備忘録としてTexture2Dに描き込む方法を残しておきます。

Painter.gif

PaintController.cs
public class PaintController : MonoBehaviour
{

	public Texture2D texture2D; // 描き込み先のTexture
	public GameObject pointer;  // カーソル
	private Brush brush;        // ブラシサイズ、色情報を保持するクラス

	void Start()
	{
		// 初期化処理(Inspectorでpublic変数が紐付けられていない時はタグから取得する)
		if (texture2D == null)
		{
			texture2D = GameObject.FindWithTag("Canvas")
								  .GetComponent<SpriteRenderer>()
								  .sprite
								  .texture;
		}

		if (pointer == null)
		{
			Debug.Log("pointer");
			pointer = GameObject.FindWithTag("Pointer");
		}

		brush = new Brush();
	}

	void Update()
	{
		// マウス座標をワールド座標からスクリーン座標に変換する
		Vector2 mouse = Camera.main.ScreenToWorldPoint(Input.mousePosition);
		pointer.transform.position = new Vector3(
			mouse.x,
			mouse.y,
			this.transform.position.z /* マウスのz座標は-10となってしまうため、
			スクリプトがアタッチされているオブジェクトのz座標で補正する */
		);
      
		// マウスクリック
		if (Input.GetMouseButton(0))
		{
			Draw(Input.mousePosition);
		}
	}

	// 描き込み(Textureに描き込むだけで、元になったpngファイルには反映されない)
	private void Draw(Vector2 position)
	{
		// Textureにピクセルカラーを設定する
		texture2D.SetPixels((int)position.x, (int)position.y,
							brush.blockWidth,
							brush.blockHeight,
							brush.colors);

		// 反映
		texture2D.Apply();
	}

	// ブラシ
	private class Brush
	{
		public int blockWidth = 4;
		public int blockHeight = 4;
		public Color color = Color.gray;
		public Color[] colors;

		public Brush()
		{
			colors = new Color[blockWidth * blockHeight];
			for (int i = 0; i < colors.Length; i++)
			{
				colors[i] = color;
			}
		}
	}
}

描き込み先のTextureはInspector上から以下の変更を加えておく必要があります。(SetPixels関数が失敗する)

  1. Read/Write Enableにチェックを入れる
  2. FormatをDXT1やDXT5など圧縮系から非圧縮系のものに変更する
texture.png

ソースコードはGitHubにアップロードしています。

11
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?