うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】Addressable で「Use Existing Build」の際に Local Group はAddressable からロードするようにする

Addressable では 「Use Existing Build」の場合ローカルとリモートのグループともにカタログに記載されていなればロードできない しかし、ローカルグループの量が多かったりするとテストのたびにローカルのビルドをするのは時間がかかってしまいます そのた…

【Unity】Addressables Group BuildPath・LoadPath をスクリプトから変更する

var settings = AddressableAssetSettingsDefaultObject.Settings; var schema = settings.DefaultGroup.GetSchema<BundledAssetGroupSchema>(); // Remote のパスを設定 schema.BuildPath.SetVariableByName(settings, AddressableAssetSettings.kRemoteBuildPath); schema.LoadPath.</bundledassetgroupschema>…

【Unity】Insecure connection not allowed【Error】

Unity 2022以降 Addressable でリモートのバンドルをロードする際にデフォルトの設定だと リモートからカタログやバンドルをロードする際に以下のエラーが発生する Non-secure network connections disabled in Player Settings Insecure connection not all…

【Unity】Addressable の Path を動的に変更する

Addressable の Path には Static なクラスの参照をもたせることができる 例えば以下のクラスのパスで置き換えたい場合は public static class AddressableUtil { public static string LoadPath; } このように記述すればカタログのロード時に置き換えること…

【Unity】Addressable をローカルサーバを立ててそこからロードする

Hosting Window から Hosting するように変更 ブラウザから記述してあるURLにアクセスし、 Console にログが表示されれば起動しています 今回であれば http://192.168.1.8:59595/ が URL になります これを先にしないと以下のように[HostingServicePort]が置…

【Unity】Addressable で指定ディレクトリ以下にあるアセットに自動でAddressを設定する

Addressable Asset Sysytem では Addressable Group の EditorWidow からアドレスを設定する作りとなっており、自動化したい場合は自前でなにかしらの処理を書く必要がある 大体同じ処理を書くと思うので自動的にアドレスを設定する PostProcessor を作成し…

【Unity】Vignette ImageEffect【ShaderGraph】

Unity PostProcessing の Vegnette Shader を参考に ImageEffect で利用できる ShaderGraph を作成しました パラメータは以下になります こちらからDLして利用してください

ポストプロセス処理一覧

ブルーム デプスオブフィールド 色補正 トーンマッピング アンビエント・オクルージョン モーションブラー クロマキー レンズフレア ノイズとグレイン ビネット アンチエイリアシング レンズディストーション フォグ SSR(Screen Space Reflections) SSAO(…

【C#】整数値を特定の方法で変換してアルファベット列として返す処理

private string GetNumberName(int num) { string result = ""; while (num >= 0) { result = (char)(num % 26 + 'A') + result; num = num / 26 - 1; } return result; } // A GetNumberName(0) // Z GetNumberName(25) // AA GetNumberName(26) // MHYV Ge…

【Unity】SceneView をクリックした場所のオブジェクト一覧を取得する

HandleUtility.PickGameObject を利用すれば対象位置のオブジェクトを取得できますが、すべて取得できません そのため、Ignoreに取得したオブジェクトを詰め込むことですべてのオブジェクトを取得することができます using System.Collections.Generic; usin…

【Unity】UnityEditor 上でのみカラーピッカーを表示する

UnityGUIのカラーフィールドを使うと、エディタ上ではカラーピッカーを利用できますが、プレイモード中にはカラーピッカーが使えません。 そのため、エディタ上でテストなどで簡単にカラーピッカーを使いたい場合は、別途カラーピッカーを実装する必要があり…

【Unity】error CS0246: The type or namespace name 'NativeMultiHashMap<,>' could not be found (are you missing a using directive or an assembly reference?)

error CS0246: The type or namespace name 'NativeMultiHashMap<,>' could not be found (are you missing a using directive or an assembly reference?) Unity2021 で Unity.Collections の NativeMultiHashMap を利用している状態で、Unity2022 にアップ…

【Unity】UnityEditor 上で指定した URL から画像を取得して保存する処理

#if UNITY_EDITOR using System.IO; using System.Collections; using Unity.EditorCoroutines.Editor; using UnityEditor; using UnityEngine; using UnityEngine.Networking; public static class DownloadAndSaveImageEditor { // URLから画像をダウンロ…

【Unity】Unity から iOS ビルドをして実機で確認する

環境 Unity 2022.2.15 iOS 16.4.1 Xcode 14.3 Unity から Xcode Project を出力 Unity の Build Target を iOS に変更し、Build Settings よりビルドする ビルドが終わると以下のようなファイル群が出力されるので Unity-iPhone.xcodeproj を実行して Xcode …

【Unity】Light Cookie の Size や Offset をスクリプトから変更する

Light クラスには Cookie のテクスチャ(cookie) や サイズ (cookieSize) はあるが [SerializeField] private Light _Light; Inspector 上に表示されている Cookie Size や Cookie Offset の参照は無く変更することができない なぜならば Size や Offset のパ…

【Unity】Texture2DArray は SRP Batcher が有効なのか

通常 URP Lit を利用した際には SRP Batcher が有効な Shader なので、Frame Debugger で確認したところちゃんと SRP Batcher が有効となっていることが分かる では Texture2DArray を利用した Shader では SRP Batcher が有効なのか確認してみます 追加項目…

【Unity】Texture2DArray の Index はどの値のときにどうなるのか

Texture2DArray のテクスチャには以下のように Index を指定してテクスチャにアクセスするのですが、実際にどの値のときにどのテクスチャを参照するのか見てみます SAMPLE_TEXTURE2D_ARRAY(_BaseMapArray, sampler_BaseMapArray, uv, _Index) 以下のような T…

【Unity】URP12.1.8 のカスタマイズ用 Shader メモ

Shader を作成する際に、URPの中を探してコピーしてくるのが面倒だったので、基本的な Shader だけ抜き出して github にあげておきます 必要な際にご利用ください UnityURPShaderSample/URP12.1.8 at main · yayorozu/UnityURPShaderSample · GitHub

【Unity】Texture2DArray を作成するツール

テスト用の シンプルな Texture2DArray を作成するためのツール using UnityEditor; using UnityEngine; public class CreateTexture2DArrayEditor : EditorWindow { [MenuItem("Tools/CreateTexture2DArray")] private static void ShowWindow() { var wind…

【C#】文字列から一意の数字を生成する

C#

ハッシュを利用することにより、文字列から一意の数字を生成することができます using System.Security.Cryptography; using System.Text; public static class Utility { public static int StringToInt(string input) { using (var sha256 = SHA256.Create…

【Unity】ArgumentOutOfRangeException: Count must be in the range of 0 to 1023.

Note: You can only draw a maximum of 1023 instances at once. ドキュメントにもあるように Graphics.DrawMeshInstanced で一度に生成できるインスタンス数の上限は 1023 となっており、1023を超える数を生成すると以下のエラーが表示される ArgumentOutOf…

【Unity】Graphics.DrawMeshInstanced を利用してみる

Graphics.DrawMeshInstanced は GPU Instancing を利用してメッシュを不要なゲームオブジェクトを作成するオーバーヘッドなしで メッシュを描画することができます 座標と Mesh、Material を指定するだけなのでかなりシンプルに利用することができます using…

【Unity】DrawMeshInstanced does not support the shader 'ShaderName' because it does not read any instanced properties. Try switching to DrawMeshInstancedProcedural if the shader is doing procedural instancing.

Graphics.RenderMeshInstanced を利用していたところ以下のエラーが出て原因を探していたところ DrawMeshInstanced does not support the shader 'ShaderName' because it does not read any instanced properties. Try switching to DrawMeshInstancedProce…

【Unity】Graphics.RenderMeshIndirect を利用してみる

Graphics.RenderMeshIndirect を利用することで、CPUを経由して描画するのではなく、GPUを直接利用して描画することができるため、大量の草などを軽く描画することができます 今回は10個の草を描画してみます 以下がスクリプトで、バッファを複数利用して描…

【C#】配列のIndexを最後から指定したり、範囲を指定して取得する

C#

C#8.0 から Index型とRange型が追加されたようで、以下にあるように範囲指定や、最後からn番目の指定ができるようになりました var array = new []{ 1, 2, 3, 4, 5}; array[1..^1]; // 1番目から最後の1つ手前 (2, 3, 4) array[1..]; // 1番目から最後 (2…

【Unity】GBuffer に書き込む内容を変更する

環境: Unity2021.3.16f1 URP12.0.8 hacchi-man.hatenablog.com こちらはすでにURPのカスタマイズができる状態にしてることを前提に話を進めます Unity の GBuffer の内容は以下のようになっており GBuffer0、ARGB32 フォーマット: ディフューズ色 (RGB)、オ…

【Unity】FullScreenShaderGraph で GBuffer を参照する

環境: Unity2022.2.b16, URP14.0.3 Exposed を false にした _GBuffer0, _GBuffer1, _GBuffer2 を Properties に定義する ことにより ShaderGraph で GBuffer を参照できるようになります Texture を参照する際も SampleTexture2D ノードを利用するだけで問…

【Unity】RendererFeature の Shader で GBuffer を利用する

環境: Unity2021.3.16f1, URP12.1.8 Shader 側で GBuffer + Depth を利用するためには、特にスクリプト側で設定する必要は無く、 _CameraDepthTexture _GBuffer0 _GBuffer1 _GBuffer2 を定義するだけで参照することができる Shader "Hidden/GBufferFullScree…

【Unity】あるオブジェクトを中心に回転させ、処理中に半径を変えられるスクリプト

hacchi-man.hatenablog.com 以前の処理では途中で半径を変えられなかったため、半径を変える処理を追加したものが以下になります using UnityEngine; public class RoundTarget : MonoBehaviour { [SerializeField] private Transform _center; [SerializeFi…

【Unity】JobSystems のエラー箇所を知る

デフォルトの設定では JobSystems 側でエラーログが発生したとしても以下のように細かい情報が表示されない System.IndexOutOfRangeException: Index {0} is out of range of '{1}' Length. This Exception was thrown from a job compiled with Burst, whic…