【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 にインポートする方法を紹介したいと思います。 これ系は既にライブラリとかアセットが色々と配布されていて、それらを使用したほうが時間の節約になると思いますが、今回はを…

【Unity】値の変更を検出して処理を実行する方法

ゲーム中で「ある値を監視して毎フレームごとに値の変化を監視し、値が変化した時に特定の処理を実行する」という実装方法は色々にありますが、最も一般的な Update メソッド内で値の監視処理を書く実装は規模が大きくなると徐々にコードが見づらくなってい…

【C#】正規表現で小数文字列をマッチする

小数文字列は書き方が複数ありますが、それらを正規表現でマッチさせたりマッチした文字列を取り出す方法を紹介したいと思います。 小数の表記方法の確認 小数は以下のように表現されます。 123.456 / +123.456 -123.456 .456 / +.456 -.456 1.23e5 / 1.23E5…

【Unity】Destroyしたらnull代入を同時にする

以下の Unity 公式の Tweet を見て思ったことです。 Twitterから: Unity でオブジェクトを Destroy したら null を代入するのが望ましいです。既に null が入っているように見えますが、実はこれ、本当の null ではないんです。この状況 (Leaked Managed She…

【Unity】プロパティを[field:SerializeField]は避ける

初めに Unity でインスペクター上から値を変更できるようにするには以下のように記述します。 // (1)publicで宣言する public float _value1; // (2)SerializeFieldを付ける [SerializeField] private float _value2; // privateは書かなくても良い // [Seri…

【Excel】ブック内のリンクでエラーが出るときの対処法

エラーの内容 以下エラーメッセ時が表示された時の対応法です。 ブック内のリンクを更新することができません。リンクを更新するには、リンクしたすべてのソース ファイルを開きます ([データ] タブの [リンクの編集] をクリックします)。計算をすべて更新す…

【C#】インスタンス作成速度の比較

C# で数通りあるインスタンス作成方法の処理速度の比較です。 前提条件・環境 環境は以下の通り Visual Studio 2019 + .NET Core 3.1 Windows10, Releaseビルドをコンソールから実行 動作検証 検証は BenchmarkDotNet を使用して検証は以下の通り実行します…

【C#】Windowsで使用できるファイル名かチェックする

C# で Windows 上で使用できるファイル名かどうかをチェックする実装です。 using System.IO; using System.Text.RegularExpressions; public class WindowsFileSystem { // 使用禁止文字 static readonly char[] invalidChars = Path.GetInvalidFileNameCha…

【C#】NuGetパッケージを再インストールする

環境 Windows10 VisualStudio 2019 状況 以下でパッケージのキャッシュをクリアしたらエラーが出て「発行」できなくなった。 ツール > オプション > NuGet パッケージ マネージャー > すべての NuGet キャッシュをクリア 次に、Webプロジェクトを発行すると…

【C#】BenchmarkDotNetを使って処理時間を計測する方法

C# の処理の実行時間の測定やメモリ使用量、GCの量を正確に計測できるライブラリ「BenchmarkDotNet」の最速セットアップ & 使用方法の紹介したいと思います。実行時間を測定するために Stopwatch クラスを使用する方法もありますが、このライブラリを使った…

【C#】ExceptionのMessageを後から変更する

C# でいちど作成した Exception の Message プロパティは get のみで後からメッセージを変更することができません。 今回は一度作成した Exception オブジェクトの Message を変更したいと思います。 確認環境 VisualStudio 2022 .NET 6 IDE上からDebug実行…

【C#】オブジェクトにクラスが継承されているかどうかを調べる

あるオブジェクトに特定のクラスやインターフェースが継承されているかどうかを調べる処理方法は以下の通りです。 public static bool IsInherited1<T>(object obj) where T : class { return (obj as T) != null; // ★(1) asで変換できるかどうか調べる } publ</t>…

【C#】ジェネリックが推論できないコード2選

C# の型推論は大抵の場合型を推定してくれてジェネリックの型も推論で省略することができます。 特にジェネリックパラメータを推論によって省略できるため、メソッド使用時に型を書く手間がなくなり、コードの見た目もかなりすっきりできます。が、ごく一部…

【UniTask】コールバックを待機できるように変換する

はじめに 処理の終了をコールバックで受け取る形式の非同期処理は UniTask の TrySetResult で async/await で待機可能に変換できます。 TrySetResultを使った変換は以下のように実装できます。 // 完了をコールバックで通知するメソッド public void Play(A…

【Unity】Teamsの入力中のアニメーションを実装してみる

Teams のチャットで相手が入力中の時にモニョモニョと表示される印字メーターのアニメーションを Unity + DOTween で実装してみました。 この機能、気が散るので OFF にしたいですがそういう設定はないみたいですね。 作成環境 Unity 2021.3 DOTween 実装コ…

【Unity】デリゲートを指定するときにGCAllocを減らす

あるメソッドの引数にデリゲートが必要な場合、GC Allocationを減らす方法の紹介です。 以下状況での GC Alloc が発生する話になります。 public static class SampleUtility { // デリゲートを引数に取るメソッド public int Execute(Action<int> method) { ... </int>…

【C#】Windows Formsの高DPI対応【2023年版】

Windows Forms で作成されたアプリの高 DPI 対応の 2023 年版の設定の話です。 この設定ですが、過去に色々と試行錯誤があったせいで情報が錯綜しています。この記事の最新の方法では各種設定が整理されて簡単に指定することができるようになりました。 確認…

【Minecraft】ゾンブレラで釣り出来ない現象

不具合なのか意図した挙動なの分からないけど、ソンブレラのデータパックを入れると釣りが不可能になる挙動があって、調査に結構時間を取られたのでメモしておきます。 構成 Minecraft 1.17.1 Forge 37.1.1 ゾンブレラ シーズン16 (Zombrella Season 16) Opt…

【C#】2進数を4桁ごとに区切って表示する

ある整数を2進数に変換し4桁ごとに区切り文字を入れる方法の紹介です。 // こんな数値を uint value = 0xCACAEFEF; // こんな風に文字列に変換する 1100 1010 1100 1010 1110 1111 1110 1111 Unity 上での使用を想定して GCAlloc が最小となる & そこそこ高…

VisualStudio2022がメモリを使い過ぎている場合の対処法

なんか VisualStudio 2019 で開いてたソリューションを 2022 で開くと 3倍くらいメモリを消費してる場合があるため、PCのメモリが 16GB だと Teams + Outlook + Chorome なんか開いてると、メモリを使いきってそのまま全部クラッシュしたり、OS が変な感じに…

【Unity】放置ゲームやクリッカーゲームに出てくる単位を表現する

タイトルの通り、徐々に扱う数値が大きくなってくゲームを「インクリメンタルゲーム」と言ったりします。このジャンルは色々と呼び方があるようで「放置ゲー/放置ゲーム」や「クリッカーゲーム」(クッキークリッカーが特に有名です)などの呼び方もあります…

VisualStudioとC#バージョンの関係性

だんだん状況が変わってきたのでメモ。 2023年3月現在、.NET のバージョンと C#、VisualStudio の対応関係は以下のような関係性になっています。 .NET ver. C# ver. VisualStudio .NET 7 C# 11 2022 .NET 6 C# 10 2022 .NET 5 C# 9.0 2022, 2019 .NET Core 3…

【C#】文字列から一部分を取り出す(Substringの使い方)

C# で文字列から一部分を取り出す処理は Substring メソッドを使用します。 この記事では、SubString の使い方と注意点、便利な使い方を紹介したいと思います。 確認環境 .NET 6 VisualStudio 2022 Windows 11 この記事は C# であればどのバージョンでも使用…

【Stylus】Togetterのサイト表示をシンプル化する

Togetter の過剰装飾(太字・赤字、クリック数煽り)でページがかなりうるさい & ちょっとどうかなと思うユーザーのまとめが目につく頻度が増えて閲覧しにくい状態になったので Chorome の拡張機能の Stylus を使ってサイトを静かにする定義を考えました。 …

【Minecraft】1.17.1+OptiFine HD U H1でアニメーション不具合

OptiFine HD U H1 だとブロックが壊せない不具合あるみたい。 この問題で開発元に Issue が出てた。 github.com ブロック破壊アニメーションが一切描画されなくなるみたいですね。OptiFine HD U H2 pre1 があるからそれ使えって事らしいです。 ↑ これ普通に…

【C#】ターゲットOSがWindowsの時のOSバージョン

プロジェクトのプロパティで「ターゲットOS」を Windows にした時に選択肢に出てくるバージョンの説明です。 実際これに具体的なバージョンを指定して何が変わるのかちょっとわからないですが、、、 「ターゲット OS バージョン」と「サポートされている OS …

【C#】.NET6のConfigureKestrelどこいった?

.NET 5 → 6でホストの実装スタイルが変わりました。 今までやっていたあの設定はどこでできる?みたいな状態なので少しまとめてみました。 MagicOnion + IPC の設定で UseKestrel していましたが設定どこ行った…? // .NET 5 internal partial class Program…