コガネブログ

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

【Unity】UniTask で処理の開始時と終了時にログを出力できるようにする拡張メソッド

ソースコード 使用例 using UniRx.Async; using UnityEngine; public sealed class Example : MonoBehaviour { private async void Start() { #if ENABLE_RELEASE #else UniTaskExt.OnStartLog += message => Debug.Log( $"{message} 開始" ); UniTaskExt.On…

【Unity】ゲームオブジェクトが破棄される時に自動で IDisposable.Dispose を呼び出す拡張メソッド

ソースコード 使用例 using System; using UnityEngine; public class Character : IDisposable { public void Dispose() { Debug.Log( "ピカチュウ" ); } } public class Example : MonoBehaviour { private void Start() { var character = new Character(…

【Unity】BuildTarget を BuildTargetGroup に変換する方法

概要 BuildPipeline.GetBuildTargetGroup を使用する もしくは下記のような拡張メソッドを自作する using UnityEditor; public static class BuildTargetExt { public static BuildTargetGroup ToBuildTargetGroup( this BuildTarget self ) { switch ( self…

【Unity】メソッドチェーンでリッチテキストを設定できる「RichText for Unity」紹介

はじめに 「RichText for Unity」を Unity プロジェクトに導入することで メソッドチェーンでリッチテキストを設定できるようになります 使用例 var str = "ピカチュウ"; // 通常 Debug.Log( $"<color=purple><size=17><b><i>{str}</i></b></size></color>"); // RichText for Unity Debug.Log( $"{str.Italic().B…

【Unity】Collision で CompareTag を使用できるようにする拡張メソッド

ソースコード using UnityEngine; namespace MyProject { public static class CollisionExt { public static bool CompareTag( this Collision self, string tag ) { return self.gameObject.CompareTag( tag ); } } } 使用例 適用前 private void OnCollis…

【Unity】Collision2D で CompareTag を使用できるようにする拡張メソッド

ソースコード using UnityEngine; namespace MyProject { public static class Collision2DExt { public static bool CompareTag( this Collision2D self, string tag ) { return self.gameObject.CompareTag( tag ); } } } 使用例 適用前 private void OnCo…

【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】Gradient で Lerp を使用できる「Unity Gradient Lerp」紹介

ソースコード 使用例 using UnityEngine; public class Example : MonoBehaviour { public Gradient m_gradient1; public Gradient m_gradient2; [Range( 0, 1 )] public float m_time; public Gradient m_gradient3; private void OnValidate() { m_gradien…

【Unity】プレハブもしくはプレハブのインスタンスの場合 false を返す拡張メソッド

ソースコード using UnityEditor; public static class UnityObjectExt { public static bool IsNotPrefab( this UnityEngine.Object self ) { var type = PrefabUtility.GetPrefabAssetType( self ); return type == PrefabAssetType.NotAPrefab; } } 使用…

【Unity】プレハブもしくはプレハブのインスタンスの場合 true を返す拡張メソッド

ソースコード using UnityEditor; public static class UnityObjectExt { public static bool IsPrefab( this UnityEngine.Object self ) { var type = PrefabUtility.GetPrefabAssetType( self ); return type != PrefabAssetType.NotAPrefab; } } 使用例 D…

【Unity】static な event の登録数を取得する方法

概要 using System; using System.Reflection; public static class DelegateExt { public static int GetLength<T>( string name ) { return GetLength( typeof( T ), name ); } public static int GetLength( this Type self, string name ) { var attrs = Bi</t>…

【Unity】ゲームオブジェクトのルートパスを取得できる拡張メソッド

ソースコード using UnityEngine; public static class GameObjectExt { private static string GetRootPath( this GameObject gameObject ) { var path = gameObject.name; var parent = gameObject.transform.parent; while ( parent != null ) { path = p…

【Unity】Animator Controller のいずれかのステートの Motion が null になっている場合に true を返す拡張メソッド

概要 using System.Linq; using UnityEditor.Animations; public static class AnimatorControllerExt { public static bool HasNullMotion( this AnimatorController self ) { foreach ( var n in self.layers ) { if ( n.stateMachine.states.Any( c => c.…

【Unity】uGUI の Toggle の isOn をスクリプトから設定する時に onValueChanged を発生しない拡張メソッド

ソースコード using UnityEngine.UI; public static class ToggleExt { public static void SetIsOnWithoutCallback( this Toggle self, bool isOn ) { var onValueChanged = self.onValueChanged; self.onValueChanged = new Toggle.ToggleEvent(); self.is…

【Unity】便利な関数や拡張メソッドを使用できる「unity-utils」紹介

はじめに 「unity-utils」を Unity プロジェクトに導入することで 便利な関数や拡張メソッドを使用できるようになります 使用例 RandomUtil using Assets.Scripts.Utils; using System.Collections.Generic; using UnityEngine; public class Example : Mono…

【Unity】ベクトルと角度を変換できる拡張メソッド

ソースコード 使用例 var dir = Vector2.right; var rot = dir.VectorToDeg(); var angle = 123f; var vec = angle.DegToVector(); 参考ツイート whip those unity types into shape and add your own functionality via extension methods. for instance: c…

【Unity】RectTransform の anchoredPosition を設定する拡張メソッド

ソースコード using UnityEngine; public static class RectTransformExt { public static void SetAnchoredPositionX ( this RectTransform self, float x ) { var pos = self.anchoredPosition; pos.x = x; self.anchoredPosition = pos; } public static …

【Unity】UnityEvent で RemoveAllListeners してから AddListener する拡張メソッド

ソースコード using System; using UnityEngine.Events; public static class UnityEventExt { public static void SetListener( this UnityEvent self, Action call ) { self.RemoveAllListeners(); self.AddListener( () => call() ); } public static voi…

【Unity】UnityEvent の AddListener で System.Action を渡せるようにする拡張メソッド

ソースコード using System; using UnityEngine.Events; public static class UnityEventExt { public static void AddListener( this UnityEvent self, Action call ) { self.AddListener( () => call() ); } } 使用例 Action call = () => {}; button.onCl…

【Unity】DOTween で async / await を使用する

ソースコード 使用例 using DG.Tweening; using UnityEngine; public class Example : MonoBehaviour { private async void Start() { var t = transform; await t.DOMove( Random.onUnitSphere, 1 ); // 移動 await t.DORotate( Random.rotation.eulerAngle…

【Unity】便利な拡張メソッドが使用できる「UrFairy」紹介

はじめに 「UrFairy」を Unity プロジェクトに導入することで 便利な拡張メソッドが使用できるようになります 使い方 using UrFairy; ソースコードの先頭に上記の using を追加することで使用できるようになります 拡張メソッド一覧(引用) Vector3 transfo…

【Unity】便利な拡張メソッドをまとめた簡易ライブラリ「KoganeUnityLib」を GitHub に公開しました

はじめに 便利な拡張メソッドをまとめた簡易ライブラリ 「KoganeUnityLib」を GitHub に公開しました 目次 はじめに 目次 開発環境 導入方法 拡張メソッド ActionExt ArrayExt BoolExt ByteExt ColorExt ComponentExt DateTimeExt DictionaryExt EnumExt Flo…

【Unity】ButtonClickedEvent のリスナーの追加、削除、設定の記述を簡略化する拡張メソッド

ソースコード 関連記事

【Unity】uGUI の RawImage の UV の設定を楽にする拡張メソッド

ソースコード 関連記事

【Unity】uGUI の Graphic から ContentSizeFitter を参照する手間を省く拡張メソッド

ソースコード 関連記事

【Unity】uGUI の Graphic から RectTransform を参照する手間を省く拡張メソッド

ソースコード 関連記事

【Unity】Vector2 を四捨五入する拡張メソッド

ソースコード using UnityEngine; public static class Vector2Ext { public static Vector2 Round( this Vector2 self ) { return new Vector2 ( Mathf.Round( self.x ), Mathf.Round( self.y ) ); } } 使い方 var vec = new Vector2( 1.1f, 1.1f ); vec = …

【Unity】Vector3 を四捨五入する拡張メソッド

ソースコード using UnityEngine; public static class Vector3Ext { public static Vector3 Round( this Vector3 self ) { return new Vector3 ( Mathf.Round( self.x ), Mathf.Round( self.y ), Mathf.Round( self.z ) ); } } 使い方 var vec = new Vector…