コガネブログ

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

【Unity】Paste Component As New をスクリプトから呼び出す方法

概要 using UnityEditor; using UnityEditorInternal; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var gameObject = Selection.activeGameObject; ComponentUtility.PasteComponentAsNew( gameObject ); } } C…

【Unity】Console ウィンドウを自作するサンプル

概要 上記のサイト様が Console ウィンドウを自作するサンプルのソースコードを 公開してくださっております

【Unity】executeMethod class 'XXXX' could not be found.

概要 executeMethod class 'XXXX' could not be found. コマンドライン引数で -executeMethod を使用したところ 指定したクラスが見つからないというエラーに遭遇した コマンドライン引数で -projectPath を省略した場合、 作業スペース直下の Unity プロジ…

【Unity】フォルダの Inspector にボタンを追加するエディタ拡張「UniFolderInspector」を GitHub に公開しました

リポジトリ 使用例 選択中のフォルダにフォルダや C# スクリプトを作成できるボタンが使用できるようになります

【Unity】Inspector でゲームオブジェクトの編集を不可能にできるエディタ拡張「UniGameObjectLocker」を GitHub に公開しました

リポジトリ 使い方 Inspector で Transform コンポーネントを右クリックして「Switch Lock - Unlock」を押すと そのゲームオブジェクトを編集不可にできます 編集可能に戻したい場合はもう一度同じメニューを選択します

【Unity】Assembly Definition を作成する時のコンパイル回数を抑えられるエディタ拡張「UniAssemblyDefinitionCreator」を GitHub に公開しました

リポジトリ 使い方 Project ビューのコンテキストメニューから「Open Assembly Definition Creator」を選択して 表示されたウィンドウで Assembly Definition を作成することができます 通常の手順で Assembly Definition を作成して設定を変更する場合 Asse…

【Unity】アセットをブックマークできるエディタ拡張「UniBookmark」を GitHub に公開しました

リポジトリ 使い方 Unity メニューの「Window > UniBookmark」を押すと ブックマークを管理できる「UniBookmark」ウィンドウが表示されます 「Add Asset」ボタンを押すか、「Add Asset」ボタンにアセットをドラッグすると ブックマークにアセットを登録でき…

【Unity】アセンブリのコンパイルのプロセスを可視化できるエディタ拡張「Compilation Visualizer for Unity」紹介

はじめに 「Compilation Visualizer for Unity」は アセンブリのコンパイルのプロセスを可視化できるエディタ拡張です 使用例 プロジェクト全体をコンパイルし直した場合 Assembly-CSharp.dll のスクリプトを修正した場合

【Unity】.meta ファイルに独自の情報を追加する方法

概要 using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var asset = Selection.activeObject; var path = AssetDatabase.GetAssetPath( asset ); var assetImporter = AssetImporter.GetAtPath( …

【Unity】Scene ビューに UI レイヤーの表示の ON / OFF を切り替えるボタンを追加するエディタ拡張

ソースコード 使用例

【Unity】GUI.Window の領域でクリックされた時に後ろ側でクリックイベントが反応しないようにする方法

ソースコード var current = Event.current; var type = current.type; var isMouseDragOrDown = type == EventType.MouseDrag || type == EventType.MouseDown; var isLeftButton = current.button == 0; if ( isMouseDragOrDown && isLeftButton ) { curre…

【Unity】選択したゲームオブジェクトやアセットの履歴を管理できる「Unity Editor History panel」紹介

はじめに 「Unity Editor History panel」を Unity プロジェクトに導入することで 選択したゲームオブジェクトやアセットの履歴を管理できるようになります 使用例 使い方 Unity メニューの「Tools > Open Open Navigation Panel」を選択することで 履歴を管…

【Unity】Layers の表示・非表示を切り替えるエディタ拡張のサンプル

ソースコード using UnityEditor; using UnityEngine; internal static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { // 「UI」レイヤーの表示・非表示を切り替える Tools.visibleLayers ^= LayerMask.GetMask( "UI" ); SceneV…

【Unity】Package Manager に登録されているパッケージの一覧をエディタ拡張で取得する例

ソースコード using System.Linq; using UnityEditor; using UnityEditor.PackageManager; using UnityEditor.PackageManager.Requests; using UnityEngine; internal static class Example { private static ListRequest m_request; [MenuItem( "Tools/Hoge…

【Unity】EditorWindow で ReorderableList を使用するサンプル

ソースコード

【Unity】プレハブを EditorWindow から Hierarchy や Project ビューにドラッグ&ドロップするサンプル

ソースコード using UnityEditor; using UnityEngine; public class Example : EditorWindow { [MenuItem( "Window/Example" )] private static void Open() { GetWindow<Example>(); } private void OnGUI() { if ( Event.current.type != EventType.MouseDrag ) ret</example>…

【Unity】Console ウィンドウの検索欄に文字列を設定するエディタ拡張

ソースコード using System.Reflection; using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var assembly = typeof( Editor ).Assembly; var type = assembly.GetType( "UnityEditor.ConsoleWindo…

【Unity】ログ出力を Scene ビューに表示できる「Scene view notification」紹介

はじめに 「Scene view notification」を Unity プロジェクトに導入することで ログ出力を Scene ビューに表示できます 使用例 使い方 using System.Collections; using UnityEngine; public class Example : MonoBehaviour { private IEnumerator Start() {…

【Unity】UIElements でプレハブを EditorWindow から Hierarchy や Project ビューにドラッグ&ドロップするサンプル

はじめに https://forum.unity.com/threads/solved-how-to-start-draganddrop-action-so-that-sceneview-and-hierarchy-accept-it-like-with-prefabs.822531/ 上記サイト様で公開されているスクリプトを使用すると UIElements でプレハブを EditorWindow か…

【Unity】条件を満たしていない場合は Inspector から Add Component できないようにするエディタ拡張の例

概要 using UnityEditor; using UnityEngine; [InitializeOnLoad] internal static class Example { static Example() { ObjectFactory.componentWasAdded += OnComponentWasAdded; } private static void OnComponentWasAdded( Component component ) { // …

【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 ファイルを開くアプリ…