コガネブログ

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

【Unity】開発中のアプリがメモリリークで強制終了するようになった時に対応したこと

インスタンスが破棄される時にメンバ変数に定義しているすべてのデリゲートにnullを代入するようにした MonoBehaviour を継承しているクラスの場合 OnDestroy 関数ですべてのデリゲートにnullを代入する 対応前 public class Example : MonoBehaviour { publ…

【Unity】【NGUI】非アクティブな UISprite の大きさを画像サイズに合わせることができる拡張メソッド

public static class UISpriteExt { public static void Snap( this UISprite self ) { var data = self.GetAtlasSprite(); self.width = data.width ; self.height = data.height ; } } var sprite = GetComponent<UISprite>(); sprite.Snap(); NGUIがデフォルトで用</uisprite>…

【C#】数値を符号付きの文字列に変換する拡張メソッド

/// <summary> /// 指定された数値を符号付きの文字列に変換して返します /// </summary> public static string WithSign( this int self ) { return self != 0 ? self.ToString( "+#;-#;" ) : self.ToString(); }

【Unity】コンパイル時間を短縮するアセット「Mad Compile Time Optimizer」

【Unity】【NGUI】文字列にカラータグを含む場合 true を返す拡張メソッド

using System.Text.RegularExpressions; public static class StringExt { private static readonly Regex COLOR_TAG_PATTERN = new Regex( @"(\[[0-9A-F]{6}\])", RegexOptions.IgnoreCase ); public static bool ContainsColorTag( this string self ) { r…

【Unity】OnPreprocessTextureでテクスチャフォーマットにETCやPVRTCを設定する方法

Unity 5.4.3f1 public class TextureAssetPostProcessor : AssetPostprocessor { private void OnPreprocessTexture() { var impoter = assetImporter as TextureImporter; var maxTextureSize = 2048; var compressionQuality = 50; impoter.SetPlatformTex…

【Unity】OnPreprocessTextureでテクスチャのサイズを取得する方法

Unity 5.4.3f1 public class TextureAssetPostProcessor : AssetPostprocessor { private void OnPreprocessTexture() { var impoter = assetImporter as TextureImporter; var size = new object[ 2 ] { 0, 0 }; var method = typeof( TextureImporter ).Ge…

【Unity】OnPreprocessTextureでテクスチャがアルファチャンネルを所持しているかどうかを確認する方法

Unity 5.4.3f1 public class TextureAssetPostProcessor : AssetPostprocessor { private void OnPreprocessTexture() { var impoter = assetImporter as TextureImporter; var haveAlpha = impoter.DoesSourceTextureHaveAlpha(); Debug.Log( haveAlpha ); …

【おすすめスライド】「【Unity道場】パフォーマンス最適化のポイント」

【Unity】DOTween.Tweenがnullではない場合にのみComplete関数を呼び出す拡張メソッド

public static class TweenExt { public static void CompleteIfNotNull( this Tween self ) { if ( self == null ) return; self.Complete(); } }

【Unity】DOTween.Tweenがnullではない場合にのみKill関数を呼び出す拡張メソッド

/// <summary> /// Tween 型の拡張メソッドを管理するクラス /// </summary> public static class TweenExt { /// <summary> /// Sequence を削除します /// </summary> public static void KillIfNotNull( this Tween self, bool complete = false ) { if ( self == null ) return; self.Kill( com…

【Unity】ソフトウェアキーボードの縦幅を取得するクラス

var height = SoftwareKeyboaryArea.Height;

【Unity】Android端末においてソフトウェアキーボードの領域を取得する

public int GetKeyboardSize() { #if !UNITY_EDITOR && UNITY_ANDROID using ( var unityPlayer = new AndroidJavaClass( "com.unity3d.player.UnityPlayer" ) ) { var view = unityPlayer .GetStatic<AndroidJavaObject>( "currentActivity" ) .Get<AndroidJavaObject>( "mUnityPlayer" ) .Call<AndroidJavaObject>( "</androidjavaobject></androidjavaobject></androidjavaobject>…

【Unity】iOS端末においてソフトウェアキーボードの領域を取得する

TouchScreenKeyboard.area ※Androidでは取得不可能 参考サイト様 docs.unity3d.com

【ゲームプレイメモ】称号変更画面

バンドリ バンドリ! ガールズバンドパーティ!Craft Egg Inc.ゲーム無料 A3! A3!Liberentゲーム無料 デレステ アイドルマスター シンデレラガールズ スターライトステージBANDAI NAMCO Entertainment Inc.ゲーム無料

【ゲームプレイメモ】ららマジ

ららマジWright Flyer Studiosゲーム無料 ・報酬獲得ダイアログで報酬アイコンがキラキラ光る ・名前入力時にダイアログがソフトウェアキーボードに重ならないように上に移動する ・ドレスノートでメモリが不足していても「らら石」で習得できる ・ドレスノ…

【ゲームプレイメモ】A3!(エースリー)

A3!Liberentゲーム無料 ・ダイアログにプレゼントアイコンや警告アイコンが表示されている

【ゲームプレイメモ】ファイアーエムブレム ヒーローズ

ファイアーエムブレム ヒーローズNintendo Co., Ltd.ゲーム無料 ・プレゼントリストやフレンドリストの画面を開いた時に通信中でも画面を操作できる ・アイテムアイコン、キャラクターのパラメータやスキルをタップすると、小さいウィンドウで説明を閲覧でき…

【ゲームプレイメモ】アカシックリコード

アカシックリコード(Akashic Re:cords)SQUARE ENIX INCゲーム無料 ・ユニット詳細の矢印をタップすると前後のユニットに表示を切り替えられる ・ユニットや装備のアイコンを長押しするとインジケータが表示される ・スクロールバーが画面の左側に配置され…

【Unity】Spineでタイムスケールを無視する方法

var animation = GetComponent<SkeletonAnimation>(); animation.timeScale = 1 / Time.timeScale;</skeletonanimation>

【おすすめスライド】「Jenkinsを使ったコンシューマゲームでのデプロイとテスト」

【おすすめスライド】「GCS2013 リーンソフトウェア開発から見るゲーム開発7つのムダ」

【Unity】Inspectorに表示されるパラメータをUnityエディタ再生中のみ編集不可能にするPropertyAttribute

using UnityEngine; public class Example : MonoBehaviour { [UnchangeableInPlaying] public int m_id; [UnchangeableInPlaying] public string m_name; }

【Unity】Inspectorに表示されるパラメータを編集不可能にするPropertyAttribute

using UnityEngine; public class Example : MonoBehaviour { [Unchangeable] public int m_id; [Unchangeable] public string m_name; }

【おすすめスライド】「うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移」

【Unity】Androidにおいて、ソフトウェアキーボードの文字色が白色になり、背景色と同化して見えなくなる不具合の修正方法

遭遇した環境 Unity 5.4.3f1 修正方法 AndroidManifest.xml の application タグに下記の記述を追加する

【Unity】JsonUtilityは多次元配列やジャグ配列をサポートしていない

開発環境 Unity 5.4.3f1 using UnityEngine; public class NewBehaviourScript : MonoBehaviour { class ExampleClass { public int[] list1 = new int[]{ 1,2,3,4,5 }; public int[,] list2 = new int[,] { { 1,2,3,4,5 }, { 1,2,3,4,5 } }; public int[][]…

【Unity】App Storeに掲載されるipaの容量を確認するために使用している方法

.ipaを.zipに変換して展開して アプリ名以外のファイルをすべて選択してプロパティを見る 参考サイト様

【Unity】iOSの「CFBundleVersion」と「CFBundleShortVersionString」に紐付くパラメータ

.plist Unity CFBundleVersion Build CFBundleShortVersionString Version

【Unity】【NGUI】UIRoot の子オブジェクトのグローバル座標を設定する拡張メソッド

using UnityEngine; /// <summary> /// UIWidget 型の拡張メソッドを管理するクラス /// </summary> public static class UIWidgetExt { /// <summary> /// UIRoot の子オブジェクトのグローバル座標を返します /// </summary> public static Vector3 GetGlobalPosition( this Component self ) { i…

【Unity】【NGUI】UIRoot の子オブジェクトのグローバル座標を返す拡張メソッド

using UnityEngine; /// <summary> /// UIWidget 型の拡張メソッドを管理するクラス /// </summary> public static class UIWidgetExt { /// <summary> /// UIRoot の子オブジェクトのグローバル座標を返します /// </summary> public static Vector3 GetGlobalPosition( this Component self ) { i…

【Unity】指定されたオブジェクトの名前を返す、オブジェクトが null の場合は既定値を返す拡張メソッド

using UnityEngine; /// <summary> /// UnityEngine.Object 型の拡張メソッドを管理するクラス /// </summary> public static class UnityEngineObjectExt { /// <summary> /// 名前を返します。null の場合は既定値を返します /// </summary> public static string GetNameOfDefault( this UnityEn…

【Unity】【NGUI】BoxColliderの位置とサイズをUIWidgetのパラメータに合わせて調整するボタンをInspectorに追加するエディタ拡張

using System.Linq; using UnityEditor; using UnityEngine; [CanEditMultipleObjects] [CustomEditor( typeof( BoxCollider ), true )] public sealed class BoxColliderInspector : Editor { public override void OnInspectorGUI() { DrawDefaultInspecto…

【Unity】【NGUI】BoxColliderの位置とサイズをUIWidgetのパラメータに合わせて調整するコンテキストメニューを追加するエディタ拡張

using UnityEditor; using UnityEngine; public static class BoxColliderContextMenu { [MenuItem( "CONTEXT/BoxCollider/Adjust To Match" )] private static void AdjustToMatch( MenuCommand command ) { var boxCollider = command.context as BoxColli…

【Unity】ネットワークにアクセス可能かどうかを取得する方法

Application.internetReachability を使用する switch ( Application.internetReachability ) { case NetworkReachability.NotReachable: Debug.Log( "ネットワークが使えない" ); break; case NetworkReachability.ReachableViaCarrierDataNetwork: Debug.L…

【Unity】指定されたオブジェクトがプレハブではない場合 true を返す拡張メソッド

using UnityEditor; /// <summary> /// UnityEngine.Object 型の拡張メソッドを管理するクラス /// </summary> public static partial class UnityEngineObjectExt { /// <summary> /// 指定されたオブジェクトがプレハブではない場合 true を返します /// </summary> public static bool IsNotPref…

【Unity】指定されたオブジェクトがプレハブの場合 true を返す拡張メソッド

using UnityEditor; /// <summary> /// UnityEngine.Object 型の拡張メソッドを管理するクラス /// </summary> public static class UnityEngineObjectExt { /// <summary> /// 指定されたオブジェクトがプレハブの場合 true を返します /// </summary> public static bool IsPrefab( this UnityEng…

【Unity】指定されたオブジェクトの PrefabType を返す拡張メソッド

using UnityEditor; /// <summary> /// UnityEngine.Object 型の拡張メソッドを管理するクラス /// </summary> public static partial class UnityEngineObjectExt { /// <summary> /// 指定されたオブジェクトの PrefabType を返します /// </summary> public static PrefabType GetPrefabType( th…

【Unity】iOSにおいてサスペンド・レジューム時にOnApplicationPauseが2回連続で呼び出されることがある

Unity5.4.4f1でビルドしたアプリをサスペンドした状態で長時間放置してから レジュームしてみたところ、OnApplicationPause が2回連続で呼び出される現象に遭遇した アプリのサスペンド・レジューム時に1度だけ呼び出される処理を実装したい場合は 下記のよ…

【Unity】Unity5.4.4f1でAndroidのIL2CPP版のROMをビルドするとキャッシュが肥大化していく

Unity5.4.4f1でAndroidのIL2CPP版のROMをビルドしていたところ、 ビルドを繰り返すたびにLibraryフォルダ内の 下記のフォルダのサイズが少しずつ増えていく現象が発生し、 ビルドマシンの容量が圧迫される問題に遭遇した il2cpp_android_armeabi-v7a il2cpp_…

【Unity】iOS10の端末においてFPSが60の状態でスリープから復帰するとアプリが強制終了することがある

再現したUnityのバージョン Unity5.6.0b2 Unity5.5.0p3 Unity5.4.4f1 発生条件 iOS10の端末においてFPSが60の状態でスリープから復帰するとアプリが強制終了する 解決方法 サスペンドする時にFPSを30に変更する private int m_prevFps; private void OnAppli…

【NGUI】NGUIでマスクを使用する方法

UIPanel を配置する 「Clipping」を「Texture Mask」に設定する マスクに使用するテクスチャを設定する UIPanel の子供にマスクを適用したいオブジェクトを配置する

【Unity】Windows 7 における Unity エディタのログの保存場所

C:\Users\【ユーザー名】\AppData\Local\Unity\Editor

【Unity】Google Cardboard SDKを使用しているUnityプロジェクトのバージョンを5.5から5.6βにアップデートした際にAndroid版のROMで起動時に発生したエラー

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.hand.cham/com.google.unity.GoogleUnityActivity}: java.lang.ClassNotFoundException: Didn't find class "com.google.unity.GoogleUnityActivity" on path: DexPathList[[…

【Unity】NGUIのUISpriteのサイズが画像サイズと等しいかどうかを確認する拡張メソッド

using NwgLibrary; namespace Cham { /// <summary> /// UISprite 型の拡張メソッドを管理するクラス /// </summary> public static class UISpriteExt { /// <summary> /// スナップされている場合 true を返します /// </summary> public static bool IsSnapped( this UISprite self ) { var data…

【C#】単数を渡せるIEnumerable.Concat

/// <summary> /// 2 つのシーケンスを連結します /// </summary> public static IEnumerable<TSource> Concat<TSource>( this IEnumerable<TSource> first, TSource second ) { return first.Concat( new [] { second } ); }</tsource></tsource></tsource>

【Unity】ログ出力を無効化する時に「logEnabledプロパティ」を使った場合と「Conditional属性」を使った場合の処理時間の検証

using UnityEngine; public class Example : MonoBehaviour { private void Awake() { var count = 1000000; { Debug.logger.logEnabled = false; var startTime = Time.realtimeSinceStartup; for ( int i = 0; i < count; i++ ) { Debug.Log( i ); } var e…

【Unity】Scene ビューから不要なオブジェクトを非表示にする

Unity エディタ右上の「Layers」を開いて 不要なオブジェクトを表示しているレイヤーを非表示にする 例えば、2Dの作業をしている時に3Dモデルを非表示にしておきたい時に役立ちます

【Unity】Unity5.5でスクリプトからAndroidのビルド方法をIL2CPPに変更する方法

下記のようなプログラムを作成する using UnityEditor; public static class ExampleClass { [MenuItem( "Tools/Example" )] public static void Example() { PlayerSettings.SetScriptingBackend( BuildTargetGroup.Android, ScriptingImplementation.IL2CP…

【SVN】「svn: E200009: 'XXXX' is not under version control」

svn: E200009: 'XXXX' is not under version control MacでファイルをSVNにコミットしようとした時に上記のエラーが発生した ファイル名に空白文字が含まれていたことが原因だったため ファイル名から空白文字を削除してコミットしたトコロ、正常に動作した