はなちるのマイノート

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

Unity

【Unity】UI ToolkitのScrollViewを強制的に再描画させる方法

はじめに UI Toolkitを使用していて、ScrollViewのScrollbarを再描画したいと思い以下のコードを書きました。 var scrollView = uxml.Q("SampleScrollView"); scrollView.MarkDirtyRepaint(); 割と名前から推測してしまっていますが、これだと特に動作しない…

【Unity2024 Advent Calendar】Unityのコードメトリクスを可視化するための分析基盤の作り方(CodeCoveragePackage + coverlet.collector + octocov + BigQuery + Looker Studio)

はじめに こちらはUnity2024 Advent Calendarの12/20記事になります。是非他の方の記事もチェックしてみてください。 qiita.com今回はUnityでのコードメトリクスを可視化するための分析基盤の作り方について紹介したいと思います。 PRのコメントでコードメト…

【Unity】com.unity.search.extensionsに依存しているとEditMode TestがFailする話

はじめに 先日Unityが公開している(といってもOfficialではない)パッケージであるcom.unity.search.extensionsに依存しているプロジェクトのEditMode TestがFailしてしまうことに気が付きました。 EditMode Testが失敗している様子ValidateCustomIndexation(…

【Unity】生成したコードをPrefabに自動でアタッチする方法

はじめに 今回は生成したコードをPrefabに自動アタッチする方法を紹介したいと思います。 はじめに 概要 コンパイル後にアタッチする 実験 概要 PrefabへのアタッチにはPrefabUtilityを利用すると簡単に実現できます。 docs.unity3d.com private static void…

【Unity】YetAnotherHttpHandlerを用いてHTTP/2を扱えるHttpClientを作成する

はじめに 今回はYetAnotherHttpHandlerを用いてUnityでHTTP/2を扱う方法を紹介したいと思います。 はじめに 背景 概要 環境 インストール方法 使い方 さいごに 背景 まず.NETが提供するHttpClientですが、.NET Core3.0以降であればHTTP/2に対応しています。 …

【Unity】UI ToolkitのTwoPaneSplitViewをコードから動的に生成せずに利用する方法

はじめに UI ToolkitのTwoPaneSplitViewというVisualElementがあるのですが、それがめちゃくちゃ便利です。2つの要素をリサイズできるようにしつつ分割して表示してくれるものになります。 docs.unity3d.com TwoPaneSplitViewよくコードからTwoPaneSplitView…

【Unity】.asmrefはCore CLRがくると動作しなくなるよという話

はじめに UnityはMonoからCore CLRへの移行を進めていますが、Core CLRがくると.asmrefが使えなくなるみたいです。そのあたりを軽く調べてみたので、そのまとめを書き残しておきたいと思います。また現時点ではまだ開発中なので、今後変わるかも知れないので…

【Unity】RiderのBreakpointにてEvaluate and logが出力に表示されないときの対処法(Breakpoint Trace message outputを設定する必要あり)

はじめに RiderにはBreakpointにてEvaluate and log(評価して記録)というブレークポイントに到達したときに値の評価しログ出力できる機能があります。 Evaluate and log JetBrains Rider では、任意の行、メソッド、例外ブレークポイントをトレースポイント…

【Unity】UI ToolkitでWindow画面いっぱいに表示ができないときの対処法(Unityが自動生成するTemplateContainerの影響)

はじめに 今回はUI Toolkitで画面いっぱいに何かを表示したいときの方法を紹介したいと思います。 画面いっぱいに表示している様子 はじめに UI Builderと実際の見た目が異なる 原因 対処法 参考 UI Builderと実際の見た目が異なる BackgroudColorを赤色に設…

【C#】Incremental SourceGeneratorを利用した爆速Enumユーティリティライブラリを作成した話

はじめに 先日、SourceGeneratorを利用したパフォーマンスの良いEnumユーティリティを提供するライブラリを公開しました。 github.com.NET標準API や 世界最速のenumライブラリ FastEnum よりもパフォーマンスが良いライブラリ RapidEnum リリースしました!…

【C#】MessagePack-CSharpでCustom Formatterを定義して、独自の型やサードパーティー製ライブラリに含まれる型に対応する方法

はじめに 今回はMessagePack-CSharpでCustom Formatterを作成する方法を紹介したいと思います。github.com はじめに 概要 環境 やり方 Custom Formatterの作成 Resolverの作成 よりパフォーマンスを上げるために MessagePackSerializerOptionsへの設定 実験 …

【Unity】SourceGeneratorにてRegisterPostInitializationOutputでAttributeを定義した際に特定のアセンブリにしか含めたくない場合は、asmdefのVersion Definesを用いると実現できる

はじめに SourceGeneratorにてRegisterPostInitializationOutputを用いてAttributeを定義するのは、公式も紹介しているようなよくある手法です。 RegisterPostInitializationOutput:... It is particularly useful for adding attribute definitions to the …

【C#, Unity】VYamlを用いてYAML(Unityで利用される特殊な形式を含む)をシリアライズ・デシリアライズする方法

はじめに 今回はVYamlを用いてYAML(Unityで利用される特殊な形式を含む)をシリアライズ・デシリアライズする方法を紹介したいと思います。github.com はじめに UnityとYAML VYamlとは インストール方法 Unityの場合 基本的な使い方 命名規則 あらかじめSchem…

【Rider】Riderの日本語言語パックを利用して表示を日本語にする(Japanese Language Pack / 日本語言語パック)

はじめに 今回はRiderを日本語化しようという記事になります。 日本語化した状態 はじめに やり方 参考 やり方 Riderを開き、メニューバーよりFile -> Settingsを選択。 File -> SettingsタブバーからPluginsを選択し、Japanese Language Packを検索しインス…

【Unity】UnityでSourceGeneratorのAdditionalFilesを用いてファイル読み込みをしたい場合はcsc.rspをasmdefと同階層に配置する

はじめに 今回はUnityでIncremental Source GeneratorのAdditionalTextsProviderを利用する方法を紹介したいと思います。 はじめに その前に AdditionalFilesを利用してファイルを読み込む Unityでの場合 ちょっとした裏技(?) その前に どこかのバージョン…

【Rider】Shiftを2回押すことで"どこでも検索(Search Everywhere)"というあらゆるものを検索できる検索ボックスを開く

はじめに 今回はRiderのショートカットである"どこでも検索(Search Everywhere)"について紹介したいと思います。 pleiades.io Shift2回を押してどこでも検索を利用している様子個人的にRiderで覚えて欲しい機能一位でして、これがないともうコード書けません…

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

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

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

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

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

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

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

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

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

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

【Unity】Unity SearchでApplication.dataPathなどのpublicなStatic APIメソッドとプロパティの結果をお手軽に調べる方法(api:)

はじめに 今回はUnity Searchを利用して簡単にApplication.dataPathなどのpublicなStatic APIメソッドやプロパティを実行する方法を紹介したいと思います。docs.unity3d.com はじめに やり方 自前のStaticメソッドの実行 参考 やり方 Unity Editor上でComman…

【Unity】Debug.LogなどのConsoleへのログ出力にハイパーリンクを埋め込む方法

はじめに 今回はDebug.LogなどのConsoleへのログ出力にハイパーリンクを埋め込む方法を紹介したいと思います。 ハイパーリンクを埋め込んでいる様子 はじめに やり方 外部サイト Assets以下のファイル 該当コード 参考 やり方 外部サイト // 外部サイトを開…

【Unity】「Diagnostic switches are active and may impact performance or degrade your user experience. Switches can be configured through the Diagnostics section in the Preferences window.」というエラーの対処法

はじめに Unityエディタを開いていたら以下のようなエラーが出てきました。 Diagnostic switches are active and may impact performance or degrade your user experience. Switches can be configured through the Diagnostics section in the Preferences…

【Unity】UnityEditor上でプロジェクト直下やPackagesやUserSettingsやLogsといったパスをPath.Combineで取得する(System.Environment.CurrentDirectoryを使ってはダメ)

はじめに 今回はUnity Editor上でプロジェクト直下・Packages・UserSettings・Logsといったパスの取得方法を紹介したいと思います。 利用している様子 はじめに やり方 Application.dataPathについて やり方 以下はUnity Editor上での取得方法です。 // コメ…

【Unity】GameCIを用いてUnityのCI 環境をGitHub Actions上に構築し、Test Frameworkを実行&結果をアップロードする方法

はじめに 今回はGameCIを用いてUnityのCI 環境をGitHub Actions上に構築し、Test Frameworkを実行&結果をアップロードする方法を紹介したいと思います。github.com具体的には以下の2つを紹介します。 GameCIを利用するための設定方法 TestFrameworkをGitHub …