みかんばこ

プログラミングとかその他有益だと思ったことをメモ.主にUnity

Unityでドット絵を描く(1)

Unityでドット絵を描こうと思い立ったので記事に。

参考記事↓
nn-hokuson.hatenablog.com


まずはオブジェクトの作成ということでヒエラルキーに3D ObjectのPlaneを生成
f:id:mikanbox55:20170815163038p:plain

テキトーに作ったmaterialをセットします。

で、アタッチするスクリプトは以下の通り。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class rayTexturePaint : MonoBehaviour {

    Texture2D drawTexture ;
    Color[] buffer;

    private int width=16;
    private int height=24;


    void Start () {
        buffer = new Color[width * height];

        drawTexture = new Texture2D (width, height, TextureFormat.RGBA32, false);
        drawTexture.filterMode = FilterMode.Point;
    }

    public void Draw(Vector2 p){
        Vector2 tmp = new Vector2(p.x*width,p.y*height);
        buffer.SetValue (Color.white, (int)(tmp.x) + (int)(tmp.y )* width );
    }

    void Update () 
    {
        if (Input.GetMouseButton (0)) 
        {
            Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast (ray, out hit, 100.0f)) Draw (hit.textureCoord);

            drawTexture.SetPixels (buffer);
            drawTexture.Apply ();
            GetComponent<Renderer> ().material.mainTexture = drawTexture;
        }
    }
}


参考にした記事では、アタッチしたオブジェクトのマテリアルにセットしたテクスチャ画像を操作していたため、サイズ変更とかアスペクト比が自由に変えられなかったため、
最初に空のオブジェクトを用意して上書きするようにしました。

実行するとこんな感じ
f:id:mikanbox55:20170815163838p:plain

これでとりあえず最低限のお絵描きはできたっぽいので、次は拡大縮小とかの機能をつけたいなと思います。