コガネブログ

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

【Unity】UniTask.WhenAll・WhenAny を拡張メソッドで呼び出せるようにするパッケージ

リポジトリ 使用例 Before using System; using System.Collections.Generic; using Cysharp.Threading.Tasks; using UnityEngine; public class Example : MonoBehaviour { private async UniTaskVoid Start() { var list = new List<UniTask>(); for ( var i = 0; i </unitask>…

【Unity】AttachExternalCancellation の引数に GameObject や Component を渡せるようにする拡張メソッド

リポジトリ 使用例 using Cysharp.Threading.Tasks; using Kogane; using UnityEngine; public sealed class Example : MonoBehaviour { private async UniTaskVoid Star() { UniTask Impl1() => UniTask.CompletedTask; UniTask<bool> Impl2() => UniTask.FromRes</bool>…

【Unity】GvhProjectSettings.xml が勝手に変更される現象を防ぐエディタ拡張

リポジトリ 使用例 ProjectSettings フォルダに 「GvhProjectSettings.xml.source」というファイルを格納することで コンパイル開始時や Unity エディタがフォーカスされた時に 「GvhProjectSettings.xml.source」を「GvhProjectSettings.xml」に上書きコピ…

【Unity】インターネットに接続しているか確認できるクラス

リポジトリ 使用例 using Cysharp.Threading.Tasks; using Kogane; using UnityEngine; public sealed class Example : MonoBehaviour { private readonly InternetCheckerInstance m_instance = new ( "8.8.8.8", // Google Public DNS "8.8.4.4", // Googl…

【Unity】UnityEngine.Ping を非同期処理で呼び出せるようにするクラス

リポジトリ 使用例 using Cysharp.Threading.Tasks; using Kogane; public static class InternetChecker { private static readonly string[] ADDRESSES = { "8.8.8.8", // Google Public DNS "8.8.4.4", // Google Public DNS "4.2.2.2", // Level 3 Commu…

【Unity】シーンの Dirty フラグが立った原因を調査できるエディタ拡張

リポジトリ 使用例 Project Settings で「Is Enable」をオンにすると シーンの Dirty フラグが立った原因が Console ウィンドウに出力されるようになります

【Unity】AudioClip の無音区間を削除できるエディタ拡張

リポジトリ 準備 本パッケージを使用するためには Python のインストールと 以下の Python パッケージのインストールが必要です pip install librosa pip install soundfile 使用例 using Kogane; using UnityEditor; public static class Example { [MenuIt…

【Unity】EventSystem.current.IsPointerOverGameObject が検出したゲームオブジェクトを取得できる StandaloneInputModule

リポジトリ 使用例 using Kogane; using UnityEngine; using UnityEngine.EventSystems; public class Example : MonoBehaviour { [SerializeField] private CustomStandaloneInputModule m_module; private void Update() { if ( EventSystem.current.IsPoi…

【Unity】ANDROID_HOME を環境変数に設定するクラス

リポジトリ 使用例 using System; using Kogane; using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] public static void Hoge() { SetAndroidHomeToEnvironmentVariable.Set( EnvironmentVariableTarget.Process ); } }

【Unity】アプリケーションを再起動できるパッケージ

リポジトリ 使用例 using Kogane; using UnityEngine; public sealed class Example : MonoBehaviour { private void Start() { ApplicationRestarter.Restart(); } } 対応しているプラットフォーム Unity Editor Android

【Unity】PointerEventData 型の拡張メソッド

リポジトリ 使用例 using Kogane; using UnityEngine; using UnityEngine.EventSystems; public sealed class Example : MonoBehaviour, IPointerClickHandler { void IPointerClickHandler.OnPointerClick( PointerEventData eventData ) { // シングルタッ…

【Unity】Unity 製の iOS アプリで SFSafariView を使用できるようにするパッケージ

リポジトリ 使用例 #if UNITY_IOS using Kogane; using UnityEngine; public sealed class Example : MonoBehaviour { private void Start() { SFSafariView.OpenURL( "https://www.google.co.jp/" ); } } #endif #if UNITY_IOS using Cysharp.Threading.Tas…

【Unity】iOS ビルド完了時に Xcode プロジェクトのプッシュ通知を有効化するエディタ拡張

リポジトリ 使用例 using Kogane; using UnityEditor; [InitializeOnLoad] public static class Example { static Example() { // 開発ビルドかリリースビルドか設定します SetXcodePushNotificationOnPostProcessBuild.OnIsProduction = () => false; } }

【Unity】文字列の配列やリストから最も類似している文字列を検索できる拡張子メソッド

リポジトリ 使用例 using Kogane; using UnityEngine; public sealed class Example : MonoBehaviour { private void Start() { var texts = new[] { "Awake", "Start", "Update", "FixedUpdate", "LateUpdate", }; // Update Debug.Log( texts.GetMostSimil…

【Unity】アプリケーションがバックグラウンドに移動したか、バックグラウンドから復帰したかを検知できるクラス

リポジトリ 使用例 ApplicationBackgroundChecker.OnChanged = isBackground => Debug.Log( isBackground );

【Unity】データを保存できるディレクトリのパスを管理するクラス

リポジトリ 使用例 using Kogane; using System.IO; using UnityEngine; public class Example : MonoBehaviour { private string m_text = string.Empty; private void OnGUI() { GUILayout.Label( ApplicationPath.PersistentDataPath ); GUILayout.Label(…

【Unity】アプリケーションを実行している Android 端末の API Level を取得できるパッケージ

リポジトリ 使用例 // アプリケーションを実行している Android 端末の API Level Debug.Log( AndroidApiLevel.Value ); // アプリケーションを実行している Android 端末のバージョンが 13 以上なら true Debug.Log( AndroidApiLevel.IsAndroidVersion13OrH…

【Unity】TextMesh Pro のトグルの Editor GUI を使えるようにするクラス

リポジトリ 使用例 using System; using UnityEngine; [Flags] public enum Attribute { FIRE = 1 << 1, AQUA = 1 << 2, GRASS = 1 << 3, } public sealed class Example : MonoBehaviour { [SerializeField] private Attribute m_attribute; } using Kogane…

【Unity】Android で通知許可ダイアログを表示するクラス

リポジトリ 使用例 using Cysharp.Threading.Tasks; using Kogane; using UnityEngine; public sealed class Example : MonoBehaviour { private async UniTaskVoid Start() { var result = await NotificationPermissionRequest.RequestAsync( this ); Debu…

【Unity】iOS / Android でストアページを開く構造体

リポジトリ 使用例 using Kogane; using UnityEngine; public sealed class Example : MonoBehaviour { // Pokémon GO のストアページを開く private readonly OpenStorePage m_openStorePage = new ( iosId: "1094591345", androidId: "com.nianticlabs.pok…

【Unity】Play Asset Delivery を使用している Android App Bundle を Android 端末にインストールできるクラス

リポジトリ 使用例 using Kogane; using UnityEditor; using UnityEngine; public static class Example { [MenuItem( "Tools/Hoge" )] public static void Hoge() { var data = new InstallPlayAssetDeliveryAndroidAppBundleData ( androidAppBundlePath: …

【Unity】Project ウィンドウに拡張子を表示するエディタ拡張

リポジトリ 使用例

【Unity】マルチタッチの判定を無効化した Scroll Rect

リポジトリ 使用例 ScrollRect の代わりに SingleTouchScrollRect を使用します

【Unity】iOS / Android でストアのレビュー依頼を表示できるパッケージ

リポジトリ 使用例 using Cysharp.Threading.Tasks; using Kogane; using UnityEngine; public sealed class Example : MonoBehaviour { private async UniTaskVoid Start() { var result = await StoreReview.RequestReviewAsync(); Debug.Log( result ); }…

【Unity】再生中の AudioClip を停止できるコンポーネント

リポジトリ 使用例 using Kogane; using UnityEngine; public sealed class Example : MonoBehaviour { [SerializeField] private StoppableAudioPlayer m_player; [SerializeField] private AudioClip m_audioClip; private void Start() { // 再生します v…

【Unity】AudioClip のイントロ付きループ再生ができるコンポーネント

リポジトリ 使用例 using Kogane; using UnityEngine; public sealed class Example : MonoBehaviour { [SerializeField] private IntroAudioPlayer m_player; [SerializeField] private AudioClip m_introAudioClip; [SerializeField] private AudioClip m_…

【Unity】ビルド時に BuildPlayerOptions の情報を Resources フォルダのテキストファイルに書き込むエディタ拡張

リポジトリ 使用例 using System.Linq; using Kogane; using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] public static void Hoge() { const bool isReleaseBuild = false; var options = new BuildPlayerOptions { scenes = E…

【Unity】ツールバーに Reload Assemblies をロックするかどうかを変更するボタンを追加するエディタ拡張

リポジトリ 使用例

【Unity】Device Simulator の internal な機能にアクセスできるパッケージ

リポジトリ 使用例 using Kogane; using UnityEditor; using UnityEngine; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { // Device Simulator で選択されているデバイスの名前を取得します Debug.Log( DeviceSim…

【Unity】GetComponentInChildren や GetComponentsInChildren で引数の型情報を文字列で渡せるようにする拡張メソッド

リポジトリ 使用例 using Kogane; using UnityEngine; public class Example : MonoBehaviour { private void Start() { var transform = gameObject.GetComponentInChildren( "Transform" ); var transforms = gameObject.GetComponentsInChildren( "Transf…