はなちるのマイノート

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

Unity

【Unity】DoTweenでUniTaskを対応させてawaitできるようにする

はじめに 今回はDoTweenとUniTaskを組み合わせる方法について紹介したいと思います。 // DoMoveXをCancellationToken付きでawaitする await gameObject.transform.DOMoveX(10f, 1) .WithCancellation(token); はじめに やり方 参考 やり方 UniTask.DOTweenと…

【Unity】Cysharp製NativeMemoryArrayを利用して、マネージドヒープを利用しない配列を確保する(要素数の制限なし)

はじめに 今回はNativeMemoryArrayというネイティブメモリを利用した配列を簡単に利用できるようにしたライブラリを紹介したいと思います。 NativeMemoryArray is a native-memory backed array for .NET and Unity. The array size of C# is limited to max…

【Unity】並べ替え可能なランダムIDジェネレーターである「Cysharp製Ulid」の利用法(Guid.NewGuidより高速,生成時刻によるソート可)

はじめに 今回はCysharp/Ulidという.NET CoreやUnityのためのランダムIDジェネレーターを紹介したいと思います。 Fast C# Implementation of ULID for .NET Core and Unity. Ulid is sortable, random id generator. This project aims performance by faste…

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

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

【Unity】エディタ拡張でメニューバーにチェックを付ける(Menu.SetChecked)

はじめに 今回はエディタ拡張でメニューバーにチェックを付ける方法について紹介したいと思います。 Menu.SetCheckedの利用例docs.unity.cn docs.unity3d.com はじめに やり方 エディタ起動時に前回の情報を読み込む エディタの起動時のみ処理を行う 初期化…

【Unity】アセットが変更時にアセットの自動更新をしないようにする(自動コンパイル無効化, Auto Refresh)

はじめに 今回はスクリプトが変更されたときに自動でコンパイルがされないようにする方法について紹介をしたいと思います。docs.unity3d.com はじめに Auto Refresh 再生時にコンパイルを行う Auto Refresh Preferences/Asset Pipline/Auto Refresh(Unity202…

【Unity】「Unable to find player assembly: Library/PlayerScriptAssemblies/UnityEngine.TestRunner.dll」というエラーの対処法(Burstのバージョンによるエラー)

はじめに プロジェクトをビルドしようとしたところ、以下のようなエラーが出てきてしまいました。 Unable to find player assembly: Library/PlayerScriptAssemblies/UnityEngine.TestRunner.dll UnityEngine.Debug:LogWarning (object) Unity.Burst.Editor.…

【Unity】Fullscreen ShaderGraphというShaderGraphでフルスクリーンエフェクトが作れる機能が実装された(Unity2022.2以降)

はじめに Youtubeの公式チャンネルにkeifiro神が以下の動画をあげていました。www.youtube.com動画も4分くらいなので正直そちらを見た方が良いかと思いますが、Fullscreen ShaderGraphについてブログにまとめておきます。あとURPとHDRPに対応していますが、…

【Unity】NativeArray<T>からSpan<T>へ変換する方法(2022.2以前はunsafe, 2022.2以降はAsSpan)

はじめに 今回はNativeArray<T>からSpan<T>への変換方法を紹介したいと思います。docs.unity3d.com はじめに 環境 2022.2以前 2022.2以降 環境 Unity2022.2.0b16 2022.2以前 unsafeを利用する必要があります。 private unsafe void Start() { // NativeArrayの生成</t></t>…

【Unity】Scripted Importerを使ってUnityが対応していない拡張子のファイルに対応する(テキスト暗号化も)

はじめに 今回はScripted Importerについて紹介したいと思います。 Scripted Importer は Unity スクリプティング API の一部です。Scripted Importer を使用すると C# でカスタムアセットインポーターを作成できます。これにより、Unity でネイティブにサポ…

【Unity】asmdefのVersion Definesを利用して特定のパッケージ(の特定バージョン)がある場合にのみシンボル定義を行う

はじめに 今回はasmdefのVersion Definesについて取り上げたいと思います。 Version Definesdocs.unity3d.com はじめに 概要 バージョン指定の式の書き方 以上 以上・以下 より大きい・より小さい 等しい 概要 Version Definesを用いることで特定のパッケー…

【Unity】Compilation Visualizer for Unityを用いてアセンブリのコンパイルプロセスを可視化する

はじめに 今回はCompilation Visualizerというアセンブリのコンパイルプロセスを可視化することができるツールを紹介したいと思います。github.com 概要 Compilation Visualizerはアセンブリのコンパイルプロセスを可視化するツールです。 具体的に以下のよ…

【Unity】LocalizationのStringTableCollectionを一括でCSVに出力するエディタ拡張を作った

はじめに Localizationで利用している大量のStringTableCollectionをCSVに出力してほしいとの要望があったのですが、一々LocalizationTablesWindowをいじってCSVに出力するのはかなり辛そうだと思いました。 LocalizationTablesWindowぱっと調べてみたところ…

【Unity】スクリプトでプロジェクト内の特定のScriptableObjectを取得するやり方(Editor拡張で便利)

はじめに 今回はProject内(Assets/以下)に含まれているScriptableObjectを探す方法を紹介したいと思います。 はじめに やり方 やり方 以下の3つのメソッドを利用します。 メソッド 意味 AssetDatabase.FindAssets t:〇〇とすると特定のtypeのアセットのGUID…

【Unity】asmdefのDefine Constraintsを利用して特定のシンボルが定義されているときのみアセンブリを含める

はじめに 今回はasmdefのDefine Constraintsについて取り上げたいと思います。 Define Constraints はじめに 概要 設定の仕方 シンボル定義について Define Constraintsの書き方 複数の記述 シンボルが未定義 または 概要 Define Constraintsは特定のシンボ…

【Unity】Unity Test Framework v1.3からUniTaskを使わなくても簡単に非同期処理のテストができるようになった

はじめに Unity Test Framework(旧:Unity Test Runner)で非同期のテストをしようとすると以下のように書く事が主流?でした。 [UnityTest] public IEnumerator DelayIgnore() => UniTask.ToCoroutine(async () => { var time = Time.realtimeSinceStartup; T…

【Unity】Assembly Definition Referenceを用いて特定アセンブリにフォルダ以下のスクリプトを含める(asmdefによるファイル配置の制約に有効)

はじめに 今回はAssembly Definition Referenceについて紹介をしたいと思います。 Assembly Definition References The scripts in the folder containing the Assembly Definition Reference asset, including scripts in any child folders (unless those …

【C#】非同期using(await using)を利用してIAsyncDisposableインターフェイスを実装するオブジェクトの破棄・解放処理を実行する

はじめに 今回は非同期using(await using)について紹介したいと思います。learn.microsoft.com はじめに 概要 必ずIAsyncDisposableを実装する必要はない IDisposableとIAsyncDisposable 概要 IAsyncDisposableを実装しているオブジェクトに対して、await us…

【Unity】EditorUtility.Open〇〇とEditorUtility.Save〇〇を用いてファイル・フォルダ選択パネルを利用する

はじめに 今回はファイル・フォルダ選択パネルに関係する6つのメソッドについて紹介をしたいと思います。 EditorUtility.OpenFolderPanel EditorUtility.OpenFilePanel EditorUtility.OpenFilePanelWithFilters EditorUtility.SaveFolderPanel EditorUtility…

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

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

【Unity】Tensorflow Liteを利用してUnityで機械学習の推論を行う(tf-lite-unity-sampleを利用)

はじめに Unity SYNCを見ていたところ、以下の講演にて面白い事を話されていました。youtu.be 初手Tensorflow Lite(以下 TFlite)でCPU推論がお勧め。理由は以下。 ONNXRuntimeやBarracudaと比較して多くのケースで推論が最速 私もONNXRuntimeやBarracudaを利…

【Unity】「OggVorbisEncoder」を用いてWavファイルからOggファイルに変換を行う

はじめに 今回はOggVorbisEncoderというライブラリを用いたWavからOggへのファイル変換の仕方について紹介したいと思います。github.com一応Macでの動作確認はできたので、Windowsでもいけると思います。(是非調べてみてください) はじめに 概要 インストー…

【Unity】GarbageCollectorクラスでガベージコレクションのオンオフなどを制御する

はじめに 今回はGarbageCollectorクラスを用いてガベージコレクションのオン・オフなどを制御してみようという記事になります。 docs.unity3d.com はじめに ガベージコレクションを発生させないようにする GCModeの変更された時に処理を挟む インクリメンタ…

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

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

【Unity】公式パッケージ「Editor Coroutines」を利用してエディタ内でCoroutineを扱う事ができるようにする(内部実装で説明)

はじめに 今回は公式パッケージであるEditor Coroutinesについて紹介をしたいと思います。docs.unity3d.com 概要 Editor Coroutinesはエディタ内でCoroutineを扱う事ができるようにした公式パッケージです。 The Editor Coroutines package allows the user …

【Unity】Profiler.BeginSampleとProfiler.EndSampleを用いてコードの一部をプロファイリングする

はじめに 今回はProfilerクラスのメソッドであるBeginSampleとEndSampleについて紹介したいと思います。 はじめに 概要 補足 概要 まずは公式ドキュメントの説明を載せます。 // Profiler.BeginSample カスタムラベルの付いたコードの一部のプロファイリング…

【Unity】Physics.RaycastAllではなくPhysics.RaycastNonAllocを利用してGC.Allocを防ぐ(実験結果付き)

はじめに 今回はPhysics.RaycastAllとPhysics.RaycastNonAllocの違いについて紹介したいと思います。docs.unity3d.comdocs.unity3d.com はじめに 概要 違い 実験 注意点 概要 Physics.RaycastAllとPhysics.RaycastNonAllocはどちらもRayを飛ばしてぶつかった…

【Unity】エディタ上でスクリプトからAudioClipを再生する(Unity 2020.2からPlayClip -> PlayPreviewClipになったので注意)

はじめに 今回はエディタ上でスクリプトからAudioClipを再生する方法を書きたいと思います。具体的な利用場面は、EditorWindow内でボタンを押したら音声を出力したいといった場合とかですかね。 はじめに 概要 やり方 補足 補足2 概要 エディタ上で音声を再…

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

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

【Unity】ScriptableObjectをテキスト形式ではなくバイナリ形式で保存する(PreferBinarySerialization)

はじめに 今回はPreferBinarySerializationという属性(Attribute)について紹介したいと思います。docs.unity3d.com はじめに PreferBinarySerializationとは? メリット デメリット 補足 PreferBinarySerializationとは? PreferBinarySerializationをScript…