はなちるのマイノート

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

C#

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が足りず発展途上かなといった感じです。…

【Unity】 「ValueTaskSupplement」でValueTaskに対してWhenAny, WhenAllを適応する

はじめに 今回はValueTaskに対してWhenAny, WhenAll, Lazyを適応できるようにするValueTaskSupplementについて紹介したいと思います。github.comまたLazy(AsyncLazy)に関しては、私自身ちゃんと理解できていなくこの記事には書かないので注意してください。 …

【C#, Unity】Regex.Matchはインスタンスメソッドを使うとGC.Allocと処理速度の面で有利

はじめに Regex.Matchには静的メソッドとインスタンスメソッドが存在します。 // 静的メソッド Match match = Regex.Match("An extraordinary day dawns with each new day.", @"\ba\w*\b"); // インスタンスメソッド Match match2 = new Regex(@"\ba\w*\b")…

【Unity】コルーチンでタスクをyiled returnしようとすると1フレームだけ待つという罠(UniTask.ToCorouine推奨)

はじめに コルチーンの中でTaskを待つために以下のようなコードがあったとします。 private IEnumerator SampleCoroutine() { Debug.Log("Start Task"); // 1フレームだけ待つことに注意 yield return SampleAsync(); Debug.Log("EndTask"); } private asyn…

【C#】System.Lazy<T>を用いてスレッドセーフな遅延初期化を行う

C#

はじめに 今回はSystem.Lazy<T>について取り上げたいと思います。learn.microsoft.com はじめに 概要 使い方 概要 System.Lazy<T>を使うことで、スレッドセーフな遅延初期化をすることができます。 遅延初期化のサポートを提供します。 遅延初期化を使用して、大規</t></t>…

【Unity】ZStringを導入してマネージドヒープへのアロケーションを削減する

はじめに 今回はZStringという文字列生成におけるGC.Allocをゼロにするライブラリについて紹介したいと思います。 今回、文字列生成におけるメモリアロケーションをゼロにする「ZString」というライブラリを公開しました。 ZString – Unity/.NET Coreにおけ…

【C#, Unity】C#7.0から導入された「ValueTask<TResult>」を利用してヒープアロケーションを減らしたかった(実験付き)

はじめに 今回はC#7.0より導入されたValueTask<TResult>について取り上げたいと思います。 learn.microsoft.comまずValueTask<TResult>の説明の前に、Task<TResult>を利用した非同期処理には以下のような問題点が指摘されていました。 非同期メソッドでも同期処理になる場合が多い Task</tresult></tresult></tresult>…

【C#】「"Year, Month, and Day parameters describe an un-representable DateTime."」というエラーが出てきた時の対処法

C#

はじめに 以下のようなエラーに遭遇しました。 "Year, Month, and Day parameters describe an un-representable DateTime." // Google翻訳 「Year、Month、および Day パラメータは、表現できない DateTime を記述しています。」 その対処法をメモしておき…

【C#】C#8.0から追加されたIAsyncEnumerableを使って非同期ストリームを実装する

C#

はじめに 恥ずかしながら最近になってやっとIAsyncEnumerableというものを知りました。 learn.microsoft.com ufcpp.net これは非同期ストリームと呼ばれるもので、ざっくり言うとasync/awaitとyieldが共存できるようになったというイメージでしょうか。C#8.0…

【C#】「ConfuserEx2」を用いてコードを難読化をする(Windows,プリセット毎の実験結果付き)

C#

はじめに 今回はConfuserEx2という.NETアプリケーションのためのオープンソースな難読化ツールを紹介したいと思います。mkaring.github.ioまた公式ドキュメントは以下にあります。 github.com はじめに 概要 サポート 実験環境 ダウンロード 下準備 使い方 C…

【Unity, C#】ライブラリを用いずエクセルファイル「.xlsx」の中身から要素を取得する(Zip展開)

はじめに 今回はエクセルのファイル(.xlsx)からライブラリを用いずに中身を調べる手法について紹介をしたいと思います。Unityでエクセルのデータを扱おうとすると、NPOIというライブラリを導入することが多いようですね。 www.nuget.org github.comただ最近.…

【Unity】NAudioを導入して、WAVEファイルをMP3ファイルに変換する(Windowsのみ動作確認,Macではダメだった)

はじめに 今回はNAudioというライブラリを導入して.wavから.mp3に変換したいと思います。また先に結論を言うと、WindowsではできましたがMacでは(私の調べた範囲で)できていません。 はじめに NAudioとは 環境 インストール WAVからMP3に変換する Macで動く…

【Unity】stackallocを用いる事でGC.Allocを発生せずに配列を確保する

はじめに 今回はUnityでのstackallocの使用を想定して、簡単な説明記事を書きたいと思います。 はじめに メモリ領域について stackallocとは stackallocの利用 stackalloc利用の注意点 Spanの注意点 おまけ メモリ領域について Unityでは以下の大きく分けて3…

【C#】Span<T>とString.Substringでどれくらい速度差が出てくるのか調べてみる

C#

はじめに 今回はSpan<T>とString.Substringでどれくらい速度差が出てくるのか調べてみる記事になります。 https://docs.microsoft.com/ja-jp/dotnet/api/system.span-1?view=net-6.0 String.Substring メソッド (System) | Microsoft Docs一応公式ドキュメント</t>…

【Unity】AudioClipからWAVEファイルを生成する

はじめに 前回WAVEファイルからAudioClipを動的に生成する記事を書きました。www.hanachiru-blog.com今回はその逆でAudioCliipからWAVEファイルを作ってみたいと思います。 はじめに WAVEファイルの形式 AudioClipとの対応 コード WAVEファイルの形式 前述の…

【Unity】Unity公式のNewtonsoft JsonとNuGetからのdllを共存させる

はじめに Unity2020よりPackageManagerからNewotonsoft.jsonがインポートできるようになりました。 Unity2020でNewtonsoft.Jsonを入れる - Qiita Unity公式のNewtonsoft.jsonそれ以前ではdllを入れていたwww.nuget.orgただUnity公式のものとNuGetから取って…

【Unity】WAVファイルからAudioClipを動的に生成する(WAVEのファイル構造解析)

はじめに 今回はWavファイルからAudioClipを生成する方法について書きたいと思います。https://docs.unity3d.com/ja/2018.4/ScriptReference/AudioClip.Create.html https://docs.unity3d.com/ja/2018.4/ScriptReference/AudioClip.SetData.html はじめに 利…

【Unity】Unity2020.3.32f1でEnumerable.ReverseよりもArray.Reverseがめちゃ遅いんだが??

はじめに Unityを触っていて、なんだかArray.Reverseが遅く、Enumerable.Reverseにしてみたら速くなったという不思議な現象に出会いました。 https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.reverse?view=net-6.0 https://docs.micros…

【Unity】Unity公式のObjectPoolを使ってみる(内部実装も一部紹介)

はじめに 今回はObjectPoolについて紹介していきたいと思います。 The object pool pattern is a software creational design pattern that uses a set of initialized objects kept ready to use – a "pool" – rather than allocating and destroying them …

【C#】リトルエンディアンとビッグエンディアンの変換を行う

C#

はじめに 今回はエンディアンの変換についてお話したいと思います。 エンディアン(英: endianness)は、複数のバイトなどを並べる順序の種類である。一般的な用語による表現ではバイトオーダ(英: byte order)、ないしそれを一部訳して日本語ではバイト順…

【Unity, C#】InternalsVisibleToを用いて特定アセンブリからinternalにアクセスできるようにする

はじめに 今回はInternalsVisibleToという属性(Attribute)について紹介したいと思います。 同一アセンブリ内でないとアクセスできない皆さんご存知かと思いますが、internalを利用することで同一アセンブリでしかアクセスできないようにすることができます。…

【C#】AES(Advanced Encryption Standard)暗号化をしてみる

C#

はじめに 今回はAES(Advanced Encryption Standard)暗号を利用してみるという記事になります。 Advanced Encryption Standard (AES) は、アメリカが2001年に標準暗号として定めた共通鍵暗号アルゴリズムである。アメリカ国立標準技術研究所(NIST)が公募し…

【Unity, C#】K4os.Compression.LZ4を使ってLZ4の圧縮・展開をしてみる

はじめに 今回はUnityでLZ4を用いてバイト配列を圧縮してみるという記事になります。 LZ4 は圧縮と展開の速さに焦点を当てた可逆圧縮アルゴリズムである。バイト指向の圧縮方法であるLZ77ファミリーに属する。 gzipのようなアルゴリズムより低い圧縮率である…

【C#】MemoryStreamを利用してメモリにデータを読み書きする

C#

はじめに 今回はMemoryStreamというメモリにデータを読み書きできるクラスの使い方について書きたいと思います。docs.microsoft.com 定義MemoryStream クラス (System.IO) | Microsoft Docs はじめに 使い方 使い方 MemoryStreamはStreamの派生クラスであり…

【Unity】AssetPostprocessorを利用してアセットをインポートした前後に処理を走らせる

はじめに 今回はAssetPosprocessorを利用してアセットをインポートした前後に処理を走らせてみる記事になります。docs.unity3d.com はじめに 使い方 関数一覧 Postprocess Preprocess 応用例 特定のフォルダにファイルが追加・削除されたときに操作を行う Te…

【Unity】AssetStudioでUnity製のゲーム・AssetBundleの中身を覗き見・エクスポートする(悪用はしないように)

はじめに 今回はAssetStudioというツールを利用して、AssetBundleを抽出&解析してみるという記事になります。github.com AssetBundleの中身を解析している様子あんまり深く掘っていくとグレーな予感がしてきますが、逆に開発者にとってもこういった危険性が…

【Unity】OpenJTalkのC#ラッパーであるSharpOpenJTalkを利用して音声合成を行う

はじめに 前回OpenJTalkForUnityというUnityで簡単にOpenJTalkを利用できるようにしたパッケージを紹介しました。 www.hanachiru-blog.comただこのパッケージはWindowsでしか動作しないという欠点があり、どうしてもクロスプラットフォームで動作させたかっ…