コガネブログ

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

C#

【Unity】【Tips】MonoBehaviourを継承したシングルトンではなくstaticクラスを使用する

Before public class ScoreManager : SingletonMonoBehaviour<ScoreManager> { public int Score { get; set; } } ScoreManager.Instance.Score += 100; After public static class ScoreManager { public static int Score { get; set; } } ScoreManager.Score += 100; と</scoremanager>…

【Unity】【Tips】Mathf.Clampを使用して処理を短く記述する

Before if ( pos.x > 1.5f ) { pos.x = 1.5f; } else if ( pos.x < -1.5f ) { pos.x = -1.5f; } After pos.x = Mathf.Clamp( pos.x, -1.5f, 1.5f );

【Unity】【Tips】拡張メソッドを定義してCollision2DのGetComponentを短く記述する

Before private void OnCollisionEnter2D( Collision2D other ) { var rigidBody = other.gameObject.GetComponent<Rigidbody2D>(); } After public static class Collision2DExtensions { public static T GetComponent<T>( this Collision2D self ) { return self.gameObje</t></rigidbody2d>…

【Unity】【Tips】拡張メソッドを定義して文字列判定を短く記述する

Before if ( other.collider.tag == "Enemy" || other.collider.tag == "Wall" || other.collider.tag == "Bullet" ) { ... } After using System.Linq; public static class GenericExtensions { public static bool ContainsAny<T>( this T self, params T[] </t>…

【C#】GroupByでリストをグループ化する時に複数のキーを指定する

C#

// アイテムタイプ enum ITEM_TYPE { FREE_MONEY, // 無料通貨 PAY_MONEY , // 有料通貨 RECOVERY , // 回復アイテム EQUIPMENT , // 装備アイテム OTHER , // その他 } // アイテム情報 class ItemData { public int mId ; // ID public ITEM_TYPE mType ; …

【C#】並列でタスクを管理する独自クラス

C#

var task = new MultiTask(); task.Add( onEnded => { Debug.Log( "1" ); onEnded(); } ); task.Add( onEnded => { Debug.Log( "2" ); onEnded(); } ); task.Add( onEnded => { Debug.Log( "3" ); onEnded(); } ); task.Play( () => { Debug.Log( "completed…

【C#】直列でタスクを管理する独自クラス

C#

var task = new SingleTask(); task.Add( onEnded => { Debug.Log( "1" ); onEnded(); } ); task.Add( onEnded => { Debug.Log( "2" ); onEnded(); } ); task.Add( onEnded => { Debug.Log( "3" ); onEnded(); } ); task.Play( () => { Debug.Log( "complete…

【C#】リストが変更された時にコールバック関数が呼び出される独自クラス

C#

SelectableList<int> mSelectedList = new SelectableList<int>(); void Awake() { // リストが変更された時に呼び出されるコールバック関数を登録します mSelectedList.mChanged += () => Debug.Log( mSelectedList.Count ); // リストに要素を挿入します mSelectedLi</int></int>…

【C#】値が変更された時にコールバック関数が呼び出される独自クラス

C#

Selectable<int> mSelectedValue = new Selectable<int>(); void Awake() { // 値が変更された時に呼び出されるコールバック関数を登録します mSelectedValue.mChanged += value => Debug.Log( value ); // 値を変更します(コールバック関数が呼び出されます) mSelec</int></int>…

【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 ( u</t></t></t></t>…

【C#】サロゲート文字の場合 true を返す関数「char.IsSurrogate」

C#

if ( char.IsSurrogate( ch ) ) { } UnityでNGUIを使用して入力欄を作成した時に 特定のAndroid端末で絵文字を入力されると アプリが強制終了する不具合に遭遇したため その不具合の回避するために調査している時に知りました

【おすすめスライド】「T4使ってみた」

T4使ってみた from Ryota Murohoshi

【おすすめスライド】「T4 Template 入門」

T4 Template 入門 from Hiroshi Maekawa

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

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

【Unity】error CS8025: Parsing error

ソースコードに全角スペースが入力されている時に遭遇

【C#】List<List<T>>型のインスタンスを平坦化する方法

C#

using System.Collections.Generic; using System.Linq; ... var list = new List<List<int>>(); var result = list.SelectMany( c => c ).ToList();</list<int>

【C#】LitJSONで出力される文字列を整形する

C#

using LitJson; using System.Text; public static class JsonUtils { public static string ToJson<T>( T obj ) { var builder = new StringBuilder(); var writer = new JsonWriter( builder ) { PrettyPrint = true }; JsonMapper.ToJson( obj, writer ); re</t>…

【C#】InvalidCastException: Cannot cast from source type to destination type.

InvalidCastException: Cannot cast from source type to destination type. object型の変数をキャストした時に遭遇 例えば下記のようにint型の値をobject型の変数に代入して 取り出す時に直接float型など別の型にキャストしようとすると発生 int x = 1; obj…

【C#】指定されたファイルのサイズを返す関数

C#

using System.IO; public static class FileInfoUtils { /// <summary> /// 現在のファイルのサイズをバイト単位で取得します /// </summary> public static long GetFileSize( string path ) { return new FileInfo( path ).Length; } }

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

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

【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

【C#】指定したディレクトリ内から指定したいずれかの拡張子を持つすべてのファイルのパスを返す関数

C#

ソースコード using System.IO; using System.Linq; public static class DirectoryUtils { /// <summary> /// <para>指定したディレクトリ内の指定した</para> /// <para>いずれかの拡張子を持つファイル名 (パスを含む) を返します</para> /// </summary> public static string[] GetFiles ( string path…

【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】【C#】Unity で使える拡張メソッドの記事136選

はじめに Unity + C# でスマホゲームを開発している時に作った拡張メソッドに関する記事を136件まとめました 拡張メソッドに興味がある方はぜひ使用してみて頂ければと思います .NET Framework int ラップアラウンド関数を定義する 数値を加算して、範囲を超…

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