コガネブログ

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

2019-11-01から1ヶ月間の記事一覧

【Unity】Inspector のヘッダ部分をエディタ拡張する方法

概要 using UnityEditor; [InitializeOnLoad] public static class Example { static Example() { Editor.finishedDefaultHeaderGUI += editor => { EditorGUILayout.LabelField( "フシギダネ フシギソウ フシギバナ" ); }; } } Editor.finishedDefaultHeade…

【C#】リフレクションで引数に params が付いているかどうか確認できる拡張メソッド

ソースコード using System; using System.Reflection; public static class ParameterInfoExt { public static bool HasParams( this ParameterInfo param ) { var type = typeof( ParamArrayAttribute ); return param.GetCustomAttributes( type, false )…

【C#】Type 型で組み込み型のエイリアス名を取得できる拡張メソッド

ソースコード using System; public static class TypeExt { public static string GetAliasName( this Type self ) { switch ( self.FullName ) { case "System.Boolean": return "bool"; case "System.Byte": return "byte"; case "System.SByte": return …

【Windows】Windows 10 でタスクバーの一部のアイコンが白紙になってしまった時の対応方法

概要 https://answers.microsoft.com/ja-jp/windows/forum/windows_10-update/windows-10-%E3%82%BB%E3%83%BC%E3%83%95/ccc47051-93ad-4cd2-9dcf-3af4c8fee43b Windows 10 をセーフモードで起動してから 特に何もせずにセーフモードを終了してから 再び通常…

【Unity】Transform からすべての子オブジェクトを取得する方法

概要 using System.Collections.Generic; using UnityEngine; public class Example : MonoBehaviour { private void Awake() { var children = new List<Transform>(); foreach ( Transform child in transform ) { children.Add( child ); } } } 上記のようなスクリプ</transform>…

【Visual Studio】Visual Studio を使用せずに NuGet パッケージを入手・展開する方法

はじめに 「NuGet Package Explorer」を使用することで Visual Studio を使用せずに NuGet パッケージを入手・展開することができます NuGet Package Explorer の入手方法 https://github.com/NuGetPackageExplorer/NuGetPackageExplorer/releases 上記のペ…

【Unity】親オブジェクトのみ座標を ( 0, 0, 0 ) にリセットするエディタ拡張

ソースコード 使い方 親オブジェクトの座標が ( 0, 0, 0 ) 以外になってしまっており 子オブジェクトの座標は今のまま変えずに 親オブジェクトのみ座標を ( 0, 0, 0 ) にしたい場合に 親オブジェクトの Transform を右クリックして 「Reset Position Only Pa…

【Unity】草を生やすことができる「A Geometry Grass shader in Unity」紹介

はじめに 「A Geometry Grass shader in Unity」を Unity プロジェクトに導入することで 草を生やすことができます 使用例 使い方 シーンに Plane オブジェクトを作成して 「Unlit_GrassShader」マテリアルを割り当てることで使用できます

【雑記】ブログのカテゴリを階層化しました

はじめに Before After ブログのカテゴリの種類が増えてきて、縦にすごく長くなってしまっていたので カテゴリを階層化して見やすくしました この記事にはカテゴリを階層化した手順を書き残しておきます 手順 基本的には上記サイト様の手順を踏んでおります…

【Unity】Vector2 や Vector3 の ToString では小数部の桁数を指定できる

概要 using UnityEngine; public class Example : MonoBehaviour { private void Awake() { var vec = new Vector3( 1.234f, 5.678f, 9.012f ); // (1.2, 5.7, 9.0) Debug.Log( vec.ToString() ); // (1.2340, 5.6780, 9.0120) Debug.Log( vec.ToString( "F4…

【Unity】List.Find の null チェックを少しだけ簡潔に記述できる拡張メソッド

ソースコード using System; using System.Collections.Generic; public static class ListExt { public static bool TryFind<T>( this List<T> self, Predicate<T> match, out T result ) where T : class { result = self.Find( match ); return result != null; } </t></t></t>…

【Unity】GetComponentInParent の null チェックを少しだけ簡潔に記述できる TryGetComponentInParent 拡張メソッド

ソースコード using UnityEngine; public static class ComponentExt { public static bool TryGetComponentInParent<T>( this Component self, out T component ) where T : Component { component = self.GetComponentInParent<T>(); return component != null; </t></t>…

【Unity】GetComponentInChildren の null チェックを少しだけ簡潔に記述できる TryGetComponentInChildren 拡張メソッド

ソースコード using UnityEngine; public static class ComponentExt { public static bool TryGetComponentInChildren<T>( this Component self, out T component ) where T : Component { component = self.GetComponentInChildren<T>(); return component != nu</t></t>…

【Unity】TryGetComponent を Unity 2018 でも使用できるようにする拡張メソッド

ソースコード using UnityEngine; public static class ComponentExt { public static bool TryGetComponent<T>( this Component self, out T component ) where T : Component { component = self.GetComponent<T>(); return component != null; } } public stati</t></t>…

【Unity】TryGetComponent の活用方法

概要 var collider = GetComponent<BoxCollider>(); if ( collider != null ) { Debug.Log( collider ); } GetComponent だとこのように記述する処理を if ( TryGetComponent<BoxCollider>( out var collider ) ) { Debug.Log( collider ); } TryGetComponent を使うとちょっとだけ簡潔</boxcollider></boxcollider>…

【Unity】Shortcut Manager でキー割り当てが変更された時に呼び出されるイベント

概要 Shortcut Manager でキー割り当てが変更された時に using UnityEditor; using UnityEditor.ShortcutManagement; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { ShortcutManager.instance.shortcutBindingCh…

【Unity】non convex な Mesh Collider を綺麗に補間できる「UniColliderInterpolator」紹介

はじめに 「UniColliderInterpolator」を Unity プロジェクトに導入することで non convex な Mesh Collider を綺麗に補間できます 使用例 通常 Mesh Collider の「Convex」をオンにすると このように凹凸の部分に正しく Mesh Collider が適用されません Uni…

【Unity】Shortcut Manager のアクティブなプロファイルが変更された時に呼び出されるイベント

概要 Shortcut Manager のアクティブなプロファイルが変更された時に using UnityEditor; using UnityEditor.ShortcutManagement; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { ShortcutManager.instance.activ…

【Unity】Unity 再生時に Build Settings の先頭に登録されているシーンから開始するようにするエディタ拡張

ソースコード using UnityEditor; using UnityEditor.SceneManagement; [InitializeOnLoad] public static class Example { static Example() { // Build Settings に登録されている // シーンの一覧が変更されたら呼び出される EditorBuildSettings.sceneLi…

【Unity】Hierarchy の描画アイコンや選択可能アイコンが変更された時に呼び出されるイベント

概要 using UnityEditor; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { SceneVisibilityManager.visibilityChanged += () => Debug.Log( "ピカチュウ" ); SceneVisibilityManager.pickingChanged += () => Debu…

【Unity】Add Component された時に呼び出されるイベント

概要 using UnityEditor; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { ObjectFactory.componentWasAdded += com => Debug.Log( com ); } } ObjectFactory.componentWasAdded が呼び出されます

【Unity】Build Settings に登録されているシーンが変更された時に呼び出されるイベント

概要 using UnityEditor; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { EditorBuildSettings.sceneListChanged += () => { Debug.Log( "ピカチュウ" ); }; } } EditorBuildSettings.sceneListChanged が呼び出…

【Unity】Transform の Rotation を Inspector における入力と同様に設定する方法

概要 localEulerAngles を使用する方法 using UnityEditor; using UnityEngine; public static class Example { [MenuItem( "CONTEXT/Transform/Example" )] private static void Hoge( MenuCommand command ) { var t = command.context as Transform; t.lo…

【Unity】アセットの作成、名前の変更、移動などのタイミングで呼び出されるイベント

概要 using UnityEditor; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { EditorApplication.projectChanged += () => Debug.Log( "ピカチュウ" ); } } EditorApplication.projectChanged が呼び出されます

【Unity】Android のバイブレーションで時間を指定できる「UniAndroidVibration」紹介

はじめに 「UniAndroidVibration」を Unity プロジェクトに導入することで Android のバイブレーションで時間を指定できます 使い方 using UnityEngine; public class Example : MonoBehaviour { private void Update() { if ( Input.GetMouseButtonDown( 0 …

【Unity】各アセンブリのコンパイルが終了した時に呼び出されるイベント

概要 using UnityEditor; using UnityEditor.Compilation; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { CompilationPipeline.assemblyCompilationFinished += ( name, messages ) => { Debug.Log( name ); }; …

【Unity】各アセンブリのコンパイルが開始された時に呼び出されるイベント

概要 using UnityEditor; using UnityEditor.Compilation; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { CompilationPipeline.assemblyCompilationStarted += name => { Debug.Log( name ); }; } } Compilation…

【Unity】UIElements で Game ビューにテキストやボタンを追加するエディタ拡張のサンプル

ソースコード using UnityEditor; using UnityEngine; using UnityEngine.UIElements; [InitializeOnLoad] public static class Example { static Example() { EditorApplication.delayCall += () => { var assembly = typeof( EditorWindow ).Assembly; var…

【Unity】Scene ビューのグリッドの表示の ON / OFF が変更された時に呼び出されるイベント

概要 Scene ビューのグリッドの表示の ON / OFF が変更された時に using UnityEditor; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { var sceneViews = Resources.FindObjectsOfTypeAll<SceneView>(); foreach ( var sceneV</sceneview>…

【Unity】Scene ビューの描画モードを変更できないようにする方法

概要 Scene ビューの描画モードを変更できないようにする場合は using UnityEditor; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { var sceneViews = Resources.FindObjectsOfTypeAll<SceneView>(); foreach ( var sceneVie</sceneview>…