はなちるのマイノート

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

【Unity】asmdefで"必須パッケージ"と"任意パッケージ"を定義する方法

はじめに 今回はasmdefで必須パッケージと任意パッケージを定義する方法について紹介をしたいと思います。 任意パッケージのサンプル(左)と必須パッケージのサンプル(右) はじめに その前に やり方 必須パッケージのやり方 任意パッケージのやり方 その前に …

【C#】fixedステートメントを用いてGCによるアドレスの変更を阻止する(GC管理下だとコンパクションの可能性があるため)

C#

はじめに 今回はfixedステートメントについて書きたいと思います。 はじめに 概要 使い方 参考 概要 GC管理下にあるオブジェクトは、アドレスが最適化のために移動されることがあります。詳細は未確認飛行さんのコンパクションの箇所を読むと良いでしょう。 …

【C#】BitConverter.GetBytesはbyte配列が生成されてしまうので、極力BitConverter.TryWriteBytesを利用してAllocation削減する

はじめに 今回はBitConverter.GetBytesとBitConverter.TryWriteBytesに焦点をあててAllocationについて書きたいと思います。learn.microsoft.com learn.microsoft.com はじめに 概要 BitConverter.TryWriteBytesを利用する 利用サンプル1 利用サンプル2 参考…

【C#】Conditional属性は呼び出し元のシンボル定義を参照するので注意、またその対処法

C#

はじめに 今回はConditionalAttributeは呼び出し元のシンボル定義を参照していることについて取り上げたいと思います。learn.microsoft.com メソッド呼び出しがスキップされる場合とされない場合 はじめに 概要 気をつけたいこと 対処法 概要 そもそもCondit…

【C#】CallerMemberName, CallerFilePath, CallerLineNumberを用いてメソッドの呼び出し元の情報を取得する(メソッド名またはプロパティ名, パス, 行番号)

はじめに 今回はメソッドの呼び出し元情報を取得できるようになる3つの属性(CallerMemberName・CallerFilePath・CallerLineNumber)を紹介したいと思います。 はじめに 概要 CallerFilePath CallerLineNumber CallerMemberName 使い方 実験 概要 CallerMember…

【Unity】Unity.Collections.xxHash3.StreamingStateを利用してデータ少しずつ入力しながらハッシュ値を計算する

はじめに 前回xxHash3.Hash64とxxHash3.Hash128を紹介したのですが、今回はいくつかのデータをそれぞれ計算した後にハッシュ値を取得できるxxHash3.StreamingStateを紹介したいと思います。 www.hanachiru-blog.com // サンプルコード // 128bits xxHash3.St…

【C#】Utf8Formatter.TryFormatを用いて一般的なデータ型をUtf8 文字列として書式設定する

C#

はじめに 今回はUtf8Formatter.TryFormatについて紹介したいと思います。 int value = 999; // e7, 3, 0, 0 Console.WriteLine(string.Join(",", BitConverter.GetBytes(value).Select(x => x.ToString("x")))); // 書き込み先のメモリ領域 Span<byte> destination</byte>…

【C#】.NETの内部実装がGitHubで公開されていたので見てみる(Contributeも可)

C#

はじめに 先日教えていただいたのですが、どうやら.NETの内部実装を見れるGitHubのRepositoryが公開されているらしいです。 This repo contains the code to build the .NET runtime, libraries and shared host (dotnet) installers for all supported plat…

【C#】IBufferWriter<T>の使い方・実装の仕方について学んでいく(公式のArrayBufferWriter<T>の内部実装を見ながら)

C#

はじめに 今回はIBufferWriter<T>の使い方・実装の仕方について書きたいと思います。learn.microsoft.com はじめに IBufferWriterの利用者視点での使い方 IBufferWriterの実装者視点での使い方 応用 File書き込みとかにも利用したい 参考 IBufferWriterの利用者</t>…

【C#】Marshal.AllocHGlobal・NativeMemory.Alloc・NativeMemory.AllocZeroedを利用してアンマネージドメモリを確保する方法

C#

はじめに 今回はアンマネージドメモリを確保・破棄する方法について以下の3つを紹介したいと思います。 Marshal.AllocHGlobal NativeMemory.Alloc NativeMemory.AllocZeroed はじめに 概要 Marshal.AllocHGlobal Marshal.FreeHGlobal NativeMemory.Alloc Nat…

【Unity】Unity公式のハッシュアルゴリズムxxHash3がCollectionsパッケージに入っているので使ってみる

はじめに 今回はUnity公式のxxHash3について紹介をしたいと思います。 public void Start() { // unmanagedなHeap確保 NativeArray<byte> input = new NativeArray<byte>(10000, Allocator.Temp, NativeArrayOptions.UninitializedMemory); for (var i = 0; i < input.Le</byte></byte>…

【C#】RuntimeHelpers.IsReferenceOrContainsReferences<T>メソッドを利用して"参照型"か"参照型を含む値型"か調べる

C#

はじめに 今回はRuntimeHelpers.IsReferenceOrContainsReferences<T>について紹介をしたいと思います。learn.microsoft.com はじめに 概要 使い方 考察 参考 概要 public static bool IsReferenceOrContainsReferences<T> (); 指定された型が参照型であるか、また</t></t>…

【C#】C#9.0から導入された静的匿名関数(Static anonymous functions)を利用して状態のキャプチャを禁止する

はじめに 今回はC#9.0から導入された静的匿名関数(Static anonymous functions)について取り上げたいと思います。 learn.microsoft.com はじめに 概要 参考 概要 ラムダおよび匿名メソッドに対して ' static ' 修飾子を許可します。これにより、含まれるスコ…

【C#】unsafeを用いずにReadOnlySpan<char>からSpan<char>に変換をして中身を好き勝手にいじる

C#

はじめに 今回はunsafeを用いずにReadOnlySpan<Span>からSpan<char>に変換する方法について紹介をしたいと思います。 ReadOnlySpan<char> str = "hello, world"; var span = MemoryMarshal.CreateSpan(ref MemoryMarshal.GetReference(str), str.Length); // unsafe使わずとも</char></char></span>…

【C#】Unsafe.WriteUnalignedとMemoryMarshal.GetReferenceとSpanを組み合わせてメモリのコピーを行う

C#

はじめに 今回はUnsafe.WriteUnalignedとMemoryMarshal.GetReferenceとSpanを組み合わせてメモリのコピーを行ってみようという記事になります。 // サンプルコード public static void Main(string[] args) { int value = 999; // 231, 3, 0, 0 Console.Writ…

【C#】64ビットの擬似乱数生成器"Splitmix64"を実装してみる

C#

はじめに 今回はSplitmix64という擬似乱数生成器をC#で実装してみようという記事になります。 はじめに 概要 実装 参考 概要 Splitmix64は64ビットの高速な疑似乱数生成器です。C#で64ビットの型はlongやulongとかですね。 64ビットの状態のみを使用した非常…

【Unity】Application.logMessageReceivedを用いてUnityのログメッセージが発行されたときに処理を行う

はじめに 今回はUnityのログメッセージが発行されたときに処理を挟むことができるApplication.logMessageReceivedについて取り上げたいと思います。 ログメッセージが発行されたときに受信するためのイベントハンドラーこのイベントはメインスレッドでのみ動…

【Unity】エディタ拡張でPrefabStageUtilityを用いてPrefab ModeでPrefab Assetを開いたりPrefab stageを取得したりする

はじめに 今回はUnityEditor.SceneManagement.PrefabStageUtilityを用いて、Prefab Modeでアセットを開いたり、Prefab stageを取得したりする記事になります。docs.unity3d.com PrefabStageUtility.OpenPrefabを実行した様子 はじめに 概要 PrefabStageUtili…

【C#】MemoryMarshal.Castを利用してある型の配列を他の型の配列に変換をする

はじめに 今回はMemoryMarshal.Castについて取り上げたいと思います。learn.microsoft.com // int[]からbyte[]に変換を行うサンプルコード // 変換前:int[] (intは4バイト) Span<int> from = Enumerable.Range(int.MaxValue - 5, 5).ToArray(); // 変換後:byte[</int>…

【Rider】メソッド抽出(extract method)というリファクタリング機能がとても便利

はじめに 今回はメソッド抽出(extract method)というRiderのリファクタリング機能について紹介したいと思います。pleiades.io メソッドの抽出をしている様子 はじめに 概要 やり方 メソッドの抽出 ローカル関数の抽出 概要 Riderのメソッド抽出を利用するこ…

【Unity】UnityEngine.Scripting.PreserveAttributeを用いてストリッピングを防止する(実は独自PreserveAttributeでも対応可)

はじめに 今回はPreserveAttribute属性を用いてストリッピングを防止する方法について紹介したいと思います。 docs.unity3d.com はじめに 概要 使い方 実験 UnityEngine.dllに依存しないために 概要 まずはコードストリッピングについて概要を載せておきます…

【Unity】エディタ上でBuilt-inに存在するアイコンのTextureを取得する方法

はじめに 今回はUnityEditorにビルドインで存在するアイコンのTextureを取得する方法を紹介したいと思います。 アイコンを使用している様子 はじめに やり方 やり方 EditorGUIUtility.Loadを用いてbuilt-inリソースを読み込みます。 public static Object Lo…

REST Clientを用いてVisual Studio Codeで直接HTTPリクエストを送信・レスポンスを表示する

はじめに 今回はVSCodeの拡張機能の一つであるREST Clientを紹介したいと思います。 REST Client allows you to send HTTP request and view the response in Visual Studio Code directly. It eliminates the need for a separate tool to test REST APIs a…

【Unity】Unity Test Frameworkでログ出力のテストをする方法(特にDebug.LogError, Debug.LogException)

はじめに 今回はログ出力のテスト方法について紹介をしようと思います。 ログ出力をしている例 はじめに 概要 テスト方法 概要 Unity Test FrameworkではDebug.LogErrorやDebug.LogExceptionが実行されるとテストが失敗になる仕様にデフォルトでなっています…

【Unity】コンパイル後のdllに対してリフレクションを利用せずにasmrefを使ってinternalにアクセスする方法(必ずできるわけではない)

はじめに 今回はコンパイル後のdllに対してリフレクションを利用せずにasmrefを使ってinternalにアクセスする方法について紹介したいと思います。この記事を見ている方ならasmrefについての説明は大丈夫かと思いますが、一応前書いておいた記事を貼っておき…

【Unity】エラー発生時にシーンの再生を一時停止する方法

はじめに 今回はConsoleウィンドウのError Pauseについて紹介をしたいと思います。 スクリプトから Debug.LogError が呼び出されるたびに再生を一時停止します。実行の特定の時点で再生をフリーズし、シーンを検査したい場合に便利です。Debug.Log が呼び出…

【C#】XMLタグのseeタグを用いてコメント内からリンクを生成する

C#

はじめに 今回はXMLタグのseeタグについて取り上げたいと思います。 /// <summary> /// <see cref="HogeClass"/>はとても凄いクラスです。 /// </summary> public class SampleClass seeタグを利用している様子 はじめに 概要 書き方 参考 概要 XMLタグのseeタグを利用することで、テキスト内からリンク…

【Rider】AI Assistantで日本語でやり取りをする方法

はじめに Rider 2023.2 EAP 6がリリースされ、AI Assistantが導入されました。以下概要とAI Assistantを利用するための手順記事。AI Chatのやり方も記載しています。 www.hanachiru-blog.com最初触った感じAI chatは英語だけ対応しているのかなと思ったので…

【Rider】AIにコミットメッセージを記載してもらう方法

はじめに Rider 2023.2 EAP 6からAI Assistantが実装されました。導入方法と概要は以下の記事にまとめています。www.hanachiru-blog.comその中でもCommit messages generationというAIがコミットメッセージを考えてくれる機能にフォーカスを当てて紹介したい…

【C#】string-interpolation(文字列補間)がC#10.0からboxingが発生しないようになる修正が入ったらしい(DefaultInterpolatedStringHandler)

C#

はじめに 今回はstring-interpolationの実態がどうなっているかについて取り上げたいと思います。 var x = 10; var y = 20; var str = $"{x}, {y}"; はじめに C#9時点 defalt(C#10.0以上) Unityとの関係性について C#9時点 SharpLabにて先ほどのコードをC#9…