コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【おすすめスライド】「Refresh what you know about AssetDatabase.Refresh()- Unite Copenhagen 2019」

スライド

【Unity】SpriteAtlas に含まれているすべてのスプライトの情報をエディタ拡張で参照する方法

概要 var roots = new Object[] { spriteAtlas }; var dependencies = EditorUtility.CollectDependencies( roots );

【おすすめスライド】「Speed up your asset imports for big projects - Unite Copenhagen 2019」

スライド

【Unity】MasterMemory を使用しているプロジェクトを Android IL2CPP ビルドした際に MemoryDatabase 生成時に強制終了する場合

解決方法 Project Settings の「Player」を開いて「ARMv7」をオフにしてビルドする

【Unity】Git のブランチ名やコミットハッシュ、コミットログを管理するスクリプトを生成するエディタ拡張「UniGitUtils」を GitHub に公開しました

リポジトリ 使用例 using UniGitUtils; using UnityEditor; using UnityEngine; public static class Example { [MenuItem( "Tools/Log" )] private static void Log() { var option = new CommitLogOption ( count: 10, isNoMerges: false, format: "%h %cd…

【Unity】Odin Inspector 3.0 Beta が公開

概要

【Unity】テクスチャや SpriteAtlas のインポート設定を自動化するエディタ拡張「UniTexturePreprocessor」を GitHub に公開しました

リポジトリ 使い方 Project ビューの「+ > UniTexturePreprocessor」から設定を管理するアセットを作成できます 「TextureImporterSettings」は テクスチャの Import Settings を上書きする設定を管理するアセットです 上書きしたい項目をチェックして、上書…

【Unity】ContentSizeFitter の FitMode をデフォルトで Preferred Size にする Preset

概要 ContentSizeFitter の FitMode を Preferred Size にした状態で プリセットのメニューを開いて 「Save current to...」ボタンを押して適当なフォルダに保存して 保存した Preset を選択して「Add to ContentSizeFitter default」ボタンを押すと Content…

【Unity】フォルダの作成関連のエディタ拡張の機能

概要 using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { // フォルダが存在するかどうか if ( !AssetDatabase.IsValidFolder( "Assets/Hoge" ) ) { // フォルダを作成 AssetDatabase.CreateFolder…

【Unity】AssetDatabase.CreateAsset で時間がかかる時に高速化できるかもしれない「AssetDatabase.StartAssetEditing」

概要 using UnityEditor; using UnityEngine; using Debug = UnityEngine.Debug; public class Example : AssetPostprocessor { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var count = 100; var shader = Shader.Find( "Sprites/Diffuse" );…

【Unity】Unity 起動後にインポートされたアセットの数の取得などができる「AssetDatabaseExperimental」

使用例 using UnityEditor; using UnityEditor.Experimental; using UnityEngine; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var imported = AssetDatabaseExperimental.counters.import.imported; var total…

【Unity】SpriteAtlas と TexturePacker の比較メモ

インポート時間の比較 約1,000個のスプライトを直接 Unity プロジェクトに追加した場合と 事前に TexturePacker でアトラス化して Unity プロジェクトに追加した場合の インポート時間の比較 項目 インポート時間 非アトラス化 75秒 アトラス化 34秒 アトラ…

【Unity】Addressable Asset System でカタログがビルドされている箇所、ランタイムで読み込まれている箇所

リモートカタログがビルドされている箇所 BuildScriptPackedMode.cs CreateRemoteCatalog 関数 WriteFile(remoteJsonBuildPath, jsonText, builderInput.Registry); ローカルカタログがビルドされている箇所 BuildScriptPackedMode.cs CreateCatalogFiles 関…

【Unity】Addressable Asset System で BuildScriptBase を継承したインスタンスを Addressable Groups の Build メニューに追加する方法

概要 BuildScriptBase.CanBuildData 関数をオーバーライドして true を返す Addressable Groups の Build メニューは下記のように生成されている AddressableAssetsSettingsGroupEditor.cs 181行目辺り var menu = new GenericMenu(); for (int i = 0; i < s…

【Unity】Addressable Asset System ですべてのラベルを取得する方法

概要 using UnityEditor; using UnityEditor.AddressableAssets; using UnityEngine; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var settings = AddressableAssetSettingsDefaultObject.Settings; var labels…

【Unity】Menu XXXX can't be checked because it doesn't exist

概要 using UnityEditor; [InitializeOnLoad] public static class Example { private const string ITEM_NAME = "Tools/Hoge"; static Example() { Menu.SetChecked( ITEM_NAME, true ); } [MenuItem( ITEM_NAME )] private static void Hoge() { } } Initi…

【Unity】Cache Server にすべてのアセットをアップロードするメニュー

概要 Unity メニューの「Assets > Cache Server > Upload All Assets」を押して 表示されたウィンドウで Cache Server の IP アドレスを入力して「Upload」を押す

【Unity】Addressable Asset System で差分ビルドが必要なエントリを取得する方法

概要 using UnityEditor; using UnityEditor.AddressableAssets; using UnityEditor.AddressableAssets.Build; using UnityEngine; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var settings = AddressableAsse…

【Unity】Addressable Asset System で Unity を再生した時やアセットバンドルをビルドした時に呼び出されるコールバック

概要 using UnityEditor; using UnityEditor.AddressableAssets.Build; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { BuildScript.buildCompleted += OnBuildCompleted; } private static void OnBuildComplete…

【Unity】Package Manager でビルトインパッケージを無効化する方法

概要 Package Manager のプルダウンメニューから「Built-in packages」を選択すると Unity プロジェクトで有効になっているビルトインパッケージが閲覧でき、 それぞれのパッケージの有効化・無効化もできる (manifest.json の mudules 系の行を削除するこ…

【Unity】Addressable Asset System が依存している Unity Package

概要 com.unity.scriptablebuildpipeline com.unity.test-framework

【Unity】Unity プロジェクトに独自のデータを保存できる「EditorUserSettings.SetConfigValue」

概要 using System; using UnityEditor; using UnityEngine; [Serializable] public sealed class Data { public int Id; public string Name; } public sealed class Example : EditorWindow { [MenuItem( "Tools/Open" )] private static void Open() { Ge…

【Unity】エディタが起動している間データを保持できる「ScriptableSingleton」

概要 using UnityEditor; public sealed class Data : ScriptableSingleton<Data> { public int Id; public string Name; } public sealed class Example : EditorWindow { [MenuItem( "Tools/Open" )] private static void Open() { GetWindow<Example>(); } private void </example></data>…

【Unity】スプライトをアトラス化する前とした後の Build Report の差

はじめに Unity プロジェクトに 382.7 KB のスプライトを5つ追加して SpriteAtlas でパッキングしなかった場合とした場合で Build Report にどのように差が出るか アトラス化前 Textures 1.5 mb 9.1% 384.4 kb 0.8% Assets/Sprites/f005.png 384.4 kb 0.8% A…

【Unity】親オブジェクトが子オブジェクトをすべて内包するように親オブジェクトの位置とサイズを調整するエディタ拡張「UniParentRectTransformFitter」を GitHub に公開しました

リポジトリ 使い方 Inspector で RectTransform の項目を右クリックして「Fit Children」を選択します Undo に対応しています 孫オブジェクトに対応しています Scale に対応しています

【Unity】External Tools の Android の項目の取得または設定ができるパッケージ「UniAndroidExternalTools」を GitHub に公開しました

リポジトリ 使用例 using UniAndroidExternalTools; using UnityEditor; using UnityEngine; public static class Example { [MenuItem( "Tools/Log" )] private static void Log() { // JDK Installed with Unity (recommended) Debug.Log( "JdkInstalledWi…

【Unity】SpriteAtlas.GetSprite したスプライトをキャッシュするクラス「UniSpriteAtlasCacher」を GitHub に公開しました

リポジトリ 使用例 using UniSpriteAtlasCacher; using UnityEngine; public class Example : MonoBehaviour { public SpriteAtlasCacher m_cacher; private void Start() { // 指定されたスプライトを SpriteAtlas.GetSprite して内部でキャッシュする var …

【Unity】コマンドライン引数を解析して指定されたクラスのインスタンスに変換するパッケージ「UniCommandLineParser」を GitHub に公開しました

リポジトリ 使用例 Unity.exe ^ -batchMode ^ -quit ^ -executeMethod Example.Run ^ -myOptionInt 25 ^ -myOptionFloat 2.5 ^ -myOptionString "ピカチュウ" ^ -myOptionBool using System; using UniCommandLineParser; using UnityEngine; public static …

【Unity】SpriteAtlas にテクスチャを含める時は元のテクスチャの圧縮設定が反映された状態でテクスチャアトラスに描き込まれる

概要 例えば上記のようなグラデーションのテクスチャを Unity プロジェクトに2つ追加して 1つは RGBA 32 bit、 もう1つは RGB 16 bit の圧縮設定を適用すると ゲーム中に描画する時に、圧縮設定が反映されていることが確認できる (左が RGBA 32 bit、右が R…

【Unity】Unity エディタのタイトルを変更できるエディタ拡張「UniEditorWindowTitleChanger」を GitHub に公開しました

リポジトリ 使用例 using UniEditorWindowTitleChanger; using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { EditorWindowTitleChanger.SetTitle( "ピカチュウ" ); } } 謝辞 このリポジトリは下記…