[Unity] 動的にテクスチャにお絵かきする

お絵かき機能のあるゲームを作成する必要があったので調べました。

こちらが非常にわかりやすいですが少々バグとUnityのアップデートがあったので方法をメモします。

Unityでテクスチャにお絵描きしよう – おもちゃラボ http://nn-hokuson.hatenablog.com/entry/2016/12/08/200133

 

まず、Cubeオブジェクトを配置し、カメラに写るようにします。

Cubeオブジェクトの名前を「cube_draw」とし、インスペクタからBoxColliderをRemoveComponentし、新たにMeshColliderを追加します。これは後ほど登場するRayHitからUV値を取得するtextureCoordがBoxColliderだと常に(0,0)になってしまうのを防ぐためです。

続いてテキトーな画像を1つ用意し、テクスチャとしてCubeに貼り付けます。この時、「Advanced」->「Read/Write Enabled」にチェックをいれます。

最後に適当なMonoBehaviourに以下のようなコードを書きます。

コードの解説としては、MainCameraのScreenPointToRayメソッドによってカメラから擬似的な光線を照射し、ヒットしたオブジェクトを返します。その後、textureCoordによってヒットした場所のテクスチャUV値を取得します。最後にその部分周辺のピクセル値を書き換えることでお絵かきを実現できます。