(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発しているゲームです!


C#

enumのビットフラグでフラグを追加、削除する拡張メソッド【C#】【拡張メソッド】

拡張メソッドとは はじめに C#ではenumを使ってビット(2進数)フラグを簡単に実装出来ます。 今回はそのビットフラグでフラグを追加&削除する拡張メソッドの紹介です! SampleFlag flag = SampleFlag.Flag1; Debug.Log($"{flag}"); //フラグ2追加 EnumExtensi…

ConditionalAttributeで複数のシンボルのANDやORを実装する方法【C#】【属性】

属性とは この記事でのバージョン Unity 2022.2.8f1 はじめに C#ではConditionalAttributeという属性を使う事で特定のシンボルが定義されていない時にメソッドの呼び出しを無視する事が出来ます。 指定した条件付きコンパイル シンボルが定義されていない場…

返り値を複数返したい時や値のスワップ(入れ替え)をしたい時はTuple(タプル)がオススメ【Unity】【C#】

この記事でのバージョン Unity 2021.3.11f1 はじめに 先日Unity公式のYoutubeチャンネルにC#のTuple(タプル)に関する動画が上がっていました。 自分は全然Tupleを使いこなせていなかったので、勉強がてら記事にまとめてみました! Tupleとは

文字列を比較する際に大文字小文字を区別しない、全角半角を区別しない、ひらがなカタカナを区別しない、空白や記号を無視を無視する【C#】

C#

はじめに C#で文字列を比較する際は、普通は全角半角やひらがなカタカナを区別しませんが、 //てきすと と テキスト が同じ文字列か比較 var text1 = "てきすと"; var text2 = "テキスト"; //そのまま比較したら、もちろん違う文字列と判定 Debug.Log($"{text1} と {…

5,6,7,8のような連番のListや配列をEnumerable.Rangeを使って簡単かつスマートに作る方法【C#】【LINQ】

LINQとは はじめに C#で「5~8の連番のListが欲しい」みたいな時は素直にやると以下のような感じになるかと思います。 //5〜8の連番のListを作成 var list = new List<int>(); for (int i = 5; i <= 8; i++) { list.Add(i); } 特にこれでも問題はないのですが、今</int>…

任意の値に最も近い値を取得するLINQの拡張メソッド【Unity】【C#】【LINQ】【拡張メソッド】

拡張メソッドとは LINQとは はじめに LINQには同じ値を取得するというメソッドはありますが、 //検索対象のList var list = new List<int>() { -11, 0, 5, 8, 24, 100 }; //Listの中から0を取得(なければデフォルト値) var targetValue = list.FirstOrDefault(val</int>…

自動でソートされるSortedDictionaryと登録順が保証されindexでアクセス出来るOrderedDictionary【C#】

C#

はじめに C#にはKeyとValueをセットで登録してデータを保持するDictionaryがありますが、(※Unity上で動かしているので、ログの表示にDebug.Logを使っています。) //Dictionary作成 var dictionary = new Dictionary<string, int>() { {"Key1", -5}, {"Key2", 8}, {"Key3",</string,>…

Listや配列の要素を連結するString.Join【Unity】 【C#】

この記事でのバージョン Unity 2020.3.25f1 はじめに 今回は「Listの中身を見たいがDebug.Logにそのまま突っ込んでも確認出来ない」みたいな時に使える var list = new List<string>() { "aaa", "123", "あいう" }; //Listの中身を確認したいが、これだと出来ない De</string>…

インスタンスを生成して処理ごとに乱数(ランダムな数)を分ける【Unity】【C#】

この記事でのバージョン Unity 2021.1.23f1 はじめに 以前Unityで作ってるゲームで「30%の確率でアイテム取得する」みたいな時に使える確率を使って何かを判定する方法とちょっとした自作の確率判定用クラスを紹介しました。 しかしこの時はUnityのRandomと…

小数の桁数を指定して文字列にする際に右端を0にしない方法【C#】

C#

はじめに C#で小数を含んだ値を文字列にする場合、以下のように簡単に桁数を指定する事が出来ますが、(※Unity上で動かしているので、ログの表示にDebug.Logを使っています。) //てきとうな小数点を含んだ値 float value = 0.123456789f; //小数点を3桁目まで…

LINQの拡張メソッドの作り方と最大値(最小値)を持つ要素の取得【C#】【LINQ】【拡張メソッド】

拡張メソッドとは LINQとは はじめに LINQのMaxやMinを使うこと最大値や最小値を取得する事が可能ですが、 //てきとうなリスト var list = new List<int>() {1, 2, 5, 125, -52, 58, -4, 8, 100}; //最大値と最小値を取得しログ表示 Debug.Log($"Max : {list.Max(</int>…

文字列と数字の相互変換と小数を変換する時の問題とその対処法【C#】

C#

はじめに 今回はC#で文字列を数字へ変換する方法と、少数を変換する時の問題とその対処法についての紹介です。 なお、Unity上で動かしているので、ログの表示にDebug.Logを使っています。 数字の文字列への変換

重複があっては困る状況で利用されるほぼ一意である識別子、GUIDを生成する【C#】

C#

はじめに 以前、PlayFabのログイン処理を実装する際に自前でカスタムID、つまりGUIDを生成していました。 その後、C#(.Net)にGUIDの構造体があるという事を知ったので、今回はそれを試してみようという感じの記事。 なお、Unityの各アセットにあるGUIDを生成…

タイムスタンプ(作成日、変更日、最後に開いた日)を基準にファイルを古い順や新しい順にソート【C#】【LINQ】

LINQとは はじめに 今回はファイルを作成した日、変更した日、最後に開いた日といういわゆるタイムスタンプを基準にC#でファイルを並び替える方法の紹介です。 なお、Unity上で動かしているので、ログの表示にDebug.Logを使っています。 タイムスタンプの取得

UnityでWindowsの区切り文字(\)が紛れ込まないように、色々なパスを扱う【Unity】【C#】

この記事でのバージョン Unity 2018.4.13f1 はじめに Unityはパスの区切り文字に/を使いますが、これはMacでもWindowsでも共通です。例えばAssetDatabase.GetAssetPathを使って、アセットのパスを取得してみると以下のような感じでMacでもWindowsでも共通の…

呼び出し元のファイルのパス、メソッド名、行数を取得する属性CallerFilePath、CallerMemberName、CallerLineNumber【C#】【属性】【Unity】

属性とは この記事でのバージョン Unity 2018.4.13f1 はじめに 以前「移動する可能性のある任意のアセットやディレクトリ(フォルダ)のパスを取得する方法」という記事を投稿した際に CallerFilePathというものの存在を知りました。 わたしはCallerFilePathを…

Listの順番を反転させる(中身は変えないVerも)【C#】

C#

はじめに 以前C#のListの反転については書いたのですが、 ちょっと追加したい内容があったので、今回は書き直し記事的なやつです。 List の反転

外部からは値が参照出来ない形に実装されているScriptableObject等の内容を無理やり取得する【Unity】【ScriptableObject】【エディタ拡張】【C#】

この記事でのバージョン Unity 2018.4.8f1 はじめに アセットストアのアセットや外部SDKなどをUnityで使う際、ScriptableObjectが使われてる事はよくあります。 そしてそのScriptableObjectの値を使いたいのに、外部からは取得出来ない形に実装されていると…

列挙型(enum)の項目数取得したり、ランダムに取得したり、全項目を取得したり、番号や文字列から変換したり【C#】

C#

エディタ拡張とは この記事でのバージョン Unity 2018.3.4f1 はじめに 今回は列挙型(enum)の項目数取得したり、ランダムに取得したりといったenumの汎用的な便利メソッドをまとめた便利クラスの紹介です! 前にも似たような記事を書きましたが、 これらのま…

LINQの遅延実行&即時実行とforeach+遅延実行の問題【C#】【LINQ】

LINQとは はじめに 今回はLINQの遅延実行と即時実行についての話。LINQを使う上で知らなくてもわりとどうにかなる場合が多いですが、かなり大切な概念です。 ちなみに、「実戦で役立つ C#プログラミングのイディオム/定石&パターン」にも同様の項目があり、 …

引数でデリゲート(≒ラムダ式)を受け取れるList<T>のメソッド【C#】

C#

はじめに 今回はタイトル通り、引数でデリゲート(≒ラムダ式)を受け取れるListのメソッドの紹介です!ようは「Listにはこんな便利なメソッドがあるよ〜」みたいな話です。 ちなみに、「実戦で役立つ C#プログラミングのイディオム/定石&パターン」に同様の項…

enumをジェネリック(Generics)で使う際のアレコレ【C#】

C#

はじめに 今回はenumをジェネリック(Generics)で使いたい時の話。ちなみにジェネリックとは、いろいろな型に対応したい時に使うものです。 型だけ違って処理の内容が同じようなものを作るときに使う。 つまり以下のように色々なenumに対応したいという場合の…

プログラムでファイルサイズを取得する【Unity】【C#】

エディタ拡張とは この記事でのバージョン Unity 2017.2.0f3 はじめに 今回はファイルのサイズをプログラムから取得する方法です!なお、Unityでの用途は基本的にエディタ拡張だと思います。 FileInfo

文字列のバイト数を取得【C#】

C#

はじめに 今回はタイトル通り、文字列のバイト数を取得する方法のご紹介です! GetByteCount

Serializableなクラスをフィールドにしたら、nullなのにコンストラクタが実行される件【C#】【Unity】【トラブルシューティング】

この記事でのバージョン Unity 2017.1.0f3 はじめに 今回はタイトル通り、Serializableなクラスをフィールドにしたら、nullなのにコンストラクタが実行された話です。 コンストラクタが実行される

属性(Attribute)とは【C#】【Unity】【属性】

この記事でのバージョン Unity 5.6.1f1 はじめに 今回はタイトル通り、属性(Attribute)とはなんぞや?という感じの記事です。なお、基本的にUnity+C#での話になりますので、あしからず。 目次 はじめに 目次 属性とは 使い方 オリジナル属性の作り方 Inspect…

enumのToStringが遅いって本当ですか?【C#】【Unity】【拡張メソッド】【最適化】

拡張メソッドとは この記事でのバージョン Unity 5.6.1f1 はじめに enumのToStringは遅いという話を耳にしたので、気になって調べてみた系の記事です!ちなみに、以前にenumをkeyにしたDictionaryが遅いという話も記事にしてました。 そもそものenumのToStri…

カテゴリ別、厳選記事一覧【Unity】【エディタ拡張】【C#】

https://* はじめにこのブログに投稿した記事の中から、人気があったモノや有益っぽい気がするモノを厳選し、カテゴリ別にまとめてみました! 目次 目次 Unityの機能 Unityの設定 Unityでの実装 Unity用便利クラス エディタ拡張 エディタ拡張で作った便利機…

コンストラクタの継承【C#】

C#

はじめに 今回はC#でコンストラクタの継承を行う方法のご紹介です! コンストラクタの継承

Listを反転させる【C#】

C#

↓新しく書き直しました!↓ 今回はListの小ネタで、中身を反転させる方法のご紹介です!やり方は簡単、Reverseというメソッドを使うだけです。 //リストを作成 List<int> list = new List<int>(); list.Add(1); list.Add(2); list.Add(3); //中身を列挙 foreach (int nu</int></int>…