コガネブログ

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

2022-09-01から1ヶ月間の記事一覧

【Fork】Mac の Fork を終了した時にタブを復元する方法

概要 閉じるボタンを押して閉じるとタブの情報が失われる Ctl + Q で終了するとタブの情報が保持される 参考サイト様

【Unity】プレハブモードで FindObjectOfType を使いたい場合

概要 var tilemap = GameObject.FindObjectOfType<Tilemap>(); プレハブモードでは FindObjectOfType を使ってもコンポーネントは見つからない var tilemap = PrefabStageUtility .GetCurrentPrefabStage() .FindComponentOfType<Tilemap>() ; 上記のようなコードを書くとコン</tilemap></tilemap>…

【Unity】Camera.ScreenToWorldPoint で毎回 z に 0 を入れなくて済む拡張メソッド

ソースコード using UnityEngine; namespace Kogane { public static class CameraExtensionMethods { public static Vector2 ScreenToWorldPoint2D ( this Camera self, Vector3 position ) { return self.ScreenToWorldPoint( position ); } public static…

【Unity】AssetPostprocessor の OnPreprocessAudio や OnPreprocessTexture だと ScriptableSingleton の最新の情報を取得できなかった

概要 private void OnPreprocessAudio() { var example = Example.instance; } AssetPostprocessor の OnPreprocessAudio や OnPreprocessTexture で ScriptableSingleton にアクセスしたところ、初回は正常に値を取得できたが ScriptableSingleton の値を変…

【Unity】Sprite Atlas V2 だと SetPackingSettings や SetTextureSettings が反映されない

概要 [MenuItem( "hoge/hoge" )] private static void Hoge() { var assetPath = "Assets/New Sprite Atlas.spriteatlas"; var spriteAtlas = AssetDatabase.LoadAssetAtPath<SpriteAtlas>( assetPath ); var packingSettings = spriteAtlas.GetPackingSettings(); packin</spriteatlas>…

【Unity】SpriteAtlas V2 を有効にした場合の SpriteAtlas の拡張子は .spriteatlasv2

概要 var list = importedAssets .Where( x => x.EndsWith( ".spriteatlas" ) || x.EndsWith( ".spriteatlasv2" ) ) .ToArray() ; アセットのパスの拡張子で SpriteAtlas かどうかを確認する場合は .spriteatlas だけではなく .spriteatlasv2 も確認する必要…

【Unity】AssetPostprocessor の OnPreprocessAudio や OnPreprocessTexture では Application.isBatchMode が true になる

概要 Unity Hub から Unity を起動した状態で [MenuItem( "hoge/hoge" )] private static void Hoge() { Debug.Log( Application.isBatchMode ); // False } Application.isBatchMode にアクセスすると通常は False になるが private void OnPreprocessAudio…

【C#】継承しているすべての基底クラスと実装しているすべてのインターフェイスの Type を返す拡張メソッド

C#

概要 /// <summary> /// 継承しているすべての基底クラスと実装しているすべてのインターフェイスの Type を返します /// </summary> public static IEnumerable<Type> GetParentTypes( this Type self ) { if ( self == null ) yield break; foreach ( var x in self.GetInterfaces()</type>…

【C#】基底クラスを継承しているもしくはインターフェイスを実装している場合 true を返す拡張メソッド

C#

概要 /// <summary> /// 指定された基底クラスを継承しているもしくはインターフェイスを実装している場合 true を返します /// </summary> public static bool IsInherits( this Type self, Type baseOrInterfaceType ) { if ( self == null ) return false; if ( baseOrInterf…

【Unity】LateFixedUpdate の実装例

ソースコード using System.Collections; using UnityEngine; [DisallowMultipleComponent] public sealed class Example : MonoBehaviour { private void OnEnable() { StartCoroutine( nameof( UpdateLateFixedUpdate ) ); } private void OnDisable() { S…

【Unity】エディタの選択履歴を管理できる「Editor History」紹介

はじめに 「Editor History」を Unity プロジェクトに導入することで エディタの選択履歴を管理できるようになります 使用例 エディタ右上のアイコンから選択履歴を確認できます

【Unity】ShowAuxWindow で開いた EditorWindow のタイトルを変更する方法

概要 var window = ScriptableObject.CreateInstance<Example>(); window.titleContent = new GUIContent( "ピカチュウ" ); window.ShowAuxWindow(); titleContent を設定する</example>

【Unity】Slider のドラッグが終了したかどうかを検知する方法

概要 using UnityEngine; using UnityEngine.EventSystems; public sealed class Example : MonoBehaviour, IPointerUpHandler, IEndDragHandler { // マウスクリックやタップが離された時 void IPointerUpHandler.OnPointerUp( PointerEventData eventData …

【Unity】エディタの GUI を上下の中央に表示する方法

概要 using var scope = new EditorGUILayout.VerticalScope(); GUILayout.FlexibleSpace(); if ( GUILayout.Button( icon, EditorStyles.iconButton ) ) { } GUILayout.FlexibleSpace(); EditorGUILayout.VerticalScope と GUILayout.FlexibleSpace を組み…

【Unity】エディタの GUI でリストに要素がドラッグされたかどうかを検知する方法

概要 using var scope = new EditorGUI.ChangeCheckScope(); var oldCount = m_list.Count; m_editor.OnInspectorGUI(); if ( !scope.changed && oldCount == m_list.Count ) return; Debug.Log( "ピカチュウ" ); エディタの GUI でリストに要素がドラッグさ…

【Unity】Duplicate Array Element と Delete Array Element を実行した時は ChangeCheckScope.changed は true にならない

【C#】MethodInfo が拡張メソッドなら true を返す拡張メソッド

C#

ソースコード using System.Reflection; using System.Runtime.CompilerServices; namespace Kogane { public static class MethodInfoExtensionMethods { public static bool IsExtensionMethod( this MethodInfo self ) { return self.IsDefined( typeof( …

【C#】Type が nullable なら true を返す拡張メソッド

C#

ソースコード public static class TypeExtensionMethods { public static bool IsNullable( this Type self ) { return Nullable.GetUnderlyingType( self ) != null; } }

【Jenkins】ビルド日時の環境変数を使用できる「Build Timestamp」紹介

はじめに 「Build Timestamp」を Jenkins に追加することで ビルド日時の環境変数を使用できるようになります 使用例 pipeline { agent any stages { stage('Initialize') { steps { script { echo "${BUILD_TIMESTAMP}" echo "${env.BUILD_TIMESTAMP}" } } …

【Jenkins】Homebrew でインストールした Jenkins を起動したりアップデートしたりするコマンド

概要 # LTS のインストール brew install jenkins-lts # 特定のバージョンの LTS のインストール brew install jenkins-lts@YOUR_VERSION # 起動 brew services start jenkins-lts # 再起動 brew services restart jenkins-lts # アップデート brew upgrade …

【Mac】Homebrew インストール直後に「command not found: brew」と表示される場合

はじめに 公式サイトに書かれているとおりに /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 上記のコマンドを実行して Homebrew インストールした後に brew -v Homebrew が使えるかどうか上記のコマン…

【Unity】EditorGUILayout.Popup で「/」を無視する方法

概要 EditorGUILayout.Popup の displayedOptions に渡す文字列に対して .Replace( "/", "\u2215" ) 上記の処理を行えば「/」で階層が深くならなくなる 参考サイト様

【Unity】CodeEditor.CurrentEditor.OpenProject を使うと指定したファイルを外部コードエディタで開ける

概要 using Unity.CodeEditor; using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] public static void Hoge() { CodeEditor.CurrentEditor.OpenProject ( filePath: "Assets/Example.cs", line: 11, column: 20 ); } } たとえば…

【Unity】Hierarchy の Create メニューから EventSystem が作成できなくなった時の対処方法

概要 EventSystem の Preset を作成して Preset Manager に登録したら Hierarchy の Create メニューから EventSystem が作成できなくなった Unity を再起動したら作成できるように直った 開発環境 Unity 2022.1.11f1 macOS Monterey バージョン 12.5.1

【Unity】キーボード操作で UI が反応しないようにする方法

概要 Event System の Send Navigation Events をオフにする

【Rider】Application のコード補完から UnityEngine.WSA.Application を非表示にする方法

概要 UnityEngine.WSA.Application Auto Import に上記の文字列を追加する

【Rider】Random のコード補完から Unity.Mathematics.Random を非表示にする方法

概要 Unity.Mathematics.Random Auto Import に上記の文字列を追加する

【C#】NPOI でどんなセルの値も文字列で取得できる拡張メソッド

拡張メソッド using NPOI.SS.UserModel; namespace Kogane { public static class ICellExtensionMethods { public static string GetValue( this ICell self ) { if ( self == null ) return string.Empty; return self.CellType switch { CellType.Numeric…

【Unity】選択中の EditorWindow のスクリーンショットを撮影するエディタ拡張

ソースコード using System; using System.IO; using UnityEditor; using UnityEngine; namespace Kogane.Internal { internal static class EditorWindowCapturer { [MenuItem( "Kogane/選択中の EditorWindow をキャプチャ" )] private static void Captur…

【Unity】UnityException: LoadSerializedFileAndForget is not allowed to be called from a ScriptableObject constructor (or instance field initializer), call it in OnEnable instead. Called from ScriptableObject 'XXXX'.

概要 [InitializeOnLoad] internal static class Example { static Example() { Debug.Log( ExampleSetting.instance ); } } InitializeOnLoad のタイミングで ScriptableSingleton にアクセスしたら UnityException: LoadSerializedFileAndForget is not al…