【Unity】オブジェクトにマウスで色を塗る方法「RealTime Painting」

Unity

はじめに

この記事では「RealTime Painting」を使用してオブジェクトに色を塗る方法を紹介します。

 

RealTime Painting

RealTime Painting | Tutorials | Unity Asset Store
Use RealTime Painting from Rodrigo Fernandez to elevate your next project. Find this & more Tutorials and templates on t...

 

公式サイト CodeArtist.mx
https://codeartist.mx/dynamic-texture-painting/

 

公式サイトによると、「RealTime Painting」の使用にはいくつか制限があるようです。

1、3Dモデルにしか使えない
2、メッシュにRender texture を取り付ける必要がある
3、Render texture を映すカメラが必要

 

RealTime Painting でオブジェクトに色を塗る

インポートしたフォルダ内にあるDemoシーンを利用していきます。

RealTime Painting をAsset Storeからインポートすると、Asset/Resourcesフォルダの中にTexturePainter ( Place Me Out of Resources)とTexturePainter-Instancesが生成されます。

TexturePainter ( Place Me Out of Resources)の中にあるMainシーンを開いてください。すると、上のような画面になります。

これを実行すると、クジラに色が塗れると思います。

 

 

設置したオブジェクトに色を塗る方法

設置したCubeに色を塗ってみる

GameObject > 3D Object > Cube で Cube を生成し、Position を (x, y, z) = (0, 0, 0) 付近に持っていきます。

これを実行してもCubeに色を塗ることはできません。

Render Textureを設置する必要があります。

 

Render Texture の設置

Render Textureの置き場所はどこでもいいのですが、今回はAsset/Textureフォルダを作成してください。

次に、Assets > Create > Render Texture を作成し、名前をCube.renderTextureとしてください。

これを_DynamicCanvas/CanvasCamera のCamera コンポーネント内のTarget Texture に入れてください。

 

続いて、Assets > Material フォルダを作成し、フォルダ内で右クリックしてCreate > Material で作成して、Cube.matとします。

Cube.mat をクリックしてInspectorを開き、AlbedoにCube.renderTextureをセットしてください。

このMaterial をCubeオブジェクトにドラッグして取り付けます。

すると、Cubeの側面にクジラの体に書いてある文字と同じものがペイントされたと思います。

これでゲームを実行すると、Cubeに色を塗ることはできるのですが、マウスカーソルと塗られる位置が一致しません。

この原因はおそらくTexture とマウスカーソルの位置が上手く対応していないからだと思います。

 

そもそも、このシーンでは以下のような配置になっています。

 

 

CanvasCamera で映したものをCube のRender Texture に反映させています。

下の動画を見てもらえれば分かりやすいと思います。

 

つまり、CanvasCamera で映っているRender Textureの座標とマウスカーソルとの座標を上手く対応させられれば思い通りの色が塗れると思います。

 

しかしながら、今回は上手くいかなかったので、後日、別の方法を試していこうと思います。

今のところ、他に使えそうなアセットは、ESさんが開発した「Ink Painter」くらいですかね。

Ink Painter | Particles/Effects | Unity Asset Store
Use the Ink Painter tool for your next project. Find this and more particle & effect tools on the Unity Asset Store.

 

 

追記

記事を見た方からアドバイスを頂きましたので追記します!

アドバイスをして頂いた方々、本当にありがとうございます!

In this article, the cube wasn’t painted.
And I found the solution about this issue. So, i want share this with you.
The solution is that Remove [box collider] and Attach [Mesh Collider] because in the TexturePainter.cs, the “HitTestUVPosition()” returns the position on the texure map according to a hit in the mesh collider.

要約: Box collider ではなく、Mesh Collider を使えばよいのでは?

 

まとめ

・RealTime Painting を使えばオブジェクトに色を塗ることは可能だが、Render Textureの座標とマウスカーソルとの座標を上手く対応させることができなかった。

 

忙しい人のためのUnity入門講座へ

タイトルとURLをコピーしました