はなちるのマイノート

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

C#

【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ビットの状態のみを使用した非常…

【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】Unity Test Frameworkでログ出力のテストをする方法(特にDebug.LogError, Debug.LogException)

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

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

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

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

C#

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

【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…

【Rider拡張機能】XML Doc Inspectionsを導入して XML Doc commentの警告を出す範囲を指定する(Unityでも有用)

はじめに 今回はRiderの拡張機能であるXML Doc Inspectionsについて紹介したいと思います。 A simple ReSharper extension which enables to show warnings for missing XML Doc comments for types and type members. In contrast to the C# compiler's CS1…

【Rider】RiderにHeap Allocations Viewerを導入してヒープアロケーションを可視化する(Unityでもオススメ)

はじめに 今回はHeap Allocations Viewerについて取り上げたいと思います。 This plugin statically analyzes C# code to find all local object allocations happening.It can be used to reduce number of heap allocations in hot paths of your C# progr…

【C#】ref構造体(ref struct)の特徴・制約について

C#

はじめに 今回はref構造体(ref struct)について取り上げたいと思います。 ref 修飾子は、構造体型の宣言内で使用できます。 ref struct 型のインスタンスはスタック上に割り当てられます。マネージド ヒープにエスケープすることはできません。 learn.micros…

【C#】Dictionary, HashSet, Hashtable, SortedDictionary, SortedSetの違いをそれぞれ解説(ハッシュテーブル or 2分探索木)

C#

はじめに 今回はDictionary, HashSet, Hashtable, SortedDictionary, SortedSetという似たようなコレクションについて取り上げたいと思います。 はじめに データ構造 使用例 HashSetとDictionaryの違い Hashtable SortedDictionaryとSortedSetの違い 参考 デ…

【C#】ハッシュ関数MD5, SHA1, SHA256, SHA384, SHA512の使い方まとめ

C#

はじめに 今回はハッシュ関数について取り上げたいと思います。そもそもハッシュ関数(ハッシュアルゴリズム)ってなんやねんと思う方もいると思うので引用を載せておきます。 ハッシュ アルゴリズムは、任意の長さのバイナリ値を、ハッシュ値と呼ばれるより小…

【C#】2次元配列でループを回す際にアクセス順序によって速度に違いがでるらしい(行優先)

C#

はじめに 先日ネットサーフィンをしていたところ、以下の記事を見つけました。daeudaeu.comC言語だと以下のコードに違いがでてくるそうです。 // こっちは低速 for(x = 0; x < 4096; x++){ for(y = 0; y < 4096; y++){ array2[y][x] = array1[y][x]; } } // …

【C#】C#9.0から登場したコンストラクタ・オブジェクト初期化子のみで変更可能なinitアクセサーについて

C#

はじめに 今回はC#9.0から登場したinitアクセサーについて取り上げたいと思います。 learn.microsoft.com はじめに 概要 サンプルコード 参考 概要 initアクセサーを用いることでコンストラクタもしくはオブジェクト初期化子のときのみ変更できるようにでき…

【C#】配列のインデックス・範囲の指定方法まとめ

C#

はじめに C# 8.0からa[^1]やa[1..2]といった記法が使えるようになりました。learn.microsoft.comただ私は未だにこれどこ指しているんだっけとなってしまうので、備忘録的な意味合いも兼ねて一覧としてまとめておきたいと思います。 はじめに インデックスの…

JetBrains Rider2022.3.2で「ReSharper Host Connecting to ReSharper Host...」から進まないときの対処法

はじめに JetBrains Rider2022.3.2を利用していたら、突然以下のようなエラーが表示されインテリセンスが効かなくなってしまいました。 Connecting to Reshaper Host ReSharper Host Connecting to ReSharper Host... 一応解決できたので備忘録の意味合いも…

【C#, Unity】ValueTask.AsTaskを利用してValueTask<TResult>からTask<TResult>に変換をする

C#

はじめに 今回はValueTask.AsTaskメソッドについて紹介をします。learn.microsoft.com はじめに 説明 説明 AsTaskを実行すると以下の挙動になります。 この ValueTask でラップされる Task オブジェクト (存在する場合)、または、結果を表す新しい Task オブ…

【Unity】UniTask-Supplementを用いてUniTaskのCancellationTokenを渡す記述を簡素化する

はじめに 今回はUniTask-SupplementというUniTaskのCancellationTokenを渡す記述をより簡単にしてくれるライブラリについて紹介をしたいと思います。github.com github.com はじめに 導入方法 使い方 基本 新しく実装されたメソッド WhenAnyでCancellationTo…

【Unity】Unity 2023.1より登場したAwaitableの使い方まとめ(Unity公式版UniTask??)

はじめに ついにUnity2023.1よりUnity公式版UniTaskが出ました。(結構語弊がありそうだか...)github.comただ現段階ではUniTaskと同等・もしくはそれ以上な機能を持っているわけではなく、軽く触った限りはまだまだAPIが足りず発展途上かなといった感じです。…