この記事でのバージョン
Unity 5.6.0f3
はじめに
今回はタイトル通り、
エディタを実行していない時にSceneView上でクリックした座標を取得する方法のご紹介です!
イメージは以下のような感じ。
GameViewでも同様の事は可能ですが、SceneViewは表示範囲を簡単に変更出来るので、
1画面で収まらない時などに使うと便利です。
ClickPositionOnSceneGetter
早速ですがプログラムは以下の通りです。
このClickPositionOnSceneGetterをGameObjectにアタッチすると、
最初のイメージのようにクリックした座標がログとして出力されるようになります。
プログラムの要点は以下の3点です。
エディタを実行していない時かつSceneView上での処理なので、
OnGUIやUpdateでなく、OnDrawGizmosを使っている点。
エディタが実行されていない時、Input.mousePositionではマウスの位置が取得できないので、
Event.current.mousePositionでマウスの位置を取得している点。
How to get mouseposition in scene view?
SceneView.currentDrawingSceneViewで現在表示されているSceneViewを取得し、
座標を変換している点。
おわりに
これを使えば「シーン上でクリックした所にオブジェクトを配置」なんて事も出来るようになります。
mousePosition.z = 0;
GameObject newObject = Instantiate(Prefab);
newObject.transform.position = mousePosition;
ただし、例の実装のままだと、常に実行され続けるので注意が必要です。
------------追記
Retinaディスプレイだとズレるよようなので、以下のような対応が必要になります。
------------追記おわり