コガネブログ

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

【Unity】変更した GUI.color を簡単に元に戻せるクラス

ソースコード using System; using UnityEngine; public sealed class GUIColorScope : IDisposable { private readonly Color m_oldColor; public GUIColorScope( Color color ) { m_oldColor = GUI.color; GUI.color = color; } public void Dispose() { G…

【Unity】エディタ拡張の OnGUI で表示する項目を無効化する「EditorGUI.DisabledScope」

概要 using UnityEditor; using UnityEngine; public sealed class Example : EditorWindow { [MenuItem( "Tools/Open" )] private static void Open() { GetWindow<Example>(); } private void OnGUI() { GUILayout.Button( "ボタン" ); using ( new EditorGUI.Disab</example>…

【Unity】Project ビューの検索欄に文字列を設定するエディタ拡張

ソースコード using System.Reflection; using UnityEditor; public static class ProjectBrowserInternal { public static void SetSearch( string searchString ) { var assembly = typeof( Editor ).Assembly; var projectBrowserType = assembly.GetType…

【Unity】エディタ拡張からゲームオブジェクトの名前変更モードにするスクリプト

ソースコード using System.Reflection; using UnityEditor; public static class SceneHierarchyInternal { public static void RenameGO() { var assembly = typeof( EditorWindow ).Assembly; var sceneHierarchyWindowType = assembly.GetType( "UnityEd…

【Unity】EditorApplication.LockReloadAssemblies のスコープを管理するクラス

ソースコード using System; using UnityEditor; public sealed class LockReloadAssembliesScope : IDisposable { public LockReloadAssembliesScope() { EditorApplication.LockReloadAssemblies(); } public void Dispose() { EditorApplication.UnlockRe…

【Unity】AssetDatabase.StartAssetEditing のスコープを管理するクラス

ソースコード using System; using UnityEditor; public sealed class AssetEditingScope : IDisposable { public AssetEditingScope() { AssetDatabase.StartAssetEditing(); } public void Dispose() { AssetDatabase.StopAssetEditing(); } }

【Unity】uGUI のオブジェクトを自作のメニューから呼び出すエディタ拡張

概要 using System.Linq; using UnityEditor; using UnityEditor.Presets; using UnityEngine; using UnityEngine.UI; public static class Example { [MenuItem( "GameObject/MyProject/Image", false, 9 )] private static void CreateImage( MenuCommand …

【Unity】ScriptableObject に後から PreferBinarySerialization 属性を付与した時にシリアライズし直すエディタ拡張

ソースコード using System.Linq; using UnityEditor; using UnityEngine; public class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var paths = AssetDatabase .FindAssets( $"t:{nameof( ScriptableObject )}" ) .Select( x => A…

【Unity】変更した SceneSetup を簡単に元に戻せるクラス

ソースコード using System; using UnityEditor.SceneManagement; public sealed class SceneSetupScope : IDisposable { private readonly SceneSetup[] m_oldSetups; public SceneSetupScope() { m_oldSetups = EditorSceneManager.GetSceneManagerSetup()…

【Unity】ファイルを開くアプリケーションを設定できるエディタ拡張「UniOpenAssetCustomizer」を GitHub に公開しました

リポジトリ 使い方 Unity の Preferences の左メニューから「UniOpenAssetCustomizer」を開くことで、 ファイルを開くアプリケーションを拡張子ごとに設定できます 項目 内容 Extension 対象の拡張子(「.」は不要) Application Path ファイルを開くアプリ…

【Unity】コンパイル時間を計測するエディタ拡張「UniCompileTimeMeasurer」を GitHub に公開しました

リポジトリ 使い方 Preferences の「UniCompileTimeMeasurer」の項目を開いて 「Enabled」をオンにすることでコンパイル時間が計測されるようになります 計測されたコンパイル時間は Unity メニューの「Window > UniCompileTimeMeasurer」から確認できます

【Unity】Console ウィンドウを操作する internal な機能を使用できるようにするパッケージ「UniLogEntriesInternal」を GitHub に公開しました

リポジトリ 使用例 using UniLogEntriesInternal; using UnityEditor; using UnityEngine; public class Example { [MenuItem( "Tools/Log" )] private static void Log() { int count = 3; for ( int i = 0; i < count; i++ ) { Debug.Log( "ピカチュウ" );…

【Unity】Git のブランチ名やコミットハッシュ、コミットログを管理するスクリプトを生成するエディタ拡張「UniGitUtils」を GitHub に公開しました

リポジトリ 使用例 using UniGitUtils; using UnityEditor; using UnityEngine; public static class Example { [MenuItem( "Tools/Log" )] private static void Log() { var option = new CommitLogOption ( count: 10, isNoMerges: false, format: "%h %cd…

【Unity】Odin Inspector 3.0 Beta が公開

概要

【Unity】テクスチャや SpriteAtlas のインポート設定を自動化するエディタ拡張「UniTexturePreprocessor」を GitHub に公開しました

リポジトリ 使い方 Project ビューの「+ > UniTexturePreprocessor」から設定を管理するアセットを作成できます 「TextureImporterSettings」は テクスチャの Import Settings を上書きする設定を管理するアセットです 上書きしたい項目をチェックして、上書…

【Unity】フォルダの作成関連のエディタ拡張の機能

概要 using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { // フォルダが存在するかどうか if ( !AssetDatabase.IsValidFolder( "Assets/Hoge" ) ) { // フォルダを作成 AssetDatabase.CreateFolder…

【Unity】AssetDatabase.CreateAsset で時間がかかる時に高速化できるかもしれない「AssetDatabase.StartAssetEditing」

概要 using UnityEditor; using UnityEngine; using Debug = UnityEngine.Debug; public class Example : AssetPostprocessor { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var count = 100; var shader = Shader.Find( "Sprites/Diffuse" );…

【Unity】Unity 起動後にインポートされたアセットの数の取得などができる「AssetDatabaseExperimental」

使用例 using UnityEditor; using UnityEditor.Experimental; using UnityEngine; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var imported = AssetDatabaseExperimental.counters.import.imported; var total…

【Unity】Unity プロジェクトに独自のデータを保存できる「EditorUserSettings.SetConfigValue」

概要 using System; using UnityEditor; using UnityEngine; [Serializable] public sealed class Data { public int Id; public string Name; } public sealed class Example : EditorWindow { [MenuItem( "Tools/Open" )] private static void Open() { Ge…

【Unity】エディタが起動している間データを保持できる「ScriptableSingleton」

概要 using UnityEditor; public sealed class Data : ScriptableSingleton<Data> { public int Id; public string Name; } public sealed class Example : EditorWindow { [MenuItem( "Tools/Open" )] private static void Open() { GetWindow<Example>(); } private void </example></data>…

【Unity】親オブジェクトが子オブジェクトをすべて内包するように親オブジェクトの位置とサイズを調整するエディタ拡張「UniParentRectTransformFitter」を GitHub に公開しました

リポジトリ 使い方 Inspector で RectTransform の項目を右クリックして「Fit Children」を選択します Undo に対応しています 孫オブジェクトに対応しています Scale に対応しています

【Unity】External Tools の Android の項目の取得または設定ができるパッケージ「UniAndroidExternalTools」を GitHub に公開しました

リポジトリ 使用例 using UniAndroidExternalTools; using UnityEditor; using UnityEngine; public static class Example { [MenuItem( "Tools/Log" )] private static void Log() { // JDK Installed with Unity (recommended) Debug.Log( "JdkInstalledWi…

【Unity】コマンドライン引数を解析して指定されたクラスのインスタンスに変換するパッケージ「UniCommandLineParser」を GitHub に公開しました

リポジトリ 使用例 Unity.exe ^ -batchMode ^ -quit ^ -executeMethod Example.Run ^ -myOptionInt 25 ^ -myOptionFloat 2.5 ^ -myOptionString "ピカチュウ" ^ -myOptionBool using System; using UniCommandLineParser; using UnityEngine; public static …

【Unity】Unity エディタのタイトルを変更できるエディタ拡張「UniEditorWindowTitleChanger」を GitHub に公開しました

リポジトリ 使用例 using UniEditorWindowTitleChanger; using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { EditorWindowTitleChanger.SetTitle( "ピカチュウ" ); } } 謝辞 このリポジトリは下記…

【Unity】参照型のパラメータを右クリックした時のメニューに GetComponent を追加するエディタ拡張「UniGetComponentContextualPropertyMenu」を GitHub に公開しました

リポジトリ 使用例 using UnityEngine; public class Test : MonoBehaviour { public BoxCollider bocCollider; public BoxCollider[] boxColliders; }

【Unity】シリアライズ対象の変数に自動で参照を割り当てるエディタ拡張「UniGetComponentAttribute」を GitHub に公開しました

リポジトリ 使用例 using UniGetComponentAttribute; using UnityEngine; public class Test : MonoBehaviour { [GetComponent] public BoxCollider m_boxCollider; [GetComponentInParent] public BoxCollider m_boxColliderInParent; [GetComponentInParen…

【Unity】ゲームオブジェクトの複製時に名前の末尾に数値を付けないようにするエディタ拡張「UniGameObjectDuplicationHooker」を GitHub に公開しました

リポジトリ 標準の Duplicate コマンド(Ctrl + D)の挙動を上書きします 複数のゲームオブジェクトの複製に対応しています Undo に対応しています プレハブのインスタンスの複製に対応しています 複製時に transform のプロパティに誤差が生じないようにし…

【Unity】アセットを Inspector にドラッグ&ドロップできるようにするエディタ拡張の例

ソースコード /// <summary> /// 指定された矩形にドラッグ & ドロップされたアセットのパスを返します /// </summary> public bool GetDragAndDropAssetPath( Rect rect, out string assetPath ) { var current = Event.current; var controlId = GUIUtility.GetControlID( Foc…

【Unity】Enter Play Mode Options をエディタ拡張のスクリプトから変更する方法

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

【Unity】Player Settings をエディタ拡張から開く方法

概要 using UnityEditor; public static class Example { [MenuItem( "Tools/Audio" )] private static void OpenAudio() { SettingsService.OpenProjectSettings( "Project/Audio" ); } [MenuItem( "Tools/Editor" )] private static void OpenEditor() { S…