コガネブログ

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

【C#】StringBuilderでコレクション初期化子を使用できるようにする独自クラス

C#

// Before var builder = new StringBuilder(); builder.AppendLine( "1. フシギダネ" ); builder.AppendFormat( "2. {0}", "フシギソウ" ).AppendLine(); builder.AppendFormat( "3. {0}", "フシギバナ" ).AppendLine(); Console.WriteLine( builder ); // …

【Unity】UnityでC#5.0と6.0の機能を使用できるようにする

https://bitbucket.org/alexzzzz/unity-c-5.0-and-6.0-integration 上記のBitbucketで公開されている「Unity C# 5.0 and 6.0 Integration」を Unityプロジェクトに追加することで、 UnityでC#5.0と6.0の機能が使用できるようになります 導入手順 下記のペー…

【Unity】並列でタスクを管理するシリアライズ可能な独自クラス

関連記事

【Unity】直列でタスクを管理するシリアライズ可能な独自クラス

関連記事

【C#】コレクション初期化子が使用可能な並列でタスクを管理する独自クラス

C#

var task = new MultiTask { onEnded => { Debug.Log( "1" ); onEnded(); }, onEnded => { Debug.Log( "2" ); onEnded(); }, onEnded => { Debug.Log( "3" ); onEnded(); }, }; task.Play( () => Debug.Log( "完了" ) ); 関連記事

【C#】コレクション初期化子が使用可能な直列でタスクを管理する独自クラス

C#

var task = new SingleTask { onEnded => { Debug.Log( "1" ); onEnded(); }, onEnded => { Debug.Log( "2" ); onEnded(); }, onEnded => { Debug.Log( "3" ); onEnded(); }, }; task.Play( () => Debug.Log( "完了" ) ); 関連記事

【C#】独自のクラスでコレクション初期化子を使用できるようにする その2

C#

using System; using System.Collections; using System.Collections.Generic; class MyList : IEnumerable { private List<int> mList = new List<int>(); public void Add( int item ) { mList.Add( item ); } public void Add( int item1, int item2 ) { mList.Add(</int></int>…

【Unity】DictionaryでIEqualityComparerを使用した場合と使用しなかった場合のどちらが高速か検証しました

はじめに Unite 2016の「モバイル端末向けのUnityアプリケーションの最適化実践テクニック」 の講演において、Dictionaryのキーに列挙型を使用した場合、 ボックス化が発生してしまい、メモリを余分に消費してしまうとのことだったので ボックス化を回避する…

【Unity】【ガベージコレクション】Dictionary のキーに列挙型を使用した時のボックス化によるメモリ消費を回避する

はじめに Unite 2016の「モバイル端末向けのUnityアプリケーションの最適化実践テクニック」 の講演において、Dictionaryのキーに列挙型を使用した場合、 ボックス化が発生してしまい、メモリを余分に消費してしまうとのことでした ボックス化が発生してしま…

【Unity】【Tips】汎用関数を定義してInstantiateを短く記述する

Before var goalEffect = GameObject.Instantiate( goalEffectPrefab ) as GameObject; After public static class UnityObjectUtils { public static GameObject Instantiate( UnityEngine.Object original ) { return UnityEngine.Object.Instantiate( ori…

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