コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】エディタ拡張で async / await を使用する

概要 using System.Threading.Tasks; using UnityEditor; using UnityEngine; public class Example { [MenuItem( "Tools/Run" )] private static void Run() { RunAsync(); } private static async void RunAsync() { var count = 10; for ( int i = 0; i <…

【Unity】エディタ拡張で Windows のメッセージボックスを表示する方法

概要 C:\Windows\Microsoft.NET\Framework64\vX.X フォルダ内の System.Windows.Forms.dll を Unity プロジェクトの Editor フォルダに追加して using System.Windows.Forms; using UnityEngine; public static class Example { [UnityEditor.MenuItem( "Too…

【Unity】ダミーテクスチャを作成するエディタ拡張

概要

【Unity】アセットパスと GUID の変換ができるエディタ拡張

概要

【Unity】指定した EditorWindow が開いているかどうかエディタ拡張で確認する方法

概要 using UnityEditor; using UnityEngine; public static class Example { [MenuItem( "Tools/Hoge" )] public static void Hoge() { var assembly = typeof( EditorApplication ).Assembly; var windowTypeName = "UnityEditor.InspectorWindow"; var wi…

【Unity】エディタ拡張で Profiler の情報を読み込む方法

概要 using UnityEditor; using UnityEditorInternal; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { ProfilerDriver.LoadProfile( "test.data", keepExistingData: true ); } } 現在 Profiler に表示されている…

【Unity】エディタ拡張で Profiler の情報を保存する方法

概要 using UnityEditor; using UnityEditorInternal; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { ProfilerDriver.SaveProfile( "test.data" ); } } 保存したファイルは Profiler の Load から読み込める

【Unity】Profiler の Deep Profile の ON / OFF をエディタ拡張で変更する方法

概要 using UnityEditor; using UnityEditorInternal; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { ProfilerDriver.deepProfiling = !ProfilerDriver.deepProfiling; } }

【Unity】Unity プロジェクトから指定した型のアセットをすべて取得するエディタ拡張

ソースコード 使用例 foreach ( var n in AssetDatabaseUtils.FindAssets<Texture>() ) { Debug.Log( n.name ); }</texture>

【Unity】Unity プロジェクトから指定した型のアセットを1つ取得するエディタ拡張

ソースコード 使用例 Debug.Log( AssetDatabaseUtils.FindAsset<Texture>().name );</texture>

【Unity】AnimationClip のすべての AnimationCurve の TangentMode を変更するエディタ拡張

ソースコード

【Unity】Unity プロジェクトの初回起動時かどうかを確認するクラス

ソースコード 使用例 using UnityEditor; using UnityEngine; [InitializeOnLoad] public static class Example { private static readonly EditorFirstBootChecker CHECKER = new EditorFirstBootChecker( "Hoge" ); static Example() { if ( CHECKER.IsFir…

【Unity】EditorUtility.ClearProgressBar の呼び出し漏れを防ぐためのクラス

ソースコード 使用例 using System.Collections; using Unity.EditorCoroutines.Editor; using UnityEditor; using UnityEngine; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { EditorCoroutineUtility.StartCoro…

【Unity】特定のプラットフォームではない場合にエラーログを出力するエディタ拡張

ソースコード using UnityEditor; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { if ( EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android ) return; Debug.LogError( "Android に Switch Platf…

【Unity】Unity プロジェクトの初回起動時にのみ何かをするエディタ拡張

概要 using System.IO; using UnityEditor; using UnityEngine; [InitializeOnLoad] public static class Example { private const string PATH = "Library/Example"; static Example() { if ( File.Exists( PATH ) ) { Debug.Log( "2回目以降の起動" ); ret…

【Unity】テスト用のシーンは Scenes In Build のリストの末尾に追加されるようにするエディタ拡張

概要 using System.Linq; using UnityEditor; [InitializeOnLoad] public static class Example { static Example() { EditorBuildSettings.sceneListChanged += OnChanged; } private static void OnChanged() { var scenes = EditorBuildSettings.scenes; …

【Unity】間違って Switch Platform してしまうことを防ぐエディタ拡張

概要 using UnityEditor; [InitializeOnLoad] public static class Example { private const BuildTargetGroup DEFAULT_BUILD_TARGET_GROUP = BuildTargetGroup.Standalone; static Example() { EditorApplication.update += OnUpdate; } private static voi…

【Unity】ゲームオブジェクトがどのプレハブから生成されたインスタンスかエディタ拡張で確認する方法

概要 using UnityEditor; using UnityEngine; public class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var go = GameObject.Find( "Cube" ); var path = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot( go ); Debug.Log…

【Unity】同じコンポーネントがアタッチされているゲームオブジェクトを検索するエディタ拡張

ソースコード using UnityEditor; public class Example { [MenuItem( "CONTEXT/Component/Find Component" )] private static void FindComponent( MenuCommand command ) { var type = command.context.GetType(); SceneModeUtility.SearchForType( type )…

【Unity】現在 Inspector に表示しているオブジェクトを Hierarchy や Project ビューで選択するエディタ拡張

ソースコード 使用例 Hierarchy や Project ビューに大量のオブジェクトやアセットが存在し、 現在 Inspector に表示しているオブジェクト/アセットがどこにあるのか すぐに知りたい時があったため作成しました

【Unity】プレハブモードを開始した、終了した、保存した時に呼び出されるイベント

概要 using UnityEditor; using UnityEditor.Experimental.SceneManagement; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { PrefabStage.prefabSaved += OnPrefabSaved; PrefabStage.prefabSaving += OnPrefabSa…

【Unity】Unity 2019.3 新機能 - プレハブモードの dirty フラグが立った時に呼び出されるコールバック

概要 using UnityEditor; using UnityEditor.Experimental.SceneManagement; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { PrefabStage.prefabStageDirtied += OnPrefabStageDirtied; } private static void On…

【Unity】Unity 2019.3 新機能 - シーンの dirty フラグが立った時に呼び出されるコールバック

概要 using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine; using UnityEngine.SceneManagement; [InitializeOnLoad] public static class Example { static Example() { EditorSceneManager.sceneDirtied += OnSceneDirtied; } priva…

【Unity】BuildTarget を BuildTargetGroup に変換する拡張メソッド

ソースコード using UnityEditor; public static class BuildTargetExt { public static BuildTargetGroup ToBuildTargetGroup( this BuildTarget self ) { switch ( self ) { case BuildTarget.StandaloneOSX: case BuildTarget.StandaloneWindows: case Bu…

【Unity】エディタで使用するツール時が変更された時に呼び出されるイベント

概要 エディタで使用するツール時が変更されると using UnityEditor; using UnityEditor.EditorTools; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { EditorTools.activeToolChanged += () => Debug.Log( "chang…

【Unity】プレハブのインスタンスに変更があるかどうかエディタ拡張で確認する方法

概要 using UnityEditor; using UnityEngine; public class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var prefabInstance = GameObject.Find( "Cube" ); var hasOverrides = PrefabUtility.HasPrefabInstanceAnyOverrides ( inst…

【Unity】Build Settings や Project Settings でアクティブではないプラットフォームが選択されている時はビルドをキャンセルするエディタ拡張

ソースコード using UnityEditor; [InitializeOnLoad] public static class Example { private const string TITLE = "ビルド キャンセル"; private const string MESSAGE = @"Build Settings や Project Settings で {0} プラットフォームが選択されていた…

【Unity】特定のフォルダ内のアセットを編集して保存できないようにするエディタ拡張

概要 例えば上記のスクリプトを Unity プロジェクトの Editor フォルダに追加すると Assets/Folder1 Assets/Folder2 これらのフォルダ以下に存在するアセットは編集して保存できないようになります

【Unity】特定のフォルダ内のアセットが他のフォルダに移動しないようにするエディタ拡張

概要 例えば上記のスクリプトを Unity プロジェクトの Editor フォルダに追加すると 「@Project」フォルダ内のアセットを「@Project」フォルダ外に移動したり、 「@Project」フォルダ外のアセットを「@Project」フォルダ内に移動したりできなくなります

【Unity】Hierarchy を右クリックした時に表示されるメニューをカスタマイズできるエディタ拡張「Unity Hierarchy Menu Customizer」を GitHub に公開しました

はじめに Hierarchy を右クリックした時に表示されるメニューをカスタマイズできるエディタ拡張 「Unity Hierarchy Menu Customizer」を GitHub に公開しました 使用例 インストール "com.baba_s.unity-hierarchy-menu-customizer": "https://github.com/bab…