コガネブログ

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

【Unity】Cannot load scene: Invalid scene name (empty string) and invalid build index -1

概要 Unity 2019.3 で Enter Play Mode を有効にしているプロジェクトで SceneManager.LoadScene( SceneManager.GetActiveScene().buildIndex ); 上記のように現在のシーンを再読み込みしようとしたところ Cannot load scene: Invalid scene name (empty str…

【Unity】参照型のパラメータを右クリックした時のメニューに GetComponent を追加するエディタ拡張「UniGetComponentContextualPropertyMenu」を GitHub に公開しました

リポジトリ 使用例 using UnityEngine; public class Test : MonoBehaviour { public BoxCollider bocCollider; public BoxCollider[] boxColliders; }

【Unity】シリアライズ対象の変数に自動で参照を割り当てるエディタ拡張「UniGetComponentAttribute」を GitHub に公開しました

リポジトリ 使用例 using UniGetComponentAttribute; using UnityEngine; public class Test : MonoBehaviour { [GetComponent] public BoxCollider m_boxCollider; [GetComponentInParent] public BoxCollider m_boxColliderInParent; [GetComponentInParen…

【Unity】"clang++"は、開発元を検証できないため開けません

検証環境 Unity 2018.4.20f1 macOS Catalina 10.15.4 現象 "clang++"は、開発元を検証できないため開けません Mac で Unity を使用して Android の IL2CPP ビルドを実行した際に 上記の警告ダイアログが出てビルドができない現象に遭遇した Mac のシステム環…

【Unity】ゲームオブジェクトの複製時に名前の末尾に数値を付けないようにするエディタ拡張「UniGameObjectDuplicationHooker」を GitHub に公開しました

リポジトリ 標準の Duplicate コマンド(Ctrl + D)の挙動を上書きします 複数のゲームオブジェクトの複製に対応しています Undo に対応しています プレハブのインスタンスの複製に対応しています 複製時に transform のプロパティに誤差が生じないようにし…

【Unity】string.Format を ZString.Format に置換する ReSharper の Quick-Fixes を作成する

概要 ReSharper と ZString を導入しているプロジェクトで ZString.Format ではなく string.Format を使用している箇所があれば 警告線を表示する Quick-Fixes で ZString.Format に置換できるようにする ということを行いたい場合は、 ReSharper のオプショ…

【Unity】Curl error 51: Cert verify failed: UNITYTLS_X509VERIFY_FLAG_EXPIRED

概要 Curl error 51: Cert verify failed: UNITYTLS_X509VERIFY_FLAG_EXPIRED Unity エディタに上記のエラーログが出るようになった Unity のサーバがダウンしていると発生するらしい https://answers.unity.com/questions/1728035/curl-error-51-cert-verif…

【Unity】RectTransform をコピーしたゲームオブジェクトを作成する関数

概要 private static RectTransform CreateCopiedRectTransformObject( RectTransform original ) { var go = new GameObject(); var t = go.AddComponent<RectTransform>(); t.SetParent( original.parent ); t.localPosition = Vector3.zero; t.localRotation = Quaternio</recttransform>…

【Unity】RectTransform の端の位置を返す拡張メソッド

概要 using UnityEngine; /// <summary> /// RectTransform 型の拡張メソッドを管理するクラス /// </summary> internal static class RectTransformExt { /// <summary> /// 左端の位置を返します /// </summary> public static float GetAnchoredPositionLeft( this RectTransform self ) { retur…

【Unity】Git LFS に対応した Unity プロジェクトを Clone したらポインタファイルが落ちてきた時のメモ

概要 Git LFS に対応した Unity プロジェクトを Clone したらポインタファイルが落ちてきて 正常に Unity プロジェクトを開くことができなかった Windows に Git LFS はインストールされていた コマンドプロンプトから git clone してもダメだった Git クラ…

【Unity】アセットを Inspector にドラッグ&ドロップできるようにするエディタ拡張の例

ソースコード /// <summary> /// 指定された矩形にドラッグ & ドロップされたアセットのパスを返します /// </summary> public bool GetDragAndDropAssetPath( Rect rect, out string assetPath ) { var current = Event.current; var controlId = GUIUtility.GetControlID( Foc…

【Unity】Maya から読み込んだ .fbx の回転のアニメーションカーブにギャップが生じる時の対処方法

概要 Maya で回転のアニメーションを作成して .fbx としてエクスポートして Unity プロジェクトにインポートした時に アニメーションカーブにギャップが生じてしまう場合は .fbx の Import Settings で「Resample Curves」をオフにして「Apply」すると 直る

【Unity】Unity 公式のパッケージのフォルダ構成

概要 上記のページに記載されている

【Unity】高速な xcodebuild

概要 # 通常の xcodebuild xcodebuild \ -project $PROJECT_PATH \ -scheme $SCHEME \ archive -archivePath $ARCHIVE_PATH \ PROVISIONING_PROFILE=$PROVISIONING_PROFILE # 高速な xcodebuild xcodebuild \ -project $PROJECT_PATH \ -scheme $SCHEME \ ar…

【Unity】Enter Play Mode Options をエディタ拡張のスクリプトから変更する方法

概要 using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { EditorSettings.enterPlayModeOptionsEnabled = !EditorSettings.enterPlayModeOptionsEnabled; } }

【Unity】Player Settings をエディタ拡張から開く方法

概要 using UnityEditor; public static class Example { [MenuItem( "Tools/Audio" )] private static void OpenAudio() { SettingsService.OpenProjectSettings( "Project/Audio" ); } [MenuItem( "Tools/Editor" )] private static void OpenEditor() { S…

【Unity】Preferences をエディタ拡張から開く方法

概要 using UnityEditor; public static class Example { [MenuItem( "Tools/2DAnimation" )] private static void Open2DAnimation() { SettingsService.OpenUserPreferences( "Preferences/2D/Animation" ); } [MenuItem( "Tools/AnalysisProfiler" )] pri…

【Unity】プレハブモードかどうかをエディタ拡張で確認する方法

概要 using UnityEditor; using UnityEditor.Experimental.SceneManagement; using UnityEngine; public static class Example { [MenuItem( "Tools/Hoge" )] public static void Hoge() { var isPrefabMode = PrefabStageUtility.GetCurrentPrefabStage() !…

【Unity】MasterMemory の基本的な使い方

はじめに この記事では MasterMemory の基本的な使い方を紹介していきます 目次 はじめに 目次 検証環境 必要なファイルの入手 .unitypackage のインポート マスタを管理するクラスの準備 MasterMemory のジェネレータを実行 MessagePack のジェネレータを実…

【Unity】Exception: Calling TargetGuidByName with name='Unity-iPhone' is deprecated

概要 using UnityEditor; using UnityEditor.iOS.Xcode; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var path = "iOS"; var projectPath = PBXProject.GetPBXProjectPath( path ); var project = new PBXProje…

【Unity】Component GUI Layer in Main Camera for Scene XXXX.unity is no longer available.

概要 Component GUI Layer in Main Camera for Scene XXXX.unity is no longer available. It will be removed after you edit this GameObject and save the Scene. アプリビルド時などに上記のエラーが出力される場合は カメラにアタッチされている「Flare…

【Unity】Mac で Unity プロジェクトを開いた時や Switch Platform した時に Mac が強制終了してしまう時の対応方法

概要 Mac で Unity プロジェクトを開いた時や Switch Platform した時に Mac が強制終了する現象に遭遇した Editor: Metal support disabled, skipping device initialization Unity の Console ウィンドウを見てみると上記のようなメッセージが表示されてい…

【Unity】EditorPrefs で保存されているすべてのキーと値を取得するエディタ拡張

ソースコード using Microsoft.Win32; using System; using System.Collections.Generic; using System.Linq; using System.Text; using UnityEditor; using UnityEngine; public static class Example { [MenuItem( "Tool/Log" )] private static void Log(…

【Unity】Addressable Asset System における .gitignore の設定

概要 https://github.com/github/gitignore/blob/master/Unity.gitignore 上記の公式の .gitignore に記載されている # Packed Addressables /[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin* # Temporary auto-generated Android Assets /[Aa]ssets/[Ss…

【Unity】Inspector のヘッダ部分に Lock・Debug ボタンを追加するエディタ拡張

ソースコード using System.Reflection; using UnityEditor; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { Editor.finishedDefaultHeaderGUI += OnGUI; } private static void OnGUI( Editor editor ) { Editor…

【Unity】Android のパッチビルドでビルド時間を削減する

概要 アセットファイルは変更せず、スクリプトのみ変更した場合は Build Settings の「Development Build」と「Scripts Only Build」をオンにして 「Patch」もしくは「Patch And Run」を選択することでビルド時間を削減できます 検証結果 適当な Unity プロ…

【Unity】UniTask で処理の開始時と終了時にログを出力できるようにする拡張メソッド

ソースコード 使用例 using UniRx.Async; using UnityEngine; public sealed class Example : MonoBehaviour { private async void Start() { #if ENABLE_RELEASE #else UniTaskExt.OnStartLog += message => Debug.Log( $"{message} 開始" ); UniTaskExt.On…

【Unity】ウィンドウのタイトルや Build Settings の Platform の欄に表示されるプラットフォーム名をエディタ拡張で取得する方法

概要 using System.Reflection; using UnityEditor; using UnityEngine; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { const string name = "GetBuildTargetGroupDisplayName"; const BindingFlags attr = Bindi…

【Unity】Inspector のヘッダ部分にアセットをエクスプローラで開くボタンを追加するエディタ拡張

ソースコード 使用例

【C#】.unitypackage から GUID のリストを取得する方法

概要 「SharpCompress」を使用して using SharpCompress.Readers; using System; using System.IO; public static class Program { private static void Main() { var path = "【.unitypackage のパス】"; using ( var stream = File.OpenRead( path ) ) { v…