オブジェクト上に貼り付けた Textureへ直接描画することを試してみました。
今回は北村愛実さんの以下のブログを参考にさせて頂きました。
http://nn-hokuson.hatenablog.com/entry/2016/12/08/200133

オブジェクトをキー操作して、オブジェクトが通った座標に指定した色を描画しています。



2つのクラスを作っていますが、Test_Drawが描画に関わ
る部分で、描画するオブジェクトにアタッチしてます。Test_Moveの方は、移動するオブジェクトにアタッチして、移動処理と描画する座標をTest_Drawに送っています。
Unity_Texture_Drawing_Test_02

ここでは、描画のメインパートであるTest_Drawのみソースを張り付けておきます。
(Test_Moveは移動処理や座標変換処理だけで単純です。)


public class Test_Draw_01 : MonoBehaviour {
    private Texture2D drawTexture ;     private Color[] buffer;

// Texture size (pixel) and Object size (pixel)     private const int C_TEXTURE_Z = 500;
    private const int C_OBJECT_X = 50;
    private const int C_OBJECT_Z = 50;
    public void Paint_Line (int point_X, int point_Z) {
        // Copy current pixels of texture to buffer         Texture2D mainTexture = 
(Texture2D) GetComponent<Renderer> ().material.mainTexture;         Color[] pixels = mainTexture.GetPixels();         buffer = new Color[pixels.Length];         pixels.CopyTo (buffer, 0);
        // Change pixel color of drawing area         for(int x = point_X - (C_OBJECT_X/2); 
x < point_X + (C_OBJECT_X/2); x++){             for(int y = point_Z - (C_OBJECT_Z/2); 
y < point_Z + (C_OBJECT_Z/2); y++){                 buffer.SetValue (Color.yellow, x + C_TEXTURE_Z * y);             }         }
        // Update pixels of texture with changed pixels         drawTexture = new Texture2D (mainTexture.width, 
mainTexture.height, TextureFormat.RGBA32, false);         drawTexture.filterMode = FilterMode.Point;         drawTexture.SetPixels (buffer);         drawTexture.Apply();         GetComponent<Renderer> ().material.mainTexture = drawTexture;     } }

Test_Draw内の Textureへ書き込む部分は、以下のような流れになっています。
まず元のTextureの各ドットの色情報を取得して、bufferにコピー。
受け取った移動オブジェクトの位置を中心にオブジェクトのサイズ分の領域にあるピクセルの色情報をbuffer上で直接変更。
(この部分を変更すればどうにでも描画できる。)
そして、最後に色変更をした bufferを実際のTextureに上書き。

上記の buffer上で色情報を直接変更する部分を書き換えて、このメソッドを座標を引数としてコールすれば Texture上で好きなように描画ができるわけです。
お試しあれ。

Texture への描画を試してみた Part 2

Sponsored Link