まとめ/Tips
知っておくと少し幸せになる最低限のエディタ拡張 | テラシュールブログ
エディター拡張チートシート | Unity でコードから GUI を作る (kumaS)
見た目を整える | Unity でコードから GUI を作る (kumaS)
エディタ拡張で使用できるコールバックを40個まとめて紹介 | コガネブログ
アンドゥを実装する (Undo)
エディター拡張を使った処理にアンドゥを実装するには、処理の前後にメソッドを追加する。
- 処理の前に、
Undo.RecordObject
メソッドを呼び出す。 - 処理の後に、
EditorUtility.SetDirty
メソッドを呼び出す。
使用例
[CustomEditor(typeof(Example))]
public class ExampleEditor : Editor
{
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
if (GUILayout.Button("Do Something"))
{
Undo.RecordObject(target, "Do Something");
// Do something here
EditorUtility.SetDirty(target);
}
}
}
Code language: C# (cs)
ドキュメント:
UnityEditor.Undo | Unity スクリプトリファレンス [公式]
EditorUtility.SetDirty | Unity スクリプトリファレンス [公式]
Undo.SetCurrentGroupName | Unity スクリプトリファレンス [公式]
Undo.CollapseUndoOperations | Unity スクリプトリファレンス [公式]
参考:
Inspector 拡張でスクリプトから変更した値がちゃんと保存されるようにする – Qiita
エディタ拡張でオブジェクトを生成した場合にシーンを保存する方法 | kan のメモ帳
エディタからシリアライズされたフィールドの値を更新する方法まとめ | LIGHT11
Unity でエディタ拡張を作るときの Undo、Redo の落とし穴 | hildsoft のコード置き場
How to Undo a lot of created objects at once? – Unity Answers
Rename Undo step after CollapseUndoOperations – Unity Forum
How to make undo work over multiple frames – Unity Forum
拡張エディタのシーンビュー操作で Ctrl + Z を有効にする – teratail
シーンビューに UI を追加する
ドキュメント:
SceneView.duringSceneGui | Unity スクリプトリファレンス [公式]
参考:
Scene ビューに UI レイヤーの表示の ON/OFF を切り替えるボタンを追加するエディタ拡張 | コガネブログ
SceneView 拡張 それっぽいツールバー作成 | GREZZO 技術ブログ
Unity エディタ拡張でシーンビュー上に GameObject 生成ボタン UI を作る | RYO620 DESIGN & DEVELOPMENT
設定に項目を追加する
ドキュメント:
UnityEditor.SettingsProvider | Unity スクリプトリファレンス [公式]
SettingsScope | Unity スクリプトリファレンス [公式]
参考:
Preferences や Project Settings に独自の項目を追加する | LIGHT11
Preference や Project Settings に メニューを追加する | うにてぃブログ
PreferenceItem is deprecated. Use SettingsProvider instead – Unity Forum
エディターで Update を実行する
ドキュメント:
EditorApplication.QueuePlayerLoopUpdate | Unity スクリプトリファレンス [公式]
MonoBehaviour.runInEditMode | Unity スクリプトリファレンス [公式]
EditorWindow.autoRepaintOnSceneChange | Unity スクリプトリファレンス [公式]
EditorApplication.update | Unity スクリプトリファレンス [公式]
起動時エディタースクリプト実行 (InitializeOnLoad) | Unity マニュアル [公式]
コード:
EditorUpdate.cs – An Editor-Side Update() Equivalent (nomnomab) – GitHub Gist
参考:
Unity Editor 上で GameObject を Update させる方法 – Qiita
エディットモード中に実行せずに一定時間おきに更新処理を行う方法 – Qiita
Unity Editor の Game View が更新されない時の対処方法 | 太郎Work
Editor 拡張をしたが描画が更新されない時 | Blue_Breath_Blog
How to force update in edit mode – Unity Forum
The best way to trigger Update() in Editor Mode? – Unity Answers
How do I get a callback every frame in Edit Mode – Unity Answers
Update() only in Edit Mode – Unity Answers
constant rendering update in Edit Mode? – Unity Forum
アニメーターを再生する
参考:
Editor Mode で Animator を動かす | うにてぃブログ
エディター環境のみでコードを実行する
エディター環境でのみコードをコンパイルして実行させるには、該当する範囲を UNITY_EDITOR
マクロを使用して #ifdef
/ #endif
ディレクティブで囲う。
#idef UNITY_EDITOR
// code here only for editor
#endif
Code language: C# (cs)
ドキュメント:
UNITY_EDITOR | Unity 2018.4 マニュアル [公式]
参考:
Update() only in Edit mode – Unity Answers
シーンビューを更新する
SceneView.RepaintAll()
Code language: C# (cs)
ドキュメント:
SceneView.RepaintAll | Unity スクリプトリファレンス [公式]
EditorWindow.autoRepaintOnSceneChange | Unity スクリプトリファレンス [公式]
参考:
Speed of HandleUtility.Repaint and SceneView.Redraw() – Unity Forum
Gizmos only update when I hover over the scene or game view – Stack Overflow
Repaint/Redraw Scene after gameObject instantiation – Stack Overflow
ウィンドウを更新する
ドキュメント:
EditorWindow.Repaint | Unity スクリプトリファレンス [公式]
ゲームビューを更新する
RepaintAllViews
関数を呼び出す。
UnityEditorInternal.InternalEditorUtility.RepaintAllViews()
Code language: C# (cs)
ドキュメント:
EditorApplication.QueuePlayerLoopUpdate | Unity スクリプトリファレンス [公式]
参考:
Game View が更新されない時の対処方法 | 太郎Work
Refreshing the Unity3d GameView Programatically | Coderwall
How to manually update GameView? – Unity Answers
ゲームビューを開く
EditorApplication.ExecuteMenuItem("Window/General/Game");
Code language: C# (cs)
参考:
How can I force the Unity Editor to the Game View – Stack Overflow
UnityExtensions
参考:
Module Manager を使って自作ライブラリを読み込んでみた | けいごのなんとか
onSceneGUIDelegate がエラーになる
Unity 2019 以降では onSceneGUIDelegate
は廃止されたため、代わりに duringSceneGui
イベントを使う。
参考:
Scene ビューにちょっと便利な GUI を表示させよう – Qiita
Unity の Scene View にラベルやボタンを表示する | テラシュールブログ
Scene View 上でクリックした時などのイベントを取得する | kan のメモ帳