なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

C#

Roslyn の IMethodSymbol で拡張メソッドを扱いたい

C# / VB.NET のコンパイラーである Roslyn はライブラリとして扱うこともでき、コード解析などを行うことができる。 その中でメソッドについての情報が格納されるのが IMethodSymbol だが、以下のような拡張メソッドの場合は、拡張メソッドそのものでは無く…

.NET MAUI Blazor Hybrid アプリで Tailwind CSS を使いたい

.NET MAUI Blazor Hybrid アプリというものがあります。 これは、 .NET でクロスプラットフォームなアプリを作成するためのフレームワークで、 Xamarin.Forms の後継です。 同様に、 ASP.NET Core Blazor というものがあり、これは .NET と C# を利用して、 …

dotnet build コマンドで特定のプロジェクトだけビルドから除外したい

例えば GitHub Actions などで定期的にビルドを行っている際、大部分は net8.0 だが特定のプロジェクトだけは net8.0-windows を指定している、などの理由で、ビルドから除外したいケースがあります。 そのとき、 Microsoft Learn では該当プロジェクトを除…

System.CommandLine の Handler で DI 使いつつ InvocationContext もほしい

C#

System.CommandLine という Microsoft による .NET のコマンドラインライブラリがあります。 これを使うと (一生プレビュー版ではあるものの) わりと簡単にコマンドラインアプリを作れるのですが、今回はそれについての記事です。 各サブコマンドを定義後、…

Unity で動的に UXML を生成・読み込みしたい

Unity で UXML を動的に生成したいことってありますよね?わたしはあります。 例えば、 UXML で記述できる HTML もどきは仕様が古すぎて、 HTML Living Standard っぽく記述した物をトランスパイルするとか......。 ということで、その方法のメモ。 とはいっ…

ASP.NET Core で SPA の Static File も認証で保護したい

C#

ASP.NET Core で UseSpa とかで SPA アプリケーションをホストできるんですが、例えば Staging 環境だったり、何らかの理由で特定ディレクトリ以下のアクセスを拒否したいケースがあります。 その場合、 Authorize 属性を通過しないので、自前で認証のチャレ…

DirectX のテクスチャーを Bitmap として取り出したい

いつもは Unity みたいな高レイヤーですが、今回は比較的低レイヤーのお話です。 基本的に、最近の場合は DirectX を直に触るケースは少なくなってて、例えば Unity や Unreal Engine 等のような、ゲームエンジンを触ることがほとんどだと思います。 ただ、…

Unity のカスタムトラックで表示名を設定したい

比較的最近の Unity では、 Timeline 関連の API も公開されていて、ある程度自由にカスタマイズすることが出来ます。 今回はそのうち、 TrackAsset についてのお話です。 TrackAsset を継承したクラスを作ることで、 Timeline に任意のトラックを追加するこ…

Mock Service Worker を ASP.NET Core + Vite な環境でも使いたい

Mock サーバーを立てなくても Service Worker で働いてくれる API Mock ライブラリーである Mock Service Worker を、 ASP.NET Core + Vite な環境で使う方法についてのメモ。 といってもやり方は簡単で、わたしがとった方法は単純に mockServiceWorker.js …

ASP.NET Core + Vite で爆速フロントエンド開発を行いたい

TypeScript を使いたーい!しかもできるだけ早くコンパイルして欲しいー!みたいなとき、 Vite は設定も少なく爆速なので便利ですよね。 ということで、今回は Vite + ASP.NET Core を使った、爆速フロントエンド開発の紹介です。 なお、開発サーバーのみ Vi…

Visual Studio 2022 で Roslyn Analyzer をブレークポイントに反応させたい

VS2022 だと不具合というか仕様で、 Roslyn Analyzer を Experimental Instance で立ち上げても反応してくれません。 地味に困るので、そういうときはこうすればイイヨというメモです。 といってもカンタンで、設定から、 Text Editor > C# > Advanced から、 R…

Unity でスクリプトから Prefab Variant を作成したい

Prefab Variant 、便利ですよね。 今回はそれをスクリプト経由で作成する方法の紹介です。 といってもそれ専用のメソッドがあるわけでも無く、以下の処理で自動的に作成されます。 var go = (GameObject) PrefabUtility.InstantiatePrefab(_prefabPath); // …

Unity で GameObject の Duplicate を検出したい

Unity で Ctrl + D によるコピーを検出したい場合のやり方です。 といってもカンタンで、 hierarchyWindowItemOnGUI でヒエラルキーの OnGUI を受け取ってそこで処理してあげるだけ。 あとは、 delayCall で処理を遅延させないと activeGameObject がコピー…

Unity の Vector3 を Newtonsoft.Json でシリアライズ・デシリアライズしたい

ちゃんとした Unity アプリケーションを作っていると、 Json でアプリケーションデータを永続化したくなることがあると思います。 ただ、 PlayerPrefs はゴミらしいのと、 Unity 標準の JsonUtility だと物足りない......!となると、やはり Json.NET が選択…

OpenVR SDK でデバイスのアイコンパスを取得したい

今回は、 OpenVR SDK にてコントローラーや各トラッカーなどのデバイスのアイコンの場所を取得してみようと思います。 といっても、やり方はカンタンで、ランタイムパスと GetStringTrackedDeviceProperty で取得できるパスを組み合わせれば OK です。 とい…

OpenVR SDK で SetOverlayTransformTrackedDeviceRelative した座標の絶対値が知りたい

DLL Injection の記事はどうした!と言われそうですが、この後に書く予定です。許してください。 ということで、この記事では、 OpenVR SDK で SetOverlayTransformTrackedDeviceRelative あと適用した座標についての絶対値をとる方法についてメモです。 と…

C# でリフレクションに ref パラメータを使いたい

C#

たとえば以下のような ref パラメータを持ったメソッドがあったとして、 private static void ShaderErrorListUI(Shader shader, ShaderMessage[] messages, ref Vector2 scrollPosition) { // ... } これをリフレクション経由で呼びたい場合は、多分普通に…

コンパイルエラー CS8032 / CS8033 を修正したい

Roslyn の Source Generator 系を作っていると出てくる事がある CS8032 系の修正方法について。 そもそも CS8032 / CS8033 ってなんぞやって言うのは、こんな感じ。 CS8032: An instance of analyzer NAMESPACE cannot be created from Analyzer.dll. CS8033…

Roslyn で EditorConfig を使ったテストをしたい

今日は Roslyn の記事です。また触っているのでね。 今回は、比較的最近対応していた (気がする)、 Roslyn 経由での EditorConfig の扱いについてお話しします。 Roslyn では、コード内で以下のようにすることで、 EditorConfig から設定を引っぱってくるこ…

Unity の UXML で作成した独自のコントロールで、子要素を取得したい

前回は UXML で独自のコントロールを作成しましたが、今回は子要素を取得していろいろやってみようと思います! 渡し方は Unity 公式ドキュメントで触れられている slot ではなく、単純に以下のような子要素 (ここでいう TabContent )となります。 <controls:Tab> <controls:TabContent title="全体設定"> </controls:TabContent> </controls:Tab> とい…

Unity の UXML で独自のコントロールを作成したい

前回はコールバックを作成しましたが、今回は独自のコントロールを作ってみましょう! ということで、早速 UXML と C# スクリプトを書きます。 たとえば、こんな感じのメッセージボックスを作りたい場合は、 以下のような UXML になると思います。

Unity の UXML で Binding したフィールドの変更を受け取りたい

C# + UXML でエディター拡張を書いている際、 Binding 中の変数に対して、値が代入されるタイミングである処理を呼びたい、みたいなことはあると思うんですが、その方法の紹介です。 といっても Unity 2019 と 2020 では微妙にやり方が変わっているので、今…

Unity の UXML + USS で Media Query を実現する

みなさん Unity 2019 辺りから搭載されてる UXML と USS 使っていますか? Web で調べてもほぼほぼ情報が出てこないこいつ、 Web 界隈であり WPF 界隈でもあったわたしからすれば天国のような開発環境なんですが、 CSS の弱めのサブセットということでしかな…

独自のツールで Visual Studio のエラーフォーマット形式で出力したい

Visual Studio の PostBuild イベントなどで使うツールで、エラーフォーマットを Visual Studio 側にあわせてあげることで、 それらをエラーリストに綺麗に表示してくれるようになります。 ということで、今日はその実装方法について書いてみます。 今回は R…

Roslyn Analyzer で特定プリプロセッサを有効にした状態で解析を行いたい

前回に続き、今回も Roslyn Analyzer のお話。 今回はちょっと通常使用外?な感じの使い方です。 Roslyn Analyzer では、基本的には自前の Analyzer コードが実行される時点で、現在有効となっているプリプロセッサが適用されたものが渡されます。 例えば、 …

Roslyn Analyzer で良い感じにテストしたい

ここ数ヶ月くらい、ずっと VRChat 向けの Roslyn Analyzer を作って得られた知見を放出していく系私です。 今回は、ユニットテストのお話。 Roslyn Analyzer のテストは、多くの場合、ソースコードをインプットとして、どの Diagnostic が、どういった場所に…

Unity 2018.x で自動的に UPM パッケージをインストールしたい

BOOTH とかで商品を配布していて、共通の部分とかを配布するときに、 UPM 経由で依存を入れたいときとかの方法。 UnityPackage に含めると他のと被った場合、古いものをインポートされると困る!的な場合、 (個人的には) UPM 経由でインストールさせるのがよ…

Unity のカスタムシェーダー GUI で、Tiling & Offset を良い感じに表示したい

最近は Toon Shader の勉強をしている私です。 Unity のシェーダーでは C# コードで GUI を自分で組めるのですが、 Tiling と Offset に対応していると、邪魔だと感じるときがあるので、良い感じに表示するための方法。 普通に作るとこんな感じになるとおも…

Canvas Image を Mesh に変換したい

なんでそんな必要があるのかって? Canvas 使いまくったものが送ってこられて Vket 入稿できなかったからです。 そういう需要があるにはあるので、放流します。 以下ソースコード全文 /*------------------------------------------------------------------…

UdonSharp コンポーネントをエディターから動的生成したい

Prefab からのセットアップ自動化みたいな想定で、 UdonBehaviour (U#) の中身をいじりたい。 そんなときのいじりかた。 といっても、基本は Unity で Component 変更するのと変わらない。 private static void AttachUSharpComponent(GameObject gameObject…