コガネブログ

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

【Unity】Failed to gain exclusive lock to the Cloud Firestore client's offline persistence.

概要 java.lang.RuntimeException: Internal error in Cloud Firestore (X.X.X) java.lang.RuntimeException: Failed to gain exclusive lock to the Cloud Firestore client's offline persistence. This generally means you are using Cloud Firestore fr…

【Unity】android.os.Build の情報を取得する例

概要 using var androidJavaClass = new AndroidJavaClass( "android.os.Build" ); return $@"BOARD: {androidJavaClass.GetStatic<string>( "BOARD" )} BOOTLOADER: {androidJavaClass.GetStatic<string>( "BOOTLOADER" )} BRAND: {androidJavaClass.GetStatic<string>( "BRAND" )} </string></string></string>…

【Unity】SpriteRenderer の Sprite が Missing なプレハブをすべて見つけるエディタ拡張

ソースコード using System.Linq; using System.Text; using UnityEditor; using UnityEngine; internal sealed class MissingSpriteFinder : EditorWindow { [MenuItem( "Window/Missing Sprite Finder" )] private static void Open() { GetWindow<MissingSpriteFinder>(); } pr</missingspritefinder>…

【Unity】SpriteRenderer で Radial な Fill Amount を設定できる「Radial fill shader」

リポジトリ

【Unity】Jenkins からビルドする時に「Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.」

概要 ##### ExitCode 134 ##### Output Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object. at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.ExecutionCont…

【Unity】TextMesh Pro の Font Asset を作成する時に "ArgumentNullException: Value cannot be null."

概要 ArgumentNullException: Value cannot be null. TextMesh Pro の Font Asset を作成する時に上記の例外が発生して Font Asset が正常に作成できない現象に遭遇した Unity メニューの「Window > TextMeshPro > Import TMP Essential Resources」を 実行…

【Unity】TextMesh Pro の Glyph の BY をスクリプトから編集する例

概要 using System; using System.Text; using TMPro; using UnityEditor; internal static class Example { [MenuItem( "hoge/hoge" )] private static void Hoge() { const string path = "hoge.asset"; const string text = "あ"; var bytes = Encoding.U…

【Unity】Android のアプリを起動する MenuItem の例

ソースコード [MenuItem( MENU_ITEM_ROOT + "/アプリ起動" )] private static void LaunchApp() { var adbPath = $"{AndroidExternalToolsSettings.sdkRootPath}/platform-tools/adb"; var packageName = "com.hoge.fuga"; var activityName = "com.google.f…

【Unity】.apk を Android 端末にインストールする MenuItem の例

ソースコード [MenuItem( "Tools/.apk インストール" )] private static void InstallApk() { var adbPath = $"{AndroidExternalToolsSettings.sdkRootPath}/platform-tools/adb"; var apkPath = "hoge.apk"; var startInfo = new ProcessStartInfo { FileNa…

【Unity】エディタ拡張で Python を実行する例

ソースコード using System.Diagnostics; using UnityEditor; using Debug = UnityEngine.Debug; public class Example { [MenuItem( "hoge/hoge" )] private static void Hoge() { var startInfo = new ProcessStartInfo { FileName = @"python", UseShellE…

【Unity】int 型の数値を 3 つの要素を持つ配列にランダムに分解する例

概要 [MenuItem( "hoge/hoge" )] private static void Hoge() { var number = 9; // 分解したい数値 var array = new int[ 3 ]; var remaining = number; for ( var i = 0; i < array.Length - 1; i++ ) { var maxValue = remaining - ( array.Length - i - …

【Unity】すべての SpriteRenderer を含む範囲を取得する方法

ソースコード using System.Linq; using UnityEngine; public sealed class Example : MonoBehaviour { private void Update() { var spriteRenderers = GetComponentsInChildren<SpriteRenderer>(); var left = spriteRenderers.Min( x => x.bounds.min.x ); var bottom = s</spriterenderer>…

【Unity】アルファブレンドした色を返す関数

ソースコード /// <summary> /// アルファブレンドした色を返します /// </summary> public static Color AlphaBlend ( in Color backgroundColor, in Color overlapColor, float alpha ) { return backgroundColor + ( overlapColor - backgroundColor ) * alpha; } 使用例 var…

【Unity】TextMesh Pro のワールド座標における端の位置を取得できる拡張メソッド

ソースコード using System.Linq; using TMPro; public static class TMP_TextExtensionMethods { public static float GetLocalEdgeLeft( this TMP_Text self ) { return self.transform.localPosition.x + self.textInfo.characterInfo.Min( x => x.bottom…

【Unity】TextMesh Pro のローカル座標における端の位置を取得できる拡張メソッド

ソースコード using System.Linq; using TMPro; public static class TMP_TextExtensionMethods { public static float GetLocalEdgeLeft( this TMP_Text self ) { return self.transform.localPosition.x + self.textInfo.characterInfo.Min( x => x.bottom…

【Unity】RectTransform のサイズを TMP_Text などの大きさに合わせる MenuItem

ソースコード using UnityEditor; using UnityEngine; using UnityEngine.UI; namespace Kogane.Internal { internal static class SetPreferredSizeMenuItem { [MenuItem( "CONTEXT/RectTransform/Set Preferred Size" )] private static void SetPreferred…

【Unity】TextMesh Pro の文字のワールド座標を取得する拡張メソッド

ソースコード using TMPro; using UnityEngine; namespace Kogane { public static class TMP_TextExtensionMethods { public static Vector3 GetCharacterPosition ( this TMP_Text self, int index ) { var characterInfo = self.textInfo.characterInfo[ …

【Unity】TextMesh Pro の文字のローカル座標を取得する拡張メソッド

ソースコード using TMPro; using UnityEngine; namespace Kogane { public static class TMP_TextExtensionMethods { public static Vector3 GetCharacterLocalPosition ( this TMP_Text self, int index ) { var characterInfo = self.textInfo.characterI…

【Unity】Collider2D が自分自身の Bounds 内に完全に収まっている時に当たり判定のイベントを実行するクラス

ソースコード using System; using Kogane; using UnityEngine; public sealed class Example : MonoBehaviour { [SerializeField] private Collider2D m_collider2D; private bool m_isHit; public event Action<Collider2D> OnEnter; public event Action<Collider2D> OnExit; priv</collider2d></collider2d>…

【Unity】Bounds が自分自身の中にすべて収まっている場合 true を返す拡張メソッド

ソースコード using UnityEngine; namespace Kogane { /// <summary> /// Bounds 型の拡張メソッド /// </summary> public static class BoundsExtensionMethods { //================================================================================ // 関数(static) //====…

【Unity】Rigidbody2D で速度を一定に保つ方法

ソースコード public float desiredSpeed = 5f; // 一定に保ちたい速度 private Rigidbody2D rb; private void Start() { rb = GetComponent<Rigidbody2D>(); } private void FixedUpdate() { Vector2 velocity = rb.velocity; float currentSpeed = velocity.magnitude; </rigidbody2d>…

【Unity】LineRenderer の Positions をコピーする拡張メソッド

概要 public static void UpdatePositionsFromLineRenderer ( this LineRenderer self, LineRenderer lineRenderer ) { var positionCount = lineRenderer.positionCount; self.positionCount = positionCount; for ( var i = 0; i < positionCount; i++ ) {…

【Unity】SplineContainer を LineRenderer に反映する拡張メソッド

ソースコード using Unity.Collections; using Unity.Mathematics; using UnityEngine; using UnityEngine.Splines; namespace Kogane { public static class LineRendererExtensionMethods { public static void UpdateFromSplineContainer ( this LineRend…

【Unity】Game ビューの解像度やアスペクト比が変化した時に呼び出されるイベント

ソースコード #if UNITY_EDITOR using System; using UnityEditor; using UnityEngine; namespace Kogane { [InitializeOnLoad] public static class ScreenSizeChecker { public static event Action OnChanged; static ScreenSizeChecker() { var oldWidth…

【Unity】Rider で Assembly Definition File を作成する時のファイルテンプレートを差し替える

概要 { "name": "$NAME$" } Rider の Assembly Definition File のファイルテンプレートは上記のように 名前だけを保持する形式になっているので各種パラメータを保持する形式に変更した Rider の設定で「ファイル | 設定 | エディター | ファイルテンプレー…

【Unity】Rider から Unity のアセットを手動でリフレッシュする方法

概要 公式ドキュメントの上記のページに記載されています この記事では Rider の新しい UI での手順を書き残しておきます Rider の Unity のツールバーを右クリックして「ツールバーのカスタマイズ」を選択して 「+」を押して 「アクションの追加」を押して …

【Unity】スプライトのテクスチャサイズを取得する方法

概要 Debug.Log( m_image.sprite.texture.width ); Debug.Log( m_image.sprite.texture.height );

【Unity】LateUpdate で ScrollRect.horizontalNormalizedPosition を参照した時に位置が微妙ズレる場合

概要 private void LateUpdate() { var x = Mathf.LerpUnclamped( m_minX, m_maxX, m_scrollRect.horizontalNormalizedPosition ); // ... } LateUpdate で ScrollRect.horizontalNormalizedPosition を参照して ゲームオブジェクトの X 座標を設定しようと…

【Unity】LineRenderer の positionCount を Tween させる拡張メソッド

ソースコード using System.Collections.Generic; using DG.Tweening; using Unity.Collections; using UnityEngine; namespace Kogane { /// <summary> /// LineRenderer 型の DOTween 関連の拡張メソッド /// </summary> public static class DOTweenLineRendererExtensionMet…

【Unity】パラメータ名にハイフンを含む Json を JsonUtility で読み込みたい場合

概要 System.Text.Json などを使用せずに パラメータ名にハイフンを含む Json を JsonUtility で読み込みたい場合 json = json.Replace( "\"time-offset\"", "\"time_offset\"" ); 一応、上記のようにパラメータ名を置換すれば読み込める 参考サイト様