コガネブログ

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

2020-10-01から1ヶ月間の記事一覧

【Unity】iOS / Android でローカル通知を実装できる「UniLocalNotification」紹介

はじめに 「UniLocalNotification」を Uniy プロジェクトに導入することで iOS / Android でローカル通知を実装できるようになります 検証環境 Unity 2019.3.10f1 iOS 13.3.1 Android 8.0.0 使用例 iOS Android 使い方 UniLocalNotification.Initialize(); …

【Unity】乱数に関する汎用的な関数を管理するクラス「UniRandomUtils」を GitHub に公開しました

リポジトリ 使用例 using UniRandomUtils; using UnityEngine; public sealed class Example : MonoBehaviour { private void Start() { // 半径 1 の円の内部のランダムな点 Debug.Log( RandomUtils.InsideUnitCircle ); // 半径 1 の球体の内部のランダム…

【Unity】Inspector で AnimationCurve をコピー・ペーストできるようにするエディタ拡張「UniAnimationCurveCopyPasteDrawer」を GitHub に公開しました

リポジトリ 使用例 using UnityEngine; public class Test : MonoBehaviour { public AnimationCurve m_animationCurve1; public AnimationCurve m_animationCurve2; }

【Unity】Inspector で参照が設定されていない NotNull なパラメータが存在したら Unity を再生できなくするエディタ拡張「UniNotNullChecker」を GitHub に公開しました

リポジトリ 使用例 using JetBrains.Annotations; using UnityEngine; public class Test : MonoBehaviour { [NotNull] public GameObject m_gameObject; [NotNull] public Transform m_transform; } 設定 Preferences から設定を変更できます 項目 内容 Ena…

【Unity】Missing Script が存在したら Unity を再生できなくするエディタ拡張「UniMissingScriptChecker」を GitHub に公開しました

リポジトリ 使用例 設定 Preferences から設定を変更できます 項目 内容 Enabled 有効かどうか(デフォルトは OFF) Log Format エラーログのフォーマット

【Unity】Android でもソフトウェアキーボードの表示領域を取得できるパッケージ「UniSoftwareKeyboardArea」を GitHub に公開しました

リポジトリ 使用例 using UniSoftwareKeyboardArea; using UnityEngine; using UnityEngine.UI; public class Test : MonoBehaviour { public CanvasScaler m_canvasScaler; public RectTransform m_rectTransform; private void Update() { var rate = m_ca…

【Unity】スプライトの Border をコンテキストメニューから設定できるエディタ拡張「UniSpriteBorderSetupper」を GitHub に公開しました

リポジトリ 使い方 Border を設定したいスプライトを右クリックして「UniSpriteBorderSetupper > 選択中のスプライトの Border を自動で設定」を選択すると 指定したスプライトの Border が自動で設定されます 複数のスプライトを選択してコマンドを実行する…

【Unity】Transform プロパティをキャッシュする MonoBehaviour「UniCacheableMonoBehaviour」を GitHub に公開しました

リポジトリ 使用例 using UnityEngine; public class Example : CacheableMonoBehaviour { private void Start() { var vec = Vector3.zero; var x = 0f; var y = 0f; var z = 0f; // transform.position を操作 vec = position; x = position.x; y = positi…

【Unity】タグ付きのデバッグログなどを使用できるパッケージ「UniDebugLogger」を GitHub に公開しました

リポジトリ 使用例 using UniDebugLogger; using UnityEngine; public class Example : MonoBehaviour { private void Awake() { IDebugLogger logger; logger = DefaultDebugLogger.Instance; logger.Log( "Log" ); logger.Log( "Log", gameObject ); logge…

【Unity】EditorPrefs が保存しているすべてのキーと値を閲覧できるエディタ拡張「UniEditorPrefsWindow」を GitHub に公開しました

リポジトリ 使い方 Unity メニューの「Window > UniEditorPrefsWindow」を押すと EditorPrefs が保存しているすべてのキーと値を閲覧できます

【Unity】Unity 再生時の開始シーンを設定できるエディタ拡張「UniPlayModeStartSceneSettingWindow」を GitHub に公開しました

リポジトリ 使い方 Unity メニューの「Window > UniPlayModeStartSceneSettingWindow」を選択して 表示されたウィンドウの「Start Scene」にシーンファイルを設定すると Unity 再生時に必ずそのシーンから開始するようになります 「Set Current Scene」ボタ…

【Unity】Debug.Log でスタックトレースを非表示にした時の GC Alloc と処理時間の検証

はじめに Unity では Debug.Log する時にスタックトレースの情報も出力するかどうか設定できる エディタの Project Settings > Player > Other Settings から設定可能 エディタ拡張のスクリプトから PlayerSettings.SetStackTraceLogType で設定可能 ランタ…

【Unity】Debug.Log のスタックトレースの ON / OFF を using ステートメントで指定できるようにするクラス

ソースコード 使用例 特定の種類のログだけスタックトレースの ON / OFF を切り替え using Kogane; using UnityEngine; public class Example : MonoBehaviour { private void Awake() { // 通常のログはスタックトレースなし using ( new SetStackTraceLogT…

【Unity】ランタイムで Debug.Log のスタックトレースの出力の ON / OFF を切り替える方法

概要 using UnityEngine; public class Example : MonoBehaviour { private void Awake() { // スタックトレースあり Application.SetStackTraceLogType( LogType.Log, StackTraceLogType.ScriptOnly ); // スタックトレースなし Application.SetStackTraceL…

【Unity】Unity で Immutable Collections を使用できるようにする「Unity3D Immutable Collections」紹介

はじめに 「Unity3D Immutable Collections」を Unity プロジェクトに導入することで Unity で Immutable Collections を使用できるようになります 使用例 using Izzo.Collections.Immutable; using UnityEngine; public sealed class Example : MonoBehavio…

【Unity】ゲームオブジェクトを Scene ビューに表示するかどうかを変更できる「SceneVisibilityManager」

概要 using UnityEditor; using UnityEngine; using UnityEngine.SceneManagement; public static class Example { // すべてのゲームオブジェクトを Scene ビューで非表示にします [MenuItem( "SceneVisibilityManager/HideAll" )] private static void Hid…

【Unity】スクリプトのパラメータを Animation で変更できないようにする「NotKeyableAttribute」

概要 using UnityEngine; using UnityEngine.Animations; public sealed class Example : MonoBehaviour { public int m_param1; [NotKeyable] public int m_param2; public int m_param3; } NotKeyableAttribute をスクリプトのパラメータに適用すると Anim…

【Unity】別々の Animator で StateMachineBehaviour のインスタンスを共有できる「SharedBetweenAnimatorsAttribute」

概要 using UnityEngine; [SharedBetweenAnimators] public sealed class Example : StateMachineBehaviour { private int m_counter; // static ではない public override void OnStateEnter ( Animator animator, AnimatorStateInfo stateInfo, int layerI…

【Unity】エディタ拡張でファイル名に使えない文字を除外したパスを取得する方法

概要 using UnityEditor; using UnityEditorInternal; using UnityEngine; public class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var invalidPath = @"\ピ/カ:チ*ュ?ウ"".<t>x|t"; var path = InternalEditorUtility.RemoveInvalid</t>…

【Unity】エディタ拡張で Player.log を開く方法

概要 using UnityEditor; using UnityEditorInternal; public class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { InternalEditorUtility.OpenPlayerConsole(); } }

【Unity】エディタ拡張で Editor.log を開く方法

概要 using UnityEditor; using UnityEditorInternal; public class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { InternalEditorUtility.OpenEditorConsole(); } }

【Unity】エディタ拡張で行番号と列番号を指定して C# スクリプトを開く方法

概要 using UnityEditor; using UnityEditorInternal; public class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { InternalEditorUtility.OpenFileAtLineExternal ( filename: "Assets/XXXX.cs", line: 0, // 行番号 column: 0 // 列…

【Unity】エディタ拡張で Unity エディタがアクティブかどうかを確認する方法

概要 using UnityEditor; using UnityEngine; public class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { Debug.Log( UnityEditorInternal.InternalEditorUtility.isApplicationActive ); } }

【Unity】エディタ拡張でショートカットキーから関数を呼び出せるようにする「ClutchShortcutAttribute」

概要 using UnityEditor.ShortcutManagement; using UnityEngine; public static class Example { // F1 で呼び出されるようにする [ClutchShortcut( "Kogane/Hoge1", KeyCode.F1 )] private static void Hoge1() { Debug.Log( "ピカチュウ" ); } // Alt + F…

【Unity】RectTransform の「Some values driven by XXXX」の状態を取得する方法

概要 using System.Reflection; using UnityEditor; using UnityEngine; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var rectTransform = ( RectTransform ) Selection.activeTransform; var type = typeof( R…

【Unity】エディタ拡張で Preloaded Assets に Missing が存在しないかどうか確認する方法

概要 using System.Linq; using UnityEditor; using UnityEngine; public class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var hasMissing = PlayerSettings .GetPreloadedAssets() .Any( x => x == null ) ; Debug.Log( hasMissi…

【Unity】StreamingAssets と Android の App Bundle に関する不具合メモ

概要 問題を回避するためには StreamingAssets 内のファイルの名前を すべて小文字にする必要があるらしい Unity 2020.1 以降は Gradle 3.6 が使用されており、この問題が発生しない?

【Unity】Progress が実行中なら Unity を再生できなくするエディタ拡張

概要 using UnityEditor; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { EditorApplication.playModeStateChanged += OnChanged; } private static void OnChanged( PlayModeStateChange change ) { if ( !Progr…

【Unity】エディタ拡張でショートカットキーから関数を呼び出せるようにする「ShortcutAttribute」

概要 using UnityEditor.ShortcutManagement; using UnityEngine; public static class Example { // F1 で呼び出せるようにする [Shortcut( "Kogane/Hoge1", KeyCode.F1 )] private static void Hoge1() { Debug.Log( "ピカチュウ" ); } // Alt + F1 で呼び…

【Unity】エディタ拡張で UnityEngine.Object を YAML 形式で保存・読み込みする方法

概要 using System.Linq; using UnityEditor; using UnityEditorInternal; using UnityEngine; public class Example : ScriptableObject { public int m_id = 25; public string m_name = "ピカチュウ"; [MenuItem( "Tools/Save" )] private static void Sa…