コガネブログ

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

【Unity】専門学生からゲーム会社に就職して Unity エンジニアとして働くまでに読んだオススメの C# の本を7冊紹介

はじめに 僕は2009年に専門学校に入学して、2013年にゲーム会社に就職しました そして、2017年の現在まで、主に Unity エンジニアとしてゲームを開発しています 今回はその中で、読んで良かったと思った C# の本を7冊紹介しようと思います 僕がはじめて C# …

【C#】XmlNodeList で LINQ の「Select」「Where」「First」「FirstOrDefault」を使用できるようにする拡張メソッド

ソースコード using System; using System.Collections.Generic; using System.Xml; public static class XmlExt { public static IEnumerable<T> Select<T> ( this XmlNodeList self, Func<XmlNode, T> selector ) { foreach ( XmlNode n in self ) { yield return selector( </xmlnode,></t></t>…

【C#】DateTime が特定の曜日の場合に true を返す拡張メソッド

ソースコード public static class DateTimeExt { public static bool IsMonday( this DateTime self ) { return date.DayOfWeek == DayOfWeek.Monday; } public static bool IsTuesday( this DateTime self ) { return date.DayOfWeek == DayOfWeek.Tuesday…

【C#】明日の DateTime を返す拡張メソッド

ソースコード public static class DateTimeExt { public static DateTime Tomorrow( this DateTime self ) { return value.AddDays( 1 ); } }

【C#】前日の DateTime を返す拡張メソッド

ソースコード public static class DateTimeExt { public static DateTime Yesterday( this DateTime self ) { return value.AddDays( -1 ); } }

【C#】DateTime が指定された期間内の場合に true を返す拡張メソッド

ソースコード public static class DateTimeExt { public static bool IsBetween( this DateTime self, DateTime from, DateTime to ) { return from <= value && to >= value; } }

【C#】XmlAttribute が null ではない場合にのみ Value を返す拡張メソッド

ソースコード using System.Xml; public static class XmlExt { public static string GetValueOrDefault ( this XmlAttribute self, string defaultValue = "" ) { return self != null ? self.Value : defaultValue; } } 使い方 var attr = node.Attribute…

【C#】シーケンスから null の要素を除外する拡張メソッド

ソースコード using System.Collections.Generic; using System.Linq; public static class IEnumerableExt { public static IEnumerable<T> NotNull<T>( this IEnumerable<T> self ) { return self.Where( c => c != null ); } } 使い方 var list = new [] { "フシギ</t></t></t>…

【C#】配列やリストで要素が末尾かどうかを判定できるループ構文の拡張メソッド

ソースコード using System; using System.Collections.Generic; public static class ListExt { public struct ForEachData<T> { private readonly int m_index ; private readonly T m_value ; private readonly bool m_isLast ; public int Index { get { re</t>…

【Unity】【C#】日本語の文字列をソートする時に使用させていただいているプログラム

はじめに ゲーム開発においてアイテムや商品ラインナップを五十音順で並べたい時などに 上記サイト様のプログラムを使用させていただいています 使い方 var list = new [] { "フシギダネ", "ヒトカゲ" , "ゼニガメ" , }; var sortedList = list .OrderBy( c …

【C#】Manatee.Trello を使用して Trello にリストやカードを追加してみる

C#

前回の記事 はじめに 今回は「Manatee.Trello」を使用して、 Trello にリストやカードを追加してみます 検証環境 .NET Framework 4.5.2 Manatee.Trello 1.18.3 Manatee.Trello.ManateeJson 1.8.1 Manatee.Trello.WebApi 1.1.0.1 ソースコード using Manatee.…

【C#】Manatee.Trello を使用して Trello から情報を取得してみる

C#

はじめに 「Manatee.Trello」を使用すると C# で Trello の情報を取得したり Trello にリストやカードを作成したりできるようになります 検証環境 .NET Framework 4.5.2 Manatee.Trello 1.18.3 Manatee.Trello.ManateeJson 1.8.1 Manatee.Trello.WebApi 1.1.…

【C#】「Trello メンバー追加くん」を Github に公開しました

C#

はじめに 「Trello メンバー追加くん」を Github に公開しました Trello では複数のカードにメンバーを一括で追加できないため C# で専用のツールとして作成しました 概要 Trello 内の指定されたメンバーを複数のカードに一括で追加・削除するツールです。 …

【C#】MyTrelloNet(Trello.NET) を使用して Trello にボードやリスト、カードを追加してみる

C#

前回の記事 はじめに 今回は「MyTrelloNet」を使用して、 Trello にボードやリスト、カードを追加してみます 検証環境 .NET Framework 4.6 MyTrelloNet 1.0.8 ソースコード using System.Linq; using TrelloNet; ... // Trello を操作するインスタンスを生成…

【C#】MyTrelloNet(Trello.NET) を使用して Trello から情報を取得してみる

C#

はじめに 「Trello.NET」を使用すると C# で Trello の情報を取得したり Trello にボードやリスト、カードを作成したりできるようになります 上記の「Trello.NET」は 3 年ほど更新されていないようだったので 今回は下記の「MyTrelloNet」を使用していきます…

【Unity】【C#】簡易モンキーテストツールを作りました

はじめに Unity 製のスマホゲームの開発中に使用していた 自作のモンキーテストツールを GitHub に公開しました このツールを使うと指定された範囲内を高速かつランダムにクリックし続けるため ボタンが連打できたり意図しないタイミングで押せてしまったり…

【C#】char 型の数値を int 型に変換する拡張メソッド

ソースコード public static class CharExt { public static int ToInt( this char self ) { return self - '0'; } } 使い方 char ch = '1' int num = ch.ToInt();

【Unity】列挙型とそれに関連する便利なクラスや拡張メソッドを自動生成するエディタ拡張

はじめに public enum JOB_TYPE { NONE , // 不明 SOLDIER , // 王国兵士 SORCERER , // 魔法使い HUNTER , // 狩人 SIZEOF , // 番兵 } 僕は普段のゲーム開発で列挙型を使用する時に 下記のようなクラスや拡張メソッドを使用して処理を記述することが多々あ…

【Unity】gzipで文字列を圧縮してデータ容量を抑える

スクリプト 使い方 using UnityEngine; public class Example : MonoBehaviour { private void Awake() { var rawData = "ピカチュウ"; var compressedData = GZipCompressor.Compress( rawData ); var result = GZipCompressor.Decompress( compressedData …

【Unity】【ガベージコレクション】デリゲートを指定する時に関数名ではなくラムダ式を使用することでGCの発生を抑える

検証用スクリプト using System; class Program { static void Main() { int count = 100000000; //======================================== // 関数名指定 //======================================== for ( int i = 0; i < count; i++ ) { Func( Callba…

【C#】数値を符号付きの文字列に変換する拡張メソッド

/// <summary> /// 指定された数値を符号付きの文字列に変換して返します /// </summary> public static string WithSign( this int self ) { return self != 0 ? self.ToString( "+#;-#;" ) : self.ToString(); }

【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】【ガベージコレクション】ボックス化をなるべく回避してGCの発生を抑える string.Format

ソースコード 検証用スクリプト // string.Format を使用した場合のGC発生回数検証 for ( int i = 0; i < 1000000; i++ ) { string.Format( "{0},{1},{2},{3}", 0, 1, 2, 3 ); } Console.WriteLine( GC.CollectionCount( 0 ) ); // StringUtils.Format を使…

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

Before var form = new WWWForm(); form.AddField( "frameCount", Time.frameCount.ToString() ); form.AddBinaryData( "fileUpload", bytes, "screenShot.png", "image/png" ); After var form = new WWWFormCollection { { "frameCount", Time.frameCount.…