コガネブログ

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

C#

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

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

【C#】パスワードのようなランダムな文字列を生成して返す関数

C#

public static class StringUtils { private const string PASSWORD_CHARS = "0123456789abcdefghijklmnopqrstuvwxyz"; public static string GeneratePassword( int length ) { var sb = new System.Text.StringBuilder( length ); var r = new System.Rand…

【Unity】Tuple を実装する

Tupleクラスは .NET Framework 4.0 から追加されたため .NET Framework 3.5 までの機能しか使えないUnityでは使用できません そのため、Unity でTupleを使用したい場合は 自前で実装する必要がありますが 個人的には Gist で公開されている下記のソースコー…

【C#】デリゲートに登録した処理が期待通りに呼び出されない場合の対処方法

C#

期待した処理が呼び出されない Action onLog = null; Action onClick = null; onClick += onLog; onLog += () => Debug.Log( "ピカチュウ" ); onClick(); Debug.Log( "ピカチュウ" )は呼び出されない onClickにonLogを登録したタイミングでonLogはnullのため…

【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】名前付き引数とref、outキーワードを併用するとエラー

public class ExampleClass { public ExampleClass() { var str = ""; // error CS1525: Unexpected symbol `ref' Example( str1 : ref str, str2 : out str ); } public void Example( ref string str1, out string str2 ) { str2 = ""; } } Unityでは名前…

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

【参考書籍】2014年度に購入した参考書籍まとめ

Unity UnityゲームUI実践ガイド 開発者が知っておきたいGUI構築の新スタンダード作者: 池和田有輔,時村良平出版社/メーカー: エムディエヌコーポレーション発売日: 2015/03/06メディア: 単行本この商品を含むブログ (3件) を見る Unityではじめる2Dゲーム作…

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

【Unity】パフォーマンス改善 文字列連結編

Unity+C# でゲームを開発している場合 StringBuilder クラスを使用して文字列連結することで 処理速度が高速化し、ガベージコレクションの実行回数を削減できます 検証用スクリプト string クラスの文字列連結 using System; using UnityEngine; public clas…

【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#】1 つのキーに対して複数の値を登録できる Dictionary を実装する

C#

var m = new MultiDictionary<string, string>(); m.Add( "ほのお", "ヒトカゲ" ); m.Add( "ほのお", "リザード" ); m.Add( "ほのお", "リザードン" ); m.Add( "でんき", "ピカチュウ", "ライチュウ" ); m.Remove( "でんき", "ライチュウ" ); m.Remove( "ほのお" ); m.Clear(</string,>…

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

【おすすめスライド】UnityでのLINQ活用例

LINQでの活用例 from Ryota Murohoshi

【Unity】「ニコニ立体ちゃんのお天気情報」Android版を公開しました

日曜日に時間があったので一度作ってみたかった 天気予報アプリを作成してみました 現在は Google Play で公開しています 参考アプリ 「ユニティちゃんのお天気情報」を参考にさせて頂きました https://itunes.apple.com/jp/app/yunitichannoo-tian-qi-qing/…

【C#】指定したいずれかの変数がnullの場合にtrueを返す関数

C#

using System.Linq; public static class Utils { public static bool AnyNull( params object[] objects ) { return objects.Any( c => c == null ); } } //if ( a == null || b == null || c == null ) //{ //} if ( Utils.AnyNull( a, b, c ) ) { }

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

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

【C#】指定されたパス文字列から拡張子を削除して返す関数

C#

using System.IO; public static class PathUtils { /// <summary> /// 指定されたパス文字列から拡張子を削除して返します /// </summary> public static string GetPathWithoutExtension( string path ) { var extension = Path.GetExtension( path ); if ( string.IsNullOrEm…

【C#】文字列をBase64でエンコード、デコードするクラス

C#

using System; using System.Text; /// <summary> /// 文字列をBase64でエンコード、デコードするクラス /// </summary> public class Base64Encoder { private static readonly Encoding encoding = Encoding.UTF8; /// <summary> /// Base64 でエンコードします /// </summary> public static str…

【Unity】経過時間を計測するクラス

using System; /// <summary> /// 経過時間を計測するためのクラス /// </summary> public sealed class SimpleStopWatch { private DateTime mStartedDateTime; /// <summary> /// 計測された経過時間を返します /// </summary> public string ElapsedTime { get; private set; } /// <summary> /// 経過時</summary>…

2014年記事まとめ

2013年の12月からUnityやC#のことを中心にこのブログを書き始めましたが 記事が溜まってきたので1年の振り返りも兼ねて一覧にしました このブログを参考にしてくださっている方のお役に立てば幸いです 来年もゲーム開発に関する記事を書いていくつもりなので…

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

【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】指定された 16 進数を Color 型に変換する関数 その3

using System.IO; using UnityEngine; public static class ColorUtils { /// <summary> /// 指定された 16 進数を色に変換します /// </summary> /// <example> /// <code> /// // RGBA(1.000, 0.502, 0.000, 1.000) /// ColorUtils.ToRGB( 0xFF8000 ) /// </code> /// </example> public static Color ToRGB( u…

【Unity】指定された 16 進数を Color 型に変換する関数 その2

using System.IO; using UnityEngine; public static class ColorUtils { /// <summary> /// 指定された 16 進数を色に変換します /// </summary> /// <example> /// <code> /// // RGBA(1.000, 0.502, 0.000, 1.000) /// ColorUtils.ToARGB( 0xFF8000FF ) /// </code> /// </example> public static Color ToRGB…

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

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

【Unity】指定された 16 進数を Color 型に変換する関数

using System.IO; using UnityEngine; public static class ColorUtils { /// <summary> /// 指定された 16 進数を色に変換します /// </summary> /// <example> /// <code> /// // RGBA(1.000, 0.502, 0.000, 1.000) /// ColorUtils.ToARGB( 0xFFFF8000 ) /// </code> /// </example> public static Color ToARG…