コガネブログ

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

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

【Unity】Inspector の Add Component ボタンの下にボタンを追加してみる

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

【Unity】DOTween でシーケンスへの Append・Insert・Join・Prepend を Tween のメソッドチェーンで書けるようにする拡張メソッド

ソースコード using DG.Tweening; namespace Kogane { public static class TweenExtensionMethods { public static Tween Append( this Tween self, Sequence sequence ) { sequence.Append( self ); return self; } public static Tween Insert( this Twee…

【Unity】Some objects were not cleaned up when closing the scene. (Did you spawn new GameObjects from OnDestroy?)

概要 using UnityEngine; public class Example : MonoBehaviour { private void OnDestroy() { new GameObject(); } } using UnityEngine; public class Example : MonoBehaviour { public GameObject m_prefab; private void OnDestroy() { Instantiate( m…

【Unity】EventSystem.current.IsPointerOverGameObject が検出したゲームオブジェクトを取得する方法

概要 using JetBrains.Annotations; using UnityEngine; using UnityEngine.EventSystems; namespace Kogane { public sealed class CustomStandaloneInputModule : StandaloneInputModule { [CanBeNull] public GameObject GetLastPointerGameObject() { re…

【Unity】Line Renderer の Order in Layer を設定してもスプライトとの描画順が変わらない場合

概要 Line Renderer が使用しているマテリアルの Shader を 「Sprites/Default」にしたら描画順が設定できるようになった

【Rider】エラーや警告の内容がコード行に表示されるようになる「Inspection Lens」紹介

はじめに 「Inspection Lens」を Rider に導入することで エラーや警告の内容がコード行に表示されるようになります 導入前 導入後

【Excel】セルにデータを入力すると勝手に色がつく時の対処方法

概要 条件付き書式が設定されていないはずのセルにデータを入力した時に 勝手に上のセルの書式が適用されてしまう場合は 「ファイル」を選択して 「オプション」を選択して 「詳細設定」の「データ範囲の形式および数式を拡張する」をオフにして 「OK」を押…

【Unity】EditorWindow で UIElements を構築するスクリプトを書く場合は CreateGUI 関数を使用する

概要 CreateGUI is called when the EditorWindow's rootVisualElement is ready to be populated. CreateGUI 関数は EditorWindow の rootVisualElement が 操作できるようになるタイミングで呼び出される using UnityEditor; using UnityEngine.UIElements…

【Unity】Quad の OnPointerClick が反応しない場合

概要 using UnityEngine; using UnityEngine.EventSystems; public class Example : MonoBehaviour, IPointerClickHandler { public void OnPointerClick( PointerEventData eventData ) { Debug.Log( "OnPointerClick" ); } } 上記のようなスクリプトを Qua…

【Git】すべてのサブモジュールで Stage All する方法

概要 git submodule foreach git add --all 上記のコマンドを実行する 参考サイト様

【Rider】後置テンプレートをカスタマイズできる「Custom Postfix Templates」は Rider 非対応

概要 後置テンプレートをカスタマイズできる「Custom Postfix Templates」は Rider 非対応

【Unity】CircleCollider2D で点と円の当たり判定

概要 var isHit = m_circleCollider2D.bounds.Contains( position ); CircleCollider2D の bounds.Contains を使うと点と円の当たり判定が実装できる

【Unity】OnPointerEnter でクリック(タップ)されているかどうか確認する方法

概要 void IPointerEnterHandler.OnPointerEnter( PointerEventData eventData ) { Debug.Log( eventData.eligibleForClick ) } eventData.eligibleForClick が true ならクリック(タップ)されている

【Unity】Device Simulator だと OnPointerEnter が反応しない

概要 シーンのカメラに Physics 2D Raycaster をアタッチして シーンに Event System を配置して スプライトに OnPointerEnter 検知用のスクリプトと Circle Collider 2D をアタッチして using UnityEngine; using UnityEngine.EventSystems; public class E…

【Unity】Texture の塗りつぶし(SetPixel)を高速化する方法

概要 for ( var x = 0; x < m_size.x; x++ ) { for ( var y = 0; y < m_size.y; y++ ) { m_texture.SetPixel( x, y, Color.clear ); } } m_texture.Apply(); 上記のコードだと 0.5 秒かかるところが var pixels = m_texture.GetPixels32(); for ( var i = 0;…

【Unity】UIElements で VisualElement の背面に存在する UI をクリックできるようにする

概要 var toolbar = new VisualElement { pickingMode = PickingMode.Ignore, }; pickingMode に PickingMode.Ignore を設定すると その VisualElement はクリックできないようになるため VisualElement の背面に存在する UI がクリックできるようになる

【Unity】UIElements で要素を右から左に配置したい場合

概要 using UnityEditor; using UnityEngine.UIElements; public sealed class Test : EditorWindow { [MenuItem( "Tools/Hoge" )] public static void Open() { GetWindow<Test>(); } public void CreateGUI() { var toolbar = new VisualElement(); toolbar.Add(</test>…

【Unity】UIElements で Console ウィンドウにボタンを追加するエディタ拡張のサンプル

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

【Shell】ワイルドカードを使用して各フォルダ内の該当ファイルを再帰的に削除する方法

概要 find . -type f -name "*hoge" -delete 上記のようなコマンドを実行すると *hoge にマッチするファイルが削除できる 参考サイト様

【Unity】DOTween の Transform 系の拡張メソッドを GameObject 型でも使えるようにする拡張メソッド

ソースコード using DG.Tweening; using DG.Tweening.Core; using DG.Tweening.Plugins.Options; using UnityEngine; namespace Kogane { public static class DOTweenTransformShortcutExtensionMethods { public static TweenerCore<Vector3, Vector3, VectorOptions> DOMove ( this GameObj</vector3,>…

【Unity】Ctrl + T で Search を開けるようにするエディタ拡張

ソースコード using UnityEditor; using UnityEditor.ShortcutManagement; using UnityEngine; namespace Kogane.Internal { internal static class SearchShortcutKey { [Shortcut( "Kogane/Open Search New Window", KeyCode.T, ShortcutModifiers.Action …

【Rider】新規ファイル追加時に git add しないようにする方法

概要 Preferences の「Version Control > Confirmation」の 「When files are created」を「Do not add」にする 参考サイト様

【Unity】VisualElement でボタンを末尾ではなく先頭に追加する方法

概要 visualElement.Insert( 0, pingButton ); Add ではなく Insert を使う

【C#】指定した値が組み込みの値型かどうかを確認する方法

C#

概要 // すべて True Debug.Log( typeof( bool ).IsValueType ); Debug.Log( typeof( byte ).IsValueType ); Debug.Log( typeof( sbyte ).IsValueType ); Debug.Log( typeof( char ).IsValueType ); Debug.Log( typeof( decimal ).IsValueType ); Debug.Log(…

【C#】指定した値が配列かどうかを確認する方法

C#

概要 var array1 = new int[ 0 ]; var array2 = new string[ 0 ]; var array3 = new Vector3[ 0 ]; Debug.Log( array1.GetType().IsArray ); Debug.Log( array2.GetType().IsArray ); Debug.Log( array3.GetType().IsArray ); 参考サイト様

【C#】指定した値が Dictionary かどうかを確認する方法

C#

概要 var dictionary1 = new Dictionary<int, string>(); var dictionary2 = new Dictionary<int, Vector3>(); Debug.Log( typeof( Dictionary<,> ).IsAssignableFrom( dictionary1.GetType().GetGenericTypeDefinition() ) ); Debug.Log( typeof( Dictionary<,> ).IsAssignableFrom( di</int,></int,>…

【C#】指定した値が List かどうかを確認する方法

C#

概要 参考サイト様

【Unity】The target object is null. Check for missing scripts.

概要 The target object is null. Check for missing scripts. Unity エディタで上記のエラーが発生する場合は 削除されたスクリプトを参照しているゲームオブジェクトが シーンに存在する可能性があります 「Missing」になっているスクリプトを右クリックし…

【Unity】SendMessage cannot be called during Awake, CheckConsistency, or OnValidate (XXXX: OnRectTransformDimensionsChange)

はじめに using UnityEngine; public class Example : MonoBehaviour { private void OnValidate() { Apply(); } private void Apply() { var rectTransform = GetComponent<RectTransform>(); rectTransform.sizeDelta = new Vector2 ( Random.Range( 0f, 100f ), Random.R</recttransform>…

【Rider】閉じたタブを開く方法

概要 Preferences の「Keymap」で「Main Menu > Window > Editor Tabs > Reopen Closed Tab」に ショートカットキーを割り当てると即座に閉じたタブを開けるようになる 参考サイト様