うにてぃブログ

主にUnityとC#に関する記事を書いていきます

Editor拡張

【Unity】描画しているカメラ一覧を表示する拡張機能

あらまし 開発中にカメラが増えてくると、調べたいオブジェクトがどのカメラに写っているかを調べるときがあり、探すのが面倒だったので作ってみた 実装 SceneView に写ってるこれをそのまんま利用すればできるんじゃないかと思ったので 公式のコードを参考…

【Unity】UnityEditor の List の表示を変更する

Unity で IList (Array や List) を利用すると下図のような Editor UIが表示される これだと途中の要素を消すことができず、配列のサイズを変えたいときにも 数値を入力するのが面倒なので拡張することにした 実装 Inspector で利用することを想定して Seria…

【Unity】Graphic の RaycastTarget が true のオブジェクトを SceneViewに描画する

あらまし UI を作成時に 不要な箇所の Text や Image の raycastTarget が true になってしまっていることがあり raycastTarget が true のオブジェクトが多いとそれだけパフォーマンスに問題が出るので、できるだけ無くしたい 実装後にあとから一つ一つ確認…

【Unity】Hierarchy で GameObject を Duplicate したタイミングで処理を走らせる

あらまし Hierarchy で GameObject を Duplicate (複製) した際に複製した GameObject の Scale が一致しないことがある Duplicate した GameObject の WorldScale が1じゃないときに発生しているような気がするが正しい原因は分からない また複製した GameO…

【Unity】Scene View に 選択してないオブジェクトの Collider を表示する

あらまし Unity で Collider を設定している際に選択しているオブジェクトの Collider しか表示されない 今回はすべて Mesh が見えているが Mesh が無くても Collider をセットすることもあり 個人的には下図のように見えてほしい そのため、選択していない…

【Unity】GUID を変更せずにファイルを置き換える拡張

あらまし Unity で Asset (例えば画像ファイル) を入れ替える際に Finder や Explorer から ドラッグアンドドロップ を行いファイルを入れ替えることがあると思う その際にファイル名が **** 1 になってしまい、前のファイルを消して 再度ファイル名を変更し…

【Unity】Hierarchy Window を拡張する

Hierarchy Window を拡張するには EditorApplication.hierarchyWindowItemOnGUI を利用する 拡張処理を記述しないで、最低限の処理のみだと以下のコードになる using UnityEditor; using UnityEngine; public class HierarchyExtension { [InitializeOnLoadM…

【Unity】UnityEditor で利用できる Field 一覧

Editor拡張作成時に利用できる Field のまとめ 説明が必要そうなものには説明を追記します EditorGUILayout > EditorGUI > GUILayout で無いもの順に記述しています GUILayout GUILayout.FlexibleSpace GUILayout.Space GUILayout.SelectionGrid GUILayout.B…

【Unity】RectTransform の Rect を Scene View に描画する

UI を作成している際に親の RectTransform の Rect を見つつ作業したいが 基本的には選択しているものしか範囲がわからないので UI を作りづらい これの解決方法として、編集する RectTransform 選択時親の Rect を描画することにする RectTransform の Rect…

【Unity】DefaultAsset の Inspector拡張

UnityVersion 2018.4.14f1 DefaultAsset の Inspector 作成 [CustomEditor(typeof(DefaultAsset))] を定義することで DefaultAsset のInspector拡張を行える Unity2017くらいだと Scene ファイルも DefaultAsset 扱いだった記憶があるが、現在では SceneAsse…

【Unity】SerializedProperty を用いたクラス描画手法 ~1~

SerializedProperty の表示 通常 SerializedProperty を利用して Editor の表示を行う場合以下ように記述する。 using UnityEditor; public class SampleEditor : Editor { private SerializedProperty _sampleProp; private void OnEnable() { _sampleProp …

【Unity】Editor の OnInspectorGUI の呼び出しでハマったこと

EditorWindow の拡張を行っている際に ScriptableObject の Editor を取得し、 OnInspectorGUIを呼び出した際に CustomPropertyDrawerと Foldout を利用した際にUIがおかしくなりました 本来であればこう表示されます 原因調査 公式の Editor.cs を読んでい…

【Unity】ProjectWindow を拡張してみる

ProjectWindowにアイコンなどを表示する場合は以下のデリゲートを用いる EditorApplication-projectWindowItemOnGUI - Unity スクリプトリファレンス EditorWindowを継承したくないので、InitializeOnLoadMethodを利用する スクリプト サンプルとしてguidを…

【Unity】Unity デフォルト型の Inspector 拡張

UnityのInspector拡張を行う際にはCustomEditorを利用するが Unityのデフォルト型 (Transform や RectTransform等) の機能を残しつつ拡張する場合は 同じ処理を書く必要が出てくるそのため、以下のようなabstractを作成するといくらか拡張がマシになる using…

【Unity】Unity のツールバーにトグルメニューを追加する

MenuItemを利用してツールバーにメニューを追加するのは簡単だが トグルメニューを追加するためには多少コードを追加する必要がある using UnityEditor; public class ToolBarToggleSample { private const string MENU_PATH = "ToggleSample/ToggleEnable";…

【Unity】Inspector 上のコンポーネント の MenuItem を拡張

画像のようなInspectorのMenuItemの拡張方法を覚えてなかったのでメモがてら記事を書きます。 コンポーネントを指定しての記述 Unityの定義コンポーネントやContextをまとめたい場合などの場合の記述 [MenuItem("CONTEXT/{Component}/{MenuName}")] private …