はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【C#】RuntimeでcsファイルをRoslynで解析してリフレクションで実行する

C#

はじめに 今回はRuntimeでcsファイルをRoslynで解析をしてリフレクションで実行する方法を紹介したいと思います。github.com はじめに 概要 インストール 今回の流れ 構文木を生成する Syntax Treeの走査 C#のバージョン指定 コンパイル MetadataReferenceで…

【C#】SourceGeneratorで実際にファイルを吐かせるようにする方法

C#

はじめに 今回はSourceGeneratorで実際にファイル出力させる方法について紹介したいと思います。 はじめに やり方 参考 やり方 SourceGeneratorで生成したコードが含まれる側の.csprojに対して(SourceGeneratorのコードが含まれる.csprojでないので注意)、Em…

【C#】MSBuildでdotnet buildが終了したあとにdllを特定の場所にコピーする方法

C#

はじめに 今回はMSBuildでdotnet buildが終了した後にdllを特定の場所にコピーする方法を紹介したいと思います。特にUnityの場合では、Roslyn AnalyzerやSourceGeneratorを利用する場合は手作業でdllをコピーするのはとても面倒です。そんなときはMS Buildで…

【Rider】変数名やクラス名、構造体の名前などはGitHub Copilot Chatに考えてもらおう

はじめに 今回は小ネタですが、GitHub Copilot Chatに変数名を考えてもらうとめっちゃ良かったという話をしたいと思います。 C#13の情報がぼちぼち出てるのにC#10のまとめ記事執筆を勧めてくるCopilot君 はじめに 前提 使い方 さいごに 前提 GitHub Copilot…

【C#】privateコンストラクタしかないclassを無理やりリフレクションで生成する

C#

はじめに 今回はPrivateコンストラクタしかないclassを無理やりリフレクションで作成する方法を紹介したいと思います。 public class Hoge { // privateコンストラクタしかないと正攻法だと外から生成できない private Hoge() { } } はじめに やり方 引数が…

【C#】protobufのカスタムオプションを取得する方法

C#

はじめに 今回はprotobufのカスタムオプションをC#で取り出す方法を紹介したいと思います。 protobuf.dev // カスタムオプションを定義 extend google.protobuf.MessageOptions { string my_option = 50000; } message MyMessage { // "Hello, world!"をC#上…

【C#】Coconaを利用してSystem.CommandLineなどを利用せずに簡単にConsoleアプリケーションを作成する

C#

はじめに 今回はCoconaというOSSを紹介したいと思います。github.com はじめに 概要 インストール 使い方 基本 Optionsについて Argumentsについて Sub-commands パラメーターの共通化 Validation Microsoft.Extensions.*の利用 Logging DI さいごに 概要 よ…

【Unity】EditorWindowでEditorGUILayout.PropertyField&SerializedObject.FindPropertyをしてもデフォルト値にクリアされてしまう問題の対処法

はじめに 以下のコードを書いていたところ、Unity2022.3.10f1では正しく動作しないことに気がつきました。(Unity6では正しく動作していました) using UnityEditor; using UnityEngine; public class SampleWindow : EditorWindow { [SerializeField] private…

【Unity】Player SettingsのScriptingDefineSymbolsをスクリプトから取得・設定する方法

はじめに 今回はPlayerSettingsのScriptingDefineSymbolsをスクリプトから取得・設定する方法について紹介をしたいと思います。 ProjectSettings/Player/OtherSettings/Script Compilationより設定可一応補足ではありますが、スクリプトからでなければProjec…

【Terraform】Docker Providerを利用してローカルでインフラ環境を構築してみる

はじめに Terraformを触っていたら、Docker Providerなるものがあることを見つけました。registry.terraform.iogithub.com面白そうだったので触ってみたメモを残しておきたいと思います。 はじめに Docker Providerとは tfファイルの記述 Terraformの実行 結…

【C#】Dockerとminimal API(ASP.NET Core + .NET 8)を利用して最小構成のウェブサーバーを構築する

はじめに 今回はDockerとminimal API(ASP.NET Core + .NET 8)を利用して最小構成のウェブサーバーを構築してみたいと思います。 はじめに プロジェクトを用意する Dockerfileを定義する イメージをビルド コンテナを起動 参考 プロジェクトを用意する まずは…

【C#】minimal API(ASP.NET Core + .NET 8)で構築した最小構成のウェブサーバーをCloud Runで動作させる

はじめに 今回はminimal API(ASP.NET Core + .NET 8)で構築した最小構成のウェブサーバーをCloud Runで動作させる方法を書いていきます。 はじめに プロジェクトを作成する Dockerfileについて Cloud Runにデプロイする Artifact Registry 参照 プロジェクト…

【Unity】UnityでCallerArgumentExpression属性, required修飾子, initアクセサを利用する方法(自分で定義する必要があり)

はじめに 現在のUnityで利用できるC#のバージョンはC#9までになってます。ただ少し裏技?を使うことで実質C#11まで利用することが可能になっています。zenn.devただ注意点としてはasmdefが絡んでくるとよく知られているCsprojModifierを用いる手法だけだとい…

【C#】インターンプールを用いてstring生成によるヒープのメモリ確保を防ぐ方法(メモリを占有しつづけるのでそこは注意)

C#

はじめに 今回はなるべくstringでヒープへのメモリ確保を抑えるためにインターンプールを利用する方法について紹介したいと思います。 はじめに 概要 string.Internとstring.IsInterned 明示的に登録しなくても登録される場合 注意点 参考 概要 通常stringは…

【C#】.NET 6で追加されたstring.Create(internalであるstring.FastAllocateStringを利用できるメソッド)を用いて高速にstringを生成する

C#

はじめに 今回はstring.Createを用いて高速にstringを生成する方法を紹介したいと思います。learn.microsoft.com はじめに 概要 使い方 ちなみに 実験 追記 注意点 参考 概要 string.FastAllocateStringというinternalなメソッドが.NETにはあり、これを利用…

【C#】GitHub Actionsで.NETのビルド&テストを行う方法(スターターワークフローがあるので簡単)

はじめに 今回はGitHub Actionsで.NETのビルド&テストを実行する方法を紹介したいと思います。 はじめに やり方 実験 ファイルを用意 ローカルで動作確認する GitHub Actionsが動作するか確認する ワークフローの中身 参考 やり方 .NETのビルド&テストをする…

【C#】FastEnumというライブラリを用いて列挙型関連のメソッドを爆速+ゼロアロケーションで実行させる(Static Type Cachingによる高速化)

C#

はじめに 今回は列挙型関連のメソッドを爆速+ゼロアロケーションで実行できるFastEnumというライブラリを紹介したいと思います。 .NETメソッドとの比較結果 はじめに 概要 インストール方法 使い方 列挙型のName・Value・FieldInfoなどを一度に取得したい場…

【C#】dotnet newコマンドでプロジェクトを作成できるようなテンプレートを作成する方法

C#

はじめに 今回はdotnet new 〇〇コマンドでプロジェクトを作成できるようなテンプレートの作成方法を紹介したいと思います。 $ dotnet new stringext テンプレート "Example templates: string extensions" が正常に作成されました。 テンプレートからプロジ…

【Unity】iOSにてgree/unity-webviewで表示している画像を長押ししてもメニュー(画像を保存したり共有したり)が開かないようにする方法

はじめに 今回はiOS(Safari)でgree/unity-webviewを利用して表示した画像に対して保存・共有といったことが可能にならないようにメニューを開かせないように設定する方法を紹介したいと思います。github.com はじめに やり方 おまけ やり方 -webkit-touch-ca…

【C#】C#10(.NET6)から登場したCallerArgumentExpressionを用いてメソッドのパラメーター名を取得する

C#

はじめに 今回はCallerArgumentExpressionを用いてメソッドのパラメーター名を取得する方法を紹介したいと思います。 learn.microsoft.com はじめに 概要 使い方 おまけ 概要 CallerArgumentExpressionを用いることで、メソッドの引数で渡した真の意味での文…

【C#】TypeがKeyなDictionaryをStatic Type Cachingに置き換えて処理の高速化させる(実験付き)

C#

はじめに 今回はTypeをKeyにとるDictionaryをStatic Type Cachingに変えて処理を高速化させる方法について紹介したいと思います。Static Type Cachingについては以下のスライドのp46~触れられています。 www.slideshare.net はじめに 概要 バイナリサイズを…

【Unity】gree/unity-webviewでバウンス(スクロール領域の境界に達したときに範囲外が少し表示される奴)を無効化する

はじめに 今回はgree/unity-webviewでバウンススクロールを無効化する方法を紹介したいと思います。github.com techvisor.jpちなみに基本的な使い方は前に記事を書いたので、気になる方はチェックしてみてください。 www.hanachiru-blog.com はじめに バウン…

【GCP, C#】Google Cloud Functions(.NET) + Cloud Scheduler + Cloud Pub/Subを用いてSlack通知ツールを作る

はじめに 今回はGoogle Cloud Functions(.NET) + Cloud Scheduler + Cloud Pub/Subを用いて定期的にSlackにメッセージを投稿するシステムを作ってみようと思います。 実際に動作させている様子 はじめに 概要 Slackでの操作 Slackアプリを作成する GCPでの操…

【Unity】gree/unity-webviewのSetMarginのrelativeは何を意味するのか(Screen.SetResolutionをしたときに挙動が変わる)

はじめに 今回はgree/unity-webviweのWebViewObject.SetMarginsの引数にあるrelativeについて書きたいと思います。 public void SetMargins(int left, int top, int right, int bottom, bool relative = false) github.com // 使用例 private void Start() {…

【Unity】UniTask.WhenAllは省略できて、配列かIEnumerableかTupleをawaitしてあげるだけでも同じ意味になる

はじめに UniTask.WhenAllを利用することで全てのTaskが終了するまで待つことができます。 // 全てのTaskが終わるまで待つ await UniTask.WhenAll(UniTask.Delay(1), UniTask.Delay(2), UniTask.Delay(3)); 実はこれはいくつか書き方があるので、それを紹介…

【Unity】Unity2023.2からUI Toolkitの「UxmlElementとUxmlAttribute」を使用することでCustom UI Elementsを実装する際に「UxmlFactoryとUxmlTraits」が必要がなくなった

はじめに 今回はUI ToolkitのUxmlElementとUxmlAttributeについて取り上げたいと思います。docs.unity3d.com docs.unity3d.com昔Unity2023.2のTech Stream紹介ブログにて、Custom UI Elementsの実装を簡略化した改善が紹介されていました。 Custom UI Elemen…

【C#】噂のMD5が同じになる72文字で1文字しか変わらない文字列が本当か試してみる

C#

はじめに Xを見ていたら以下のような投稿を見かけました。Here is a 72-byte alphanum MD5 collision with 1-byte difference for fun: md5("TEXTCOLLBYfGiJUETHQ4hAcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak")=md5("TEXTCOLLBYfGiJUETHQ4hEcKSMd…

【Unity】Build Report Inspectorを用いてビルドプロセスに関する情報をインスペクター上に分かりやすく表示する

はじめに 今回はUnity公式パッケージであるBuild Report Inspectorについて紹介したいと思います。docs.unity3d.com 利用している様子 はじめに 概要 インストール方法 使い方 Build Report Inspectorの見方 Build Steps Source assets Output files Strippi…

【C#】BenchmarkDotNetを用いて処理速度・メモリ確保量を計測する

C#

はじめに 今回はBenchmarkDotNetというライブラリを利用して処理速度・メモリ使用量を計測する方法を紹介したいと思います。github.com はじめに 概要 インストール 使い方 1. classを用意 2. Benchmark属性をつけたメソッド定義 3. BenchmarkRunner.Runを行…

【C#】.NETでGoogle Cloud Functionsを作成してデプロイをする方法メモ

はじめに 今回はGoogle Cloud Functionsに.NETを利用した関数をデプロイする方法について書きたいと思います。内容的には以下の公式ドキュメントをミックスした感じです。 cloud.google.com cloud.google.com codelabs.developers.google.com先に書いておく…