[Unity]エディターウィンドウ

UnityでRPGを作る場合にマップとかってどうやって作るんだろうと疑問に思った、
内部的なプログラム実装ではなくマップチップを組み合わせるエディタやツールをどうするのかという話です。

そういう専用のシーンを用意してPlayして組み上げていけばいいかなと、
当初は考えていたんですが、Stopした時点でプロパティはリセットされるし、
Play中にInstantiateしたゲームオブジェクトも消えてしまうのは都合が悪い。

もちろんStop前に必ずシリアライズ化する運用などでカバーもできるかもだが、
俺は運用でカバーという言葉を何よりも信用していない。
(運用でカバーの話を掘り下げると時間が足りなくなるので割愛)

アセットツールのProBuilderやProGridは非Play状態で様々な機能を提供しているので
何らかの方法があるんだろうなと調べていたらありました。

エディターウィンドウ」です。

この機能と共に「ExecuteInEditMode」を活用すると上手く行きそう。
(参考記事:スクリプトを Edit モードで実行

マップエディターとしての機能はさておきやりたかった事は実現できそうですが、
ちょいちょい落とし穴があったので備忘録を残しておきます。


Updateの更新が毎フレームではない

シーン内の何かが更新された時にコールされる様です。
具体的にはよくわからないですが、オブジェクトを移動させたりすると呼ばれました。

マウスカーソルに合わせてグリッドにそったキャレットみたいなものを動かしたかったんですが、
Updateでは上手くいかなかった。


Input.mousePositionでマウス座標とれない

Play中はゲームビューを見る事になりますが、Edit中はシーンビューです。

シーンビューの場合は「Event.current.mousePosition」で座標をとるのが正しいらしいです。
(参考記事:SceneView上でクリックした時などのイベントを取得する【Unity】【エディタ拡張】


シーンビューのカメラを使用する

Camera.mainで取得できるカメラはゲームビューで使用されるカメラなので、
シーンビューで使用するカメラはSceneView.currentDrawingSceneView.cameraで取得


ゲームオブジェクトの破棄

オブジェクトの破棄はDestroyではなくDestroyImmediateという地味な違いがある


記事の内容を簡潔にまとめたサンプルを用意しました、よければ参考にしてください。
https://github.com/yametai2kin/demoeditorwindow

投稿者: yametai2kin

在宅勤務か個人アプリ開発者も目指してます。 ゲームプログラマー歴20年の現役です。

コメントを残す