C#

【C#】ViewModelの実装をスニペットで軽減する

WPF/UWP などの XAML 系実装で使用する ViewModel は OSS(Livet, Prism ReactiveProperty) などを使用しない場合、INotifyPropertyChanged 周りの実装が冗長で、繰り返しが面倒なので軽減策の紹介したいと思います。 アプローチ方法は以下の通りです。 共通…

【C#】WMIでOSのメモリ使用量を取得する

WMI(Windows Management Infrastructure)という機能を使うとWindowsのシステムの各種情報を取得することができます。今回はこの機能を使用して 確認環境 Windows10 VisualStudio 2019 .NET Framework 4.7.2 / .NET 5 プロジェクトの設定 WMI の機能を使用…

【C#】Taskのキャンセル

C# 標準の Task のキャンセルの方法です。どちらも同じ方法でキャンセルできます。 標準で CancellationTokenSource から得られる CancellationToken を Task.Run の第2 引数に渡すことでキャンセルをハンドルできるようになります。 Taskのキャンセル stati…

【C#】INIファイルを読み書きする(DllImportなし)

INI ファイルを C# で読み書きするために DllImport で Windows の User32.dll 使うのは確かに簡単ですが汎用性に欠けると思うので、純粋な C# のみかつ、.NET 4.6 くらいからコピペで使えるライブラリを作成してみました。 ライブラリの性能 確認環境 形式…

【C#】正規表現で一致した部分を取得する

C#の正規表現で、パターンに一致した部分を取得することをグループ化する、などと呼びます。この正規表現のある条件に一致した部分を取得する方法の紹介です。 確認環境 VisualStudio2019 C# 9.0(バージョン不問 名前空間 using System.Text.RegularExpress…

【C#】DateTime.TryParseExactの使い方

すぐ忘れて何度も調べることになるのでメモ 確認環境 VisualStudio2019 C# 9.0(バージョン不問 コード例 具体的にフォーマットを指定する場合以下のように指定する bool isOK = DateTime.TryParseExact("20220413123045", "yyyyMMddHH:mm:ss", CultureInfo.…

【C#】TypeCodeを使った高速な型判定を行う?

ライブラリなどの比較的低レイヤー寄りの実装をしていると受け取った、ジェネリックな型や、object 型で受け取った変数がどの型なのかを判定するケースがありますが、タイトルの通り TypeCode を使うと Type を使った判定より、効率的かつ高速な処理にできる…

【Unity】2D用のNavMeshでTimeMap以外の領域や障害物をベイクする

2D 用の NavMesh の導入方法とタイルマップへの適用方法は記事がいくつかあるので、導入~タイルマップに適用するまでは比較的簡単にできると思います。ただ、実際にトップダウン系のゲームなどで使用する場合、障害物を設置したり経路を動的に足したりでき…

【C#】2つのキーを管理するDictionary

よく2つのキーを持つ Dictionary が必要になるときがありますが以下のように Dictionary を2重にすると「管理が面倒」「後から見たときに意味が分からない」など技術的負債になりがちです。 // 2つのキーで管理したいのでDictionaryを2重に宣言する pribate …

Dispose呼び出しを簡潔に書く

IDisposable を継承しているクラスは使い終わったら Dispose メソッドを呼び出して破棄を明示しますが using 構文の外で開放したい場合も using 構文を使って簡単に開放できます。 // こんなクラスがあったときに public class Sample : IDisposable { //...…

スクリプトの実行順序をスクリプトから指定する

Unity で Awake や Update の実行順序をプログラム(スクリプト)から指定する方法の紹介です。 確認環境 この記事は以下環境で確認しています。 Unity 2021.2.5f1 Editor 上で確認 実行順序の設定 通常 Unity の コンポーネントのメソッドの実行順は不定で…

【C#】デリゲートの引数は呼び方でパフォーマンスが違う

引数がデリゲートのメソッドは呼び出し方がいくつかあります。書き方でコンパイラが展開する方法が異なるります。このため一部実行コストやパフォーマンスにも差が出るようなのでまとめてみました。 確認環境 この記事は以下環境で確認しています。 VisualSt…

「ラムダ式本体によるメソッドの記述」はちょっと微妙

C# 6.0 から追加された「Expression bodies on method-like members(ラムダ式本体によるメソッドの記述)」という機能ですが、これをメソッドに使うのは少し考えた方がいいという話です。この機能を利用すると以下のようにメソッドで中カッコ({})を使用…

【C#】前置・後置インクリメントの速度差

若干怪文書っぽいですが、タイトルの件を検証したいと思います。 古参のC言語系プログラマーなら一度は聞いたことがあるかもしれませんが、forループのカウンターとして使用する i や j 等の変数のインクリメントは「前置の方が高速だから前置インクリメント…

【C#】タプルの色々な宣言方法と受け取り方

C#でタプルの宣言方法と受け取る方法ですがバリエーションがいくつかあって知らないと冗長な書き方になっているときがあるので、宣言のしかたと受け取り方を紹介したいと思います。 確認環境 .NET 5, C#9.0 VisualSturio 2019 Windows 10 宣言方法と受け取り…

URP+2DRendererで画面の一部に綺麗なブラーをかける

いわゆるすりガラス効果みたいな感じで URP + 2D Renderer で画面の一部にきれいなブラーをかける方法です。 前回以下の記事で URP の 2D Renderer でも画面の一部にモザイクやブラーをかける紹介をしましたがブラーの見栄えが良くなかったので今回はガウシ…

UIのImage(Graphic)のスクリーン座標を取得する

タイトルの通りですが、以下の記事で紹介されいたコードを元に作成しています。 hacchi-man.hatenablog.com 確認環 Unity 2021.2.5f1 VisualStudoo 2019 Windows 10 実装コード UI 要素の四隅を GetWorldCorners で取得するのは同じですが、基本的に RectTra…

Teamsを退席中にしないツール作った

TeamsをはじめとするいわゆるグループウェアってしばらくPCを操作しないと「退席中」と割とすぐに表示されてしまいます。実際は作業してるのに…みたいな状態にならないように退席中になるのを防止するツールを作ってみました。MouseKeeperってツールです。 …

【Unity】実行中だけCanvasをOverlayにする

はじめに Unity の Canvas は特に画面に追従する必要がない場合 Screen Space Overlay にすることが多いと思いますが、Overlay って実際のゲーム画面と比べてサイズが大きすぎて「ゲーム画面を見ながら UI の調整をしたい」みたいなときに少し扱いづらいので…

【C#】配列をN個に分割する

文字列をSplitで分割する処理は割と見かけますが、ある配列を複数の配列に分割する処理はあまり見かけたことが無いので書きました。 例えば10個の要素の配列を3個ずつの配列に分割して 3 + 3 + 3 + 1要素の配列に分割する場合の処理方法です。 確認環境 以下…

背景を除外してRectTransformの範囲をファイルに保存する

Canvas 内の RectTransform の範囲を背景を無視して切り取って画像に保存する手順です。かなり限定的な状況となりますが uGUI の Image などを子要素に持つ RectTransform を表示されている内容で保存することができます。 まずサブカメラを作成 → RenderTex…

【Unity】UniRxを利用したMVPパターン(MVRP)の実装例の紹介

UniRx 利用した MVP パターン、いわゆる MV(R)P パターンで(Model-View-(Reactive)Presenterパターン)UI の実装例を紹介したいと思います。 今回の記事で実装した UI は以下の通りです。 初めに MV(R)Pパターンは、表示を View, ロジックを Model, 双方の…

【C#】コレクション(リスト・配列)を安全に外部公開する

この記事は、あるクラスの中で管理しているコレクション(リスト・配列)をクラス外に渡す時に安全な渡し方の考え方や実装の紹介です。 あるクラス内で管理しているリストをクラス外に公開する場合に具体的にどういった危険性があるのか、どうすれば安全なの…

【C#】Queue<T>とConcurrentQueue<T>の使い方

タイトルの通りQueueの使い方の紹介をしたいと思います。 2つのQueue まず「Queue」ですが一言で言うと、入れたデータが入れた順番に取り出せる入れ物の事を指します。以下のような1本のパイプのイメージです。 こういったデータ構造を先入れ先出し(First I…

C#でビット操作を簡単に行うラッパークラスの紹介

例えばC#でハードウェアに近い I/O を扱う場合、1チャンネルが ushort の1ブロックの読み書きが要求されていて、各ポートはビットごとに割り当てられているなんてケースが割とありますがいちいち出力ポートの設定を読んでビット操作をしてまた書き込むなどの…

中カッコのないif文の命令文を自動改行しない

VisualStudio 2017 および 2019 でオートフォーマットに関する以下の 2つの状況が発生した場合の設定方法です。 中カッコのないif文を改行しない using ステートメントの中カッコを改行しない なぜか1行で記述したい中カッコを省略したif文の命令文が新しい…

Unity向けタイマーライブラリ「UniTimer」をリリースしました

Unity向けのタイマーライブラリ「UniTimer」をリリースしました。 Git のリポジトリは以下の通りです。 github.com Github の README と内容は同じですが、このライブラリの説明などは以下となります。 動作環境 Unity 2020.3 以降 このライブラリを使用する…

等間隔に並んだ画像データをグリッド毎にトリミングする

例えばスプライトアニメーションで等間隔に並んでいるデータの余白が大きすぎる場合、各画像の余白をトリムしたい場合がありますが、1枚の画像になっている場合トリミングするのはなかなか大変です。今回はそういった画像を 実行例 分かりやすいように極端に…

【C#】appsetting.jsonをコンソールで扱う

コンソールアプリでも appsettings.json が使いたい場合の設定と実装方法及びヘルパークラスの紹介です。 確認環境 この記事は以下環境で確認しています。 VS2019(16.11.4) .NET 5(C#9.0) コンソールプロジェクトが作成済み パッケージの導入 「NuGet パ…

.NET5のWPFにReactivePropertyをセットアップする

以前より圧倒的に簡単にセットアップできるようになっていて逆に混乱してしまったのでまとめておきます。 確認環境 VS2019(16.11.4) .NET 5(C#9.0) WPF プロジェクト作成済み(.NET, .NET F/W, .NET CoreどれでもOK) セットアップ方法 Visual Studio の…