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

コガネブログ

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

【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>…

【Unity】DateTime 型をわかりやすい形式の文字列に変換する拡張メソッド

var dt = new DateTime( 2013, 3, 3, 12, 34, 56 ); Debug.Log( dt.ToString() ); // 3/3/2013 12:34:56 PM Debug.Log( dt.ToShortDateString() ); // 3/3/2013 Debug.Log( dt.ToLongDateString() ); // Sunday, March 03, 2013 Debug.Log( dt.ToShortTimeSt…

【C#】シーケンスが空かどうかを返す拡張メソッド

using System.Collections.Generic; using System.Linq; public static class IEnumerableExtensions { public static bool IsEmpty<TSource>( this IEnumerable<TSource> source ) { return !source.Any(); } } var array = new int[ 0 ]; if ( array.IsEmpty() ) { }</tsource></tsource>

【C#】float 型の値が正常ではない場合はデフォルト値を返す拡張メソッド

public static class FloatExtensions { /// <summary> /// <para>指定された float 型の値を返します</para> /// <para>指定された float 型の値が不正な値の場合はデフォルト値を返します</para> /// </summary> public static float GetValueOrDefault( this float self, float defaultValue = 0 ) { if…

【C#】float 型の値が正常な値かどうかを返す拡張メソッド

public static class FloatExtensions { /// <summary> /// 指定された float 型の値が正常な値かどうかを返します /// </summary> public static bool IsValidated( this float self ) { return !float.IsInfinity( self ) && !float.IsNaN( self ); } } var f = float.NaN; if…

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

using System; public static class MulticastDelegateExtensions { public static int GetLength( this MulticastDelegate self ) { if ( self == null || self.GetInvocationList() == null ) { return 0; } return self.GetInvocationList().Length; } } …

【C#】 リストの末尾から指定された数の要素を削除する拡張メソッド

using System; using System.Collections.Generic; public static class ListExtensions { public static void DropRight<T>( this List<T> self, int count ) { self.RemoveRange( self.Count - count, count ); } } var list = new List<string> { "フシギダネ", "フシギ</string></t></t>…

【C#】リストの先頭から指定された数の要素を削除する拡張メソッド

using System; using System.Collections.Generic; public static class ListExtensions { public static void Drop<T>( this List<T> self, int count ) { self.RemoveRange( 0, count ); } } var list = new List<string> { "フシギダネ", "フシギソウ", "フシギバナ", "</string></t></t>…

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

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

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

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

【C#】文字列内の改行文字を削除した文字列を返す拡張メソッド

public static class StringExtensions { /// <summary> /// 文字列内の改行文字を削除した文字列を返します /// </summary> public static string RemoveNewLine( this string self ) { return self.Replace( "\r", "" ).Replace( "\n", "" ); } } var str = "ピカチュウ\nカイ…

【Unity】Dictionary 型のインスタンスからランダムに値を取得する拡張メソッド

using System.Collections.Generic; using System.Linq; public static class DictionaryExtensions { /// <summary> /// Dictionary 型のインスタンスからランダムに値を取得します /// </summary> public static TValue ElementAtRandom<TKey, TValue>( this Dictionary<TKey, TValue> self ) { return sel</tkey,></tkey,>…

【Unity】インターフェイスを指定して子オブジェクトから複数のコンポーネントを取得する拡張メソッド

using System.Collections.Generic; using UnityEngine; public static class GameObjectExtensions { /// <summary> /// インターフェイスを指定して子オブジェクトから複数のコンポーネントを取得します /// </summary> public static T[] GetInterfacesOfComponentInChildren<T></t>…

【Unity】インターフェイスを指定して子オブジェクトからコンポーネントを取得する拡張メソッド

using UnityEngine; public static class GameObjectExtensions { /// <summary> /// インターフェイスを指定して子オブジェクトからコンポーネントを取得します /// </summary> public static T GetInterfaceOfComponentInChildren<T>( this GameObject self, bool includeInactiv</t>…

【Unity】インターフェイスを指定して複数のコンポーネントを取得する拡張メソッド

using UnityEngine; public static class GameObjectExtensions { /// <summary> /// インターフェイスを指定して複数のコンポーネントを取得します /// </summary> public static T[] GetInterfacesOfComponent<T>( this GameObject self ) where T : class { var result = new Li</t>…

【Unity】インターフェイスを指定してコンポーネントを取得する拡張メソッド

using UnityEngine; public static class GameObjectExtensions { /// <summary> /// インターフェイスを指定してコンポーネントを取得します /// </summary> public static T GetInterfaceOfComponent<T>( this GameObject self ) where T : class { foreach ( var n in self.GetC</t>…

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

using UnityEngine; public static class GameObjectExtensions { /// <summary> /// 破棄します /// </summary> public static void Destroy( this GameObject self ) { GameObject.Destroy( self ); } } // GameObject 型の static 関数で呼び出し GameObject.Destroy( go ); …

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

using UnityEngine; public static class GameObjectExtensions { /// <summary> /// 新しいシーンを読み込む時に自動で破棄されないようにします /// </summary> public static void DontDestroyOnLoad( this GameObject self ) { GameObject.DontDestroyOnLoad( self ); } } /…

【C#】リスト内に指定された要素があるか調べて存在する場合はその要素をリストから削除する拡張メソッド

using System; using System.Collections.Generic; public static class ListExtensions { /// <summary> /// <para>リスト内に指定された要素があるか調べて</para> /// <para>存在する場合はその要素をリストから削除します</para> /// </summary> public static void Remove<T>( this List<T> self, Predicate<T></t></t></t>…

【Unity】Vector3 型の x, y, z がすべて同じ値かどうかを返す拡張メソッド

using UnityEngine; public static class Vector3Extensions { public static bool IsUniform( this Vector3 self ) { return Mathf.Approximately( self.x, self.y ) && Mathf.Approximately( self.x, self.z ); } } var v1 = new Vector3( 1, 1, 1 ); var …

【Unity】自分自身を含むすべての子オブジェクトのレイヤーを設定する拡張メソッド

using UnityEngine; public static class GameObjectExtensions { /// <summary> /// 自分自身を含むすべての子オブジェクトのレイヤーを設定します /// </summary> public static void SetLayerRecursively( this GameObject self, int layer ) { self.layer = layer; foreach …

【Unity】レイヤー名を使用してレイヤーを設定する拡張メソッド

using UnityEngine; public static class GameObjectExtensions { /// <summary> /// レイヤー名を使用してレイヤーを設定します /// </summary> public static void SetLayer( this GameObject self, string layerName ) { self.layer = LayerMask.NameToLayer( layerName ); }…

【C#】配列内の要素を複数キーでソートする拡張メソッド

using System; using System.Collections.ObjectModel; public static class ArrayExtensions { /// <summary> /// 配列内の要素を複数キーでソートします /// </summary> public static void Sort<TSource, TResult>( this TSource[] array, Func<TSource, TResult> selector1, Func<TSource, TResult> selector2 ) where TResult : IC</tsource,></tsource,></tsource,>…

【C#】Dictionary から指定したキーの要素を削除する前に関数を呼び出す拡張メソッド

using System; using System.Collections.Generic; public static class DictionaryExtensions { /// <summary> /// 指定したキーを持つ値を削除します。 /// 削除前に指定された関数を呼び出します /// </summary> public static void Remove<TKey, TValue>( this Dictionary<TKey, TValue> self, TKey key,</tkey,></tkey,>…

【C#】指定されたいずれかの文字列を含むかどうかを返す拡張メソッド

using System; using System.Linq; public static class StringExtensions { public static bool IncludeAny( this string self, params string[] list ) { return list.Any( c => self.Contains( c ) ); } } var str = "ピカチュウカイリュー"; Debug.Log( …

【Unity】孫オブジェクトを除くすべての子オブジェクトを取得する拡張メソッド

using System.Collections.Generic; using UnityEngine; public static class GameObjectExtensions { /// <summary> /// 孫オブジェクトを除くすべての子オブジェクトを返します /// </summary> public static GameObject[] GetChildrenWithoutGrandchild( this GameObject sel…

【C#】条件を満たす場合にのみリストに要素を追加する拡張メソッド

using System.Collections.Generic; public static class ListExtensions { public static void AddIfTrue<T>( this List<T> self, bool condition, T item ) { if ( !condition ) { return; } self.Add( item ); } } var list = new List<int>(); list.AddIfTrue( true</int></t></t>…

【C#】List を指定されたパラメータでソートできるようにする拡張メソッド

using System; using System.Collections.Generic; public static class ListExtensions { public static void Sort<TSource, TResult>( this List<TSource> self, Func<TSource, TResult> selector ) where TResult : IComparable { self.Sort( ( x, y ) => selector( x ).CompareTo( selector( y ) ) ); </tsource,></tsource></tsource,>…

【C#】Dictionary にキーが存在する場合にのみ関数を呼び出す拡張メソッド

using System; using System.Collections.Generic; public static class DictionaryExtensions { /// <summary> /// 指定されたキーが格納されている場合は指定された関数を呼び出します /// </summary> public static void SafeCall<TKey, TValue>( this Dictionary<TKey, TValue> self, TKey key, Action<TValue> a</tvalue></tkey,></tkey,>…

【Unity】Dictionary<TKey, TValue> を Hashtable に変換する拡張メソッド

using System.Collections; using System.Collections.Generic; /// <summary> /// Dictionary 型の拡張メソッドを管理するクラス /// </summary> public static class DictionaryExtensions { /// <summary> /// 指定された Dictionary<TKey, TValue> を Hashtable に変換します /// </summary> /// <param name="self">Dictionary<TKey, TValue> </tkey,></param>…

【Unity】Hashtable を Dictionary<string, string> に変換する拡張メソッド

using System.Collections; using System.Collections.Generic; /// <summary> /// Hashtable 型の拡張メソッドを管理するクラス /// </summary> public static partial class HashtableExtensions { /// <summary> /// 指定された Hashtable を Dictionary<string, string> に変換します /// </summary> /// <param name="self">Hashta</param>…

【C#】文字列を指定された回数連結して返す拡張メソッド

using System.Text; public static class StringExtensions { /// <summary> /// 指定された文字列を指定された回数連結して返します /// </summary> public static string Repeat( this string self, int repeatCount ) { var builder = new StringBuilder(); for ( int i = 0;…

【C#】配列やリストの中から指定した範囲の要素を抜き出す

using System.Collections.Generic; using System.Linq; public static class IEnumerableExtensions { /// <summary> /// シーケンスの中から指定した範囲の要素を抜き出す /// </summary> /// <param name="pageNumber">現在のページ番号</param> /// <param name="countPerPage">1 ページあたりに表示する項目の数</param> public static IEnumerab…

【C#】配列やリストから目的の値に最も近い値を取得する拡張メソッド その2

using System; using System.Collections.Generic; using System.Linq; public static class IEnumerableExtensions { #region Nearest /// <summary> /// 目的の値に最も近い値を返します /// </summary> public static int Nearest( this IEnumerable<int> self, int target ) { va</int>…

【C#】配列やリストから目的の値に最も近い値を取得する拡張メソッド

差し替え・Minで目的の値に最も近い値を選ぶ 【▲→川俣晶の縁側→技術関連執筆情報→『【省エネ対応】 C#プログラムの効率的な書き方 LINQ to Objects マニアックス』読者サポート】 using System; using System.Collections.Generic; using System.Linq; publi…

【C#】配列やリストから最小値もしくは最大値を持つ要素を検索する拡張メソッド

using System; using System.Collections.Generic; using System.Linq; public static class IEnumerableExtensions { /// <summary> /// 最小値を持つ要素を返します /// </summary> public static TSource FindMin<TSource, TResult>( this IEnumerable<TSource> self, Func<TSource, TResult> selector ) { return self.Fir</tsource,></tsource></tsource,>…

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

[Flags] private enum JobType // ジョブの種類 { NONE = 1 << 0, // 無効 SOLDIER = 1 << 1, // 王国兵士 SORCERER = 1 << 2, // 魔法使い HUNTER = 1 << 3, // 狩人 MERCENARY = 1 << 4, // 傭兵 } private void Awake() { var jobs = JobType.SOLDIER; //…

【Unity】指定したオブジェクトからルートとなるオブジェクトを取得する拡張メソッド

using UnityEngine; /// <summary> /// GameObject 型の拡張メソッドを管理するクラス /// </summary> public static class GameObjectExtensions { /// <summary> /// ルートとなるオブジェクトを返します /// </summary> public static GameObject GetRoot(this GameObject self) { var t = self.…

【Unity】ローカル座標を維持したまま親オブジェクトを設定する拡張メソッド

using UnityEngine; /// <summary> /// GameObject 型の拡張メソッドを管理するクラス /// </summary> public static class GameObjectExtensions { /// <summary> /// ローカル座標を維持して親オブジェクトを設定します /// </summary> public static void SafeSetParent(this GameObject self, G…

【Unity】指定したゲームオブジェクトから名前で子オブジェクトを検索する拡張メソッド

例えばこれらのオブジェクトが Hierarchy に存在する場合に UIRoot から Button という名前の子オブジェクトを検索する場合、次のように処理を書きますが using UnityEngine; public class UIRoot : MonoBehaviour { private void Awake() { Transform resul…

【Unity】すべての子オブジェクトを取得する拡張メソッド

例えばこれらのオブジェクトが Hierarchy に存在する場合に UIRoot の子オブジェクトをすべて取得したい時があったので 指定したゲームオブジェクトやコンポーネントの子オブジェクトを すべて取得するための拡張メソッドを作成しました using System.Linq; …

【Unity】【NGUI】UIWidgetやUISpriteの上下左右の端の位置を返す拡張メソッド

using System.Linq; using UnityEngine; /// <summary> /// UIWidget 型の拡張メソッドを管理するクラス /// </summary> public static class UIWidgetExtensions { /// <summary> /// ローカル座標系における左端の位置を返します /// </summary> public static float GetLocalLeft(this UIWidget …

【C#】1つのオブジェクトが複数のオブジェクトのいずれかと等しいか判定する拡張メソッド

【C#】1つの文字列が複数の文字列のいずれかと等しいか判定する拡張メソッド - コガネブログ 以前、指定した1つの文字列が複数の文字列のいずれかと等しいかどうかを判定する 拡張メソッドを公開しましたが、文字列以外の型でも使えるジェネリック版を作成し…

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

using System.Collections.Generic; /// <summary> /// Dictionary 型の拡張メソッドを管理するクラス /// </summary> public static class DictionaryExtensions { /// <summary> /// <para>指定したキーと値をディクショナリに追加します</para> /// <para>指定したキーが既に格納されている場合は何もしま</para></summary>…

【C#】配列やリストを逆順に処理する拡張メソッド

var array = new []{ 1, 2, 3, 4, 5 }; for ( int i = array.Length - 1; 0 <= i; i-- ) { Debug.Log( array[ i ] ); // 5 // 4 // 3 // 2 // 1 } 配列やリストを末尾から処理したい場合、上記のようなループ構文を書きますが for ( int i = array.Length - …

【Unity】指定されたゲームオブジェクトがnullまたは非アクティブかどうかを判定する拡張メソッド

using UnityEngine; /// <summary> /// GameObject 型の拡張メソッドを管理するクラス /// </summary> public static class GameObjectExtensions { /// <summary> /// 指定されたゲームオブジェクトが null または非アクティブであるかどうかを示します /// </summary> public static bool IsNullO…