Unity EditorWindowでPreviewRenderUtilityを使ってみる

みなさんこんばんわ。ちょびえです。今日はUnityのエディタでドハマリしたTipsでも書いておこうかと思います。

PreviewRenderUtilityを使ってメッシュを書いて、マウスイベントを扱ってみよう

UnityのEditorではPreviewRenderUtilityを使うことで任意のカメラ姿勢で描画~テクスチャの取得をすることができます。これを使ってSphereを描画しつつ、ついでにマウスクリックした座標からWorld座標をとってみよう、というのが今回のTipsです。

それでは、さくっとコード行きましょう。

コード

上記ファイルをEditorディレクトリに保存して、メニューのExample/PreviewRenderUtilityを実行すると下記のような画面が表示されるとおもいます。

previewrendererutility

ちゃんとSphereが描画されていますねー。
描画領域をクリックするとWorld座標をログに表示するようにしています。

ドハマリポイント

どうやらPreviewRenderUtilityのカメラの内部サイズ(pixelRect)は1024×1024がデフォルトとなっているようでして、そのままxyの座標系を直したVector3を使ってScreenToWorldPositionを実行してしまうとViewPortで正規化した際にがずれてしまうようです。

やり方はなんでも良いのですが、マウスでクリックした座標をカメラのサイズと合わせることでScreenToWorldPositionで正しいWorld座標が取れるようになります。
最初やったときは意図した値がとれなくて大分はまってしまったので、みなさまの助けになれば。

でわでわ。

Author: chobi_e

課題になりそうなのがあったら広く浅くジャンル問わず解決していくスタイル。最近もっぱらUnity使うので言語はC#メインですが以前はPHP, Go, Cをよく書いていたなんでもやさん。 利用ツール: Unity, Photoshop, ClipStudio, Blender, ZBrush, houdini, AfterEffects, FilterForge, SubstanceDesigner, Illustrator, Maya, Cubaseなどなど