読者です 読者をやめる 読者になる 読者になる

コガネブログ

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

【Unity】指定されたオブジェクトの PrefabType を返す拡張メソッド

using UnityEditor; /// <summary> /// UnityEngine.Object 型の拡張メソッドを管理するクラス /// </summary> public static partial class UnityEngineObjectExt { /// <summary> /// 指定されたオブジェクトの PrefabType を返します /// </summary> public static PrefabType GetPrefabType( th…

【C#】単数を渡せるIEnumerable.Concat

/// <summary> /// 2 つのシーケンスを連結します /// </summary> public static IEnumerable<TSource> Concat<TSource>( this IEnumerable<TSource> first, TSource second ) { return first.Concat( new [] { second } ); }</tsource></tsource></tsource>

【C#】LINQのUnion関数の引数にラムダ式を使えるようにする拡張メソッド

using System; using System.Collections.Generic; using System.Linq; public static class IEnumerableExtensions { private sealed class CommonSelector<T, TKey> : IEqualityComparer<T> { private Func<T, TKey> m_selector; public CommonSelector( Func<T, TKey> selector ) { m_se</t,></t,></t></t,>…

【C#】LINQのSequenceEqual関数の引数にラムダ式を使えるようにする拡張メソッド

using System; using System.Collections.Generic; using System.Linq; public static class IEnumerableExtensions { private sealed class CommonSelector<T, TKey> : IEqualityComparer<T> { private Func<T, TKey> m_selector; public CommonSelector( Func<T, TKey> selector ) { m_se</t,></t,></t></t,>…

【C#】LINQのIntersect関数の引数にラムダ式を使えるようにする拡張メソッド

using System; using System.Collections.Generic; using System.Linq; public static class IEnumerableExtensions { private sealed class CommonSelector<T, TKey> : IEqualityComparer<T> { private Func<T, TKey> m_selector; public CommonSelector( Func<T, TKey> selector ) { m_se</t,></t,></t></t,>…

【C#】LINQのExcept関数の引数にラムダ式を使えるようにする拡張メソッド

using System; using System.Collections.Generic; using System.Linq; public static class IEnumerableExtensions { private sealed class CommonSelector<T, TKey> : IEqualityComparer<T> { private Func<T, TKey> m_selector; public CommonSelector( Func<T, TKey> selector ) { m_se</t,></t,></t></t,>…

【C#】LINQのContains関数の引数にラムダ式を使えるようにする拡張メソッド

using System; using System.Collections.Generic; using System.Linq; public static class IEnumerableExtensions { private sealed class CommonSelector<T, TKey> : IEqualityComparer<T> { private Func<T, TKey> m_selector; public CommonSelector( Func<T, TKey> selector ) { m_se</t,></t,></t></t,>…

【C#】LINQのDistinct関数の引数にラムダ式を使えるようにする拡張メソッド

using System; using System.Collections.Generic; using System.Linq; public static class IEnumerableExtensions { private sealed class CommonSelector<T, TKey> : IEqualityComparer<T> { private Func<T, TKey> m_selector; public CommonSelector( Func<T, TKey> selector ) { m_se</t,></t,></t></t,>…

【Unity】【Tips】Textで書式指定文字列を設定しやすくする拡張メソッド

using UnityEngine.UI; public static class UITextExtensions { public static void SetText( this Text self, string format, params object[] args ) { self.text = string.Format( format, args ); } } var text = GetComponent<Text>(); text.SetText( "{0}/{</text>…

【C#】配列やリストから重複している要素を抽出する拡張メソッド

public static class IListExtensions { /// <summary> /// 重複している要素を抽出して返します /// </summary> public static T[] GetDistinct<T>( this IList<T> self ) { var uniqueList = new List<T>(); var result = new List<T>(); foreach ( var n in self ) { if ( uniqueList.Con</t></t></t></t>…

【C#】規定値を指定できるElementAtOrDefault拡張メソッド

using System; using System.Collections.Generic; public static class IListExtensions { /// <summary> /// <para>シーケンス内の指定されたインデックス位置にある要素を返します。</para> /// <para>インデックスが範囲外の場合は既定値を返します。</para> /// </summary> public static T ElementAt…

【Unity】Mathf.Clampの拡張メソッド

using UnityEngine; public static class IntExtensions { public static float Clamp( this int value, int min, int max ) { return Mathf.Clamp( value, min, max ); } } public static class FloatExtensions { public static float Clamp( this float v…

【C#】指定された文字列を末尾から削除する拡張メソッド

public static class StringExtensions { /// <summary> /// <para>指定された文字列がこのインスタンス内で最後に見つかった場合、</para> /// <para>その文字列を削除した新しい文字列を返します</para> /// </summary> public static string RemoveAtLast( this string self, string value ) { return s…

【Unity】NGUIのUISpriteに有効なスプライト名が設定されているかどうかを確認する拡張メソッド

using System.Linq; public static class UISpriteExtensions { /// <summary> /// 有効なスプライト名が設定されている場合 true を返します /// </summary> public static bool IsValidSpriteName( this UISprite self ) { var spriteName = self.spriteName; var spriteList …

【C#】UNIX時間を求める拡張メソッド

参考サイト様 UNIX時間を求めるには?[C#、VB] − @IT

【C#】偶数かどうかを返す拡張メソッド

public static class IntExtensions { /// <summary> /// 偶数かどうかを返します /// </summary> public static bool IsEven( this int self ) { return self % 2 == 0; } } int n1 = 1; int n2 = 2; n1.IsEven(); // False n2.IsEven(); // True

【C#】奇数かどうかを返す拡張メソッド

public static class IntExtensions { /// <summary> /// 奇数かどうかを返します /// </summary> public static bool IsOdd( this int self ) { return self % 2 == 1; } } int n1 = 1; int n2 = 2; n1.IsOdd(); // True n2.IsOdd(); // False

【Unity】LineRendererの頂点をVector3型の配列やリストで一括で設定できる拡張メソッド

using UnityEngine; public static class LineRendererExtensions { public static void SetPositions( this LineRenderer self, IList<Vector3> positions ) { self.SetVertexCount( positions.Count ); for ( int i = 0; i < positions.Count; i++ ) { self.SetPosi</vector3>…

【Unity】Plane.Raycastで一時変数を宣言する必要がない拡張メソッド

using UnityEngine; public static class PlaneExtensions { public static float Raycast( this Plane self, Ray ray ) { float enter; self.Raycast( ray, out enter ); return enter; } }

【Unity】無効なコンポーネントがアタッチされているかどうかを返す拡張メソッド

using UnityEngine; using System.Linq; public static class GameObjectExtensions { /// <summary> /// 無効なコンポーネントがアタッチされている場合 true を返します /// </summary> public static bool HasMissingScript( this GameObject self ) { return self .GetCompo…

【C#】文字列の末尾が指定されたいずれかの文字列と一致するかどうかを判断する拡張メソッド

using System; using System.Globalization; using System.Linq; public static class StringExtensions { /// <summary> /// <para>この文字列インスタンスの末尾が、</para> /// <para>指定したいずれかの文字列と一致するかどうかを判断します</para> /// </summary> public static bool EndsWith( this…

【C#】Pathクラスの拡張メソッド

var path = "Assets/Prefabs/Player.prefab"; path.GetDirectoryName(); // Assets/Prefabs path.GetExtension(); // .prefab path.GetFileName(); // Player.prefab path.GetFileNameWithoutExtension(); // Player path.GetFullPath(); // XXXX\Assets\Pre…

【C#】デリゲートが登録されているかどうかを返す拡張メソッド

using System; public static class MulticastDelegateExtensions { public static bool IsNullOrEmpty( this MulticastDelegate self ) { if ( self == null || self.GetInvocationList() == null ) { return true; } return self.GetInvocationList().Leng…

【Unity】作った汎用関数まとめ

.NET Framework int 【C#】ラップアラウンド関数を定義する - コガネブログ 【C#】 数値を加算して、範囲を超えた分は 0 からの値として処理して返す拡張メソッド - コガネブログ 【C#】数値を3桁カンマ区切りの文字列に変換する拡張メソッド - コガネブログ…

【C#】ListをStackの様に扱うための拡張メソッド

public static class ListExtensions { /// <summary> /// 先頭にあるオブジェクトを削除せずに返します /// </summary> public static T Peek<T>( this IList<T> self ) { return self[ 0 ]; } /// <summary> /// 先頭にあるオブジェクトを削除し、返します /// </summary> public static T Pop<T>( this IL</t></t></t>…

【C#】ListをQueueの様に扱うための拡張メソッド

public static class ListExtensions { /// <summary> /// 先頭にあるオブジェクトを削除し、返します /// </summary> public static T Dequeue<T>( this IList<T> self ) { var result = self[ 0 ]; self.RemoveAt( 0 ); return result; } /// <summary> /// 末尾にオブジェクトを追加します /</summary></t></t>…

【C#】Func<bool>に登録されているいずれかのデリゲートがtrueを返すかどうかを確認する拡張メソッド

Func<bool> func = null; func += () => true ; func += () => false; func += () => true ; func += () => false; func.Any(); // True 類似記事 【C#】Func<bool>に登録されているすべてのデリゲートがtrueを返すかどうかを確認する拡張メソッド - コガネブログ</bool></bool>

【C#】Func<bool>に登録されているすべてのデリゲートがtrueを返すかどうかを確認する拡張メソッド

Func<bool> func = null; func += () => true ; func += () => false; func += () => true ; func += () => false; func.All(); // False 類似記事 【C#】Func<bool>に登録されているいずれかのデリゲートがtrueを返すかどうかを確認する拡張メソッド - コガネブログ</bool></bool>

【Unity】メッセージに書式指定可能なMustExtensions系の拡張メソッド

nullObj .MustBeNullFormat( "{0}", "メッセージ" ); notNullObj .MustNotBeNullFormat( "{0}", "メッセージ" ); canJump .MustBeTrueFormat( "{0}", "メッセージ" ); isDead .MustBeFalseFormat( "{0}", "メッセージ" ); health .MustBeEqualFormat( 0, "{0…

【C#】配列やリストが空かどうかを返す拡張メソッド

using System.Collections.Generic; public static class IListExtensions { public static bool IsEmpty<T>( this IList<T> self ) { return self.Count == 0; } } var x = new int[ 0 ]; var y = new int[ 1 ]; x.IsEmpty(); // True y.IsEmpty(); // False</t></t>

【C#】ジェネリッククラスの名前を名前空間と型引数付きで返す拡張メソッド

var x = new List<int>(); var y = new Dictionary<int, string>(); print( x.GetType().ToString() ); // System.Collections.Generic.List`1[System.Int32] print( y.GetType().ToString() ); // System.Collections.Generic.Dictionary`2[System.Int32,System.String] 型情</int,></int>…

【C#】ジェネリッククラスの名前を型引数付きで返す拡張メソッド

var x = new List<int>(); var y = new Dictionary<int, string>(); print( x.GetType().Name ); // List`1 print( y.GetType().Name ); // Dictionary`2 型情報をType.GetType()で取得して Type.Nameを参照することで 型の名前を表す文字列が取得可能ですが、ジェネリッククラ</int,></int>…

【Unity】Component型のインスタンスのnullチェックを省略可能な拡張メソッド

// コンポーネントからBoxColliderを取得する // コンポーネントがnullの場合は何もしない BoxCollider result = null; if ( com != null ) { result = com.GetComponent<BoxCollider>(); } 下記の拡張メソッドを使用することで Component型のインスタンスの上記のようなn</boxcollider>…

【Unity】GameObject型のインスタンスのnullチェックを省略可能な拡張メソッド

// ゲームオブジェクトをアクティブにする // ゲームオブジェクトがnullの場合は何もしない if ( go != null ) { go.SetActive( true ); } // ゲームオブジェクトからBoxColliderを取得する // ゲームオブジェクトがnullの場合は何もしない BoxCollider resu…

【Unity】コンポーネントを破棄する拡張メソッド

var character = gameObject.GetComponent<Character>(); // 従来の方法 GameObject.Destroy( character ); // 拡張メソッドの方法 character.Destroy();</character>

【Unity】NGUIで使用可能なBBCodeを文字列から削除して返す拡張メソッド

using System.Text.RegularExpressions; public static class StringExtensions { private const RegexOptions OPTIONS = RegexOptions.IgnoreCase; public static string RemoveBBCode( this string self ) { self = Regex.Replace( self, @"\[b\](.*)\[\/b…

【Unity】Unity 5.1 新機能「UnityEngine.Assertions.Must.MustExtensions」

Unity 5.1 で「UnityEngine.Assertions.Must.MustExtensions」が追加されました このクラスを使用することで値が正常であるかどうかを確認できます 値が不正の場合はメッセージを投げます 関数 説明 MustBeNull 値がnullであることを保証します MustNotBeNul…

【C#】引数にnullを渡してもエラーにならないContainsKeyの拡張メソッド

using System.Collections.Generic; public static class DictionaryExtensions { public static bool ContainsKeyNullable<TKey, TValue>( this Dictionary<TKey, TValue> self, TKey key ) { if ( key == null ) { return false; } return self.ContainsKey( key ); } }</tkey,></tkey,>

【C#】Dictionaryに既に指定したキーが存在する場合は代入するAdd関数の拡張メソッド

using System.Collections.Generic; public static class DictionaryExtensions { public static void AddOrReplace<TKey, TValue>( this Dictionary<TKey, TValue> self, TKey key, TValue value ) { if ( self.ContainsKey( key ) ) { self[ key ] = value; } else { self.Add( key, va</tkey,></tkey,>…

【Unity】OnGUIで表示するテキストの幅と高さをGUIStyleから取得する拡張メソッド

using UnityEditor; using UnityEngine; public sealed class ExampleClass : EditorWindow { [MenuItem( "Tools/Example" )] private static void Example() { GetWindow<ExampleClass>(); } private void OnGUI() { var text = "ピカチュウ" ; var size = EditorStyles.l</exampleclass>…

【Unity】TransformのTranslate関数の拡張メソッド

using UnityEngine; public static class TransformExtensions { /// <summary> /// X 軸方向に移動します /// </summary> public static void TranslateX( this Transform self, float x ) { self.Translate( x, 0, 0 ); } /// <summary> /// Y 軸方向に移動します /// </summary> public static v…

【C#】最小値を持つ要素を全て返す拡張メソッド

using System; using System.Collections.Generic; using System.Linq; public static class IEnumerableExtensions { public static IEnumerable<TSource> MinElementsBy<TSource, TResult>( this IEnumerable<TSource> source, Func<TSource, TResult> selector ) { var value = source.Min( selector ); return s</tsource,></tsource></tsource,></tsource>…

【C#】最大値を持つ要素を全て返す拡張メソッド

using System; using System.Collections.Generic; using System.Linq; public static class IEnumerableExtensions { public static IEnumerable<TSource> MaxElementsBy<TSource, TResult>( this IEnumerable<TSource> source, Func<TSource, TResult> selector ) { var value = source.Max( selector ); return s</tsource,></tsource></tsource,></tsource>…

【C#】指定されたインデックスに要素が存在するかどうかを返す拡張メソッド

using System.Collections.Generic; public static class IListExtensions { /// <summary> /// 指定されたインデックスに要素が存在する場合に true を返します /// </summary> public static bool IsDefinedAt<T>( IList<T> self, int index ) { return index < self.Count; } }</t></t>

【C#】配列やリストのすべての要素に対して指定された関数を適用する拡張メソッド

using System; using System.Collections.Generic; public static class IEnumerableExtensions { /// <summary> /// リストのすべての要素に対して指定された関数を適用します /// </summary> public static void Apply<T>( this IList<T> list, Func<T, int, T> func ) { for ( int i = 0; i < </t,></t></t>…

【C#】複数のシーケンスを連結して返す関数

using System.Collections.Generic; public static class IEnumerableExtensions { public static IEnumerable<TSource> Concat<TSource>( params IEnumerable<TSource>[] sources ) { foreach ( var source in sources ) { foreach ( var n in source ) { yield return n; } } } }</tsource></tsource></tsource>

【C#】指定されたシーケンスから条件を満たさない要素を全て返す拡張メソッド

using System; using System.Collections.Generic; using System.Linq; public static class IEnumerableExtensions { /// <summary> /// 指定されたシーケンスから条件を満たさない要素を全て返します /// </summary> public static IEnumerable<TSource> WhereNot<TSource, TResult>( this IEnumerable<TSource> so</tsource></tsource,></tsource>…

【C#】シーケンスの先頭に値を追加して返す拡張メソッド

using System.Collections.Generic; public static class IEnumerableExtensions { public static IEnumerable<TSource> StartWith<TSource>( this IEnumerable<TSource> source, params TSource[] value ) { foreach ( var n in value ) { yield return n; } foreach ( var n in source</tsource></tsource></tsource>…

【C#】Unicode 文字列から Shift-JIS 文字列に変換して返す拡張メソッド

using System.Text; public static class StringExtensions { public static string ToShiftJis( this string unicodeStrings ) { var unicode = Encoding.Unicode; var unicodeByte = unicode.GetBytes( unicodeStrings ); var s_jis = Encoding.GetEncodin…

【C#】文字列を指定した文字数で分割する拡張メソッド

public static class StringExtensions { public static string[] SubstringAtCount( this string self, int count ) { var result = new List<string>(); var length = ( int )Math.Ceiling( ( double )self.Length / count ); for ( int i = 0; i < length; i++ ) </string>…