【C#】オープン中のファイルの内容を読み取る

何度も何度も調べなおしてるので自分用のメモです。 他のプロセスが開いているファイルを開こうとすると以下のエラーが発生する。 System.IO.IOException: 別のプロセスで使用されているため、プロセスはファイル 'xxxx' にアクセスできません。 以下のよう…

【Unity】Random.Stateの内容を取得する

Unity の乱数のシードを保持している Random.State という型があります。 定義は以下の通りでシリアライズして保存することはできますが、中身を見ることはできません。中身を認識する必要は本来ありませんが、リフレクションを使えば中身を取得できそうです…

【C#/Unity】重み付き抽選機能を実装する

よくある重み付きの抽選機能の実装例の紹介です。 重み付き抽選とは要素ごとに選ばれる確率が違う抽選方法です。 例えば以下のように各々確率が違うものをランダムで選びます。 Aは50% Bは25% Cは20% Dは5% 確認環境 使い方 実装コード 確認環境 Unity 2022.…

【C#】ListをAsSpanしたい

ハック的な手法で List に AsSpan の拡張メソッドをは生やすことができますが、.NET5からは標準ライブラリでサポートされたので両対応してみます。 public static class ListExtensions { [MethodImpl(MethodImplOptions.AggressiveInlining)] public static…

【C#】アプリを多重起動しないようにする

Mutex を取得して新規に作成できれば新規の起動、取れなかったら 2つめの起動という感じに判断できます。 string key = "application_name"; using (var mutex = new Mutex(true, key, out bool createdNew)) { if (!createdNew) { return; // 多重起動にな…

【Unity】OdinのColorフィールド拡張を無効化する

自分の環境だけかもしれませんが、Unity に Odin という Editor 機能を拡張するアセットを導入すると自作のスクリプトの Color フィールドが Odin の拡張表示に置き換わります。 これによってフィールドの値をコピーするときに形式をいくつか選べるようにな…

【Unity】Hot Reloadアセットのアンインストール方法

今話題のコンパイル時間がなくなって Play の変更が実行中に動作に即座に反映される Hot Reload というアセットのアンインストール方法の紹介です。 assetstore.unity.com PackageManager から削除する PackageManager に Hot Reload の表示が追加されるので…

【Unity】enumの途中にシンボルを追加しても値が変わらないようにする

Unity で enum をインスペクターで使用しているときに、enum の途中にメンバーを追加すると、追加したメンバーより後ろの値を設定した場合値がずれる問題が発生します。 例えば以下のように Fruit 列挙型があったとします。 // Fruit.cs // もともとの定義 p…

【C#】enumのメンバーに任意の番号を振る

enum は宣言した順に数字が自動で振られています。 以下の例だと Apple=0, Banana=1 といように自動でインクリメントされた数字が割り当てられます。なのでメンバーを途中に追加すると数値が変わってしまいます。 public enum Type { Apple, // 0 Banana, //…

【Unity/C#】Stateパターンで状態を管理する

今回は State パターンの説明と Unity/C# で使用するときの簡単な実装例の紹介です。 Stateパターンの説明 【前提】パターンを使わない場合 Stateパターン C#/Unityで実装する 【事前準備】Playerクラス Stateインターフェース StateImplement1, 2 Contextク…

【Unity】GameObjectがDestroyされたら一緒にオブジェクトを削除する

ある GameObject が削除されたときに関連付けた Object が一緒に削除される仕組みを紹介したいと思います。 特に、Unity の Material はプロパティに一度でも触ると勝手にコピーされて開放は自分でやってね、という動作のため開放処理を OnDestory にいちい…

【Unity】ExcelのデータをScriptableObjectに取り込む

Excel で管理しているゲームデータを自作のプログラムを使って ScriptableObject にインポートする方法を紹介したいと思います。 これ系は既にライブラリとかアセットが色々と配布されていて、それらを使用したほうが時間の節約になると思いますが、今回はを…