読者です 読者をやめる 読者になる 読者になる

コガネブログ

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

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

Unity 拡張メソッド
using UnityEditor;

/// <summary>
/// UnityEngine.Object 型の拡張メソッドを管理するクラス
/// </summary>
public static class UnityEngineObjectExt
{
    /// <summary>
    /// 指定されたオブジェクトがプレハブの場合 true を返します
    /// </summary>
    public static bool IsPrefab( this UnityEngine.Object self )
    {
        var type = PrefabUtility.GetPrefabType( self );
        
        return 
            type == PrefabType.Prefab               || 
            type == PrefabType.ModelPrefab          || 
            type == PrefabType.PrefabInstance       || 
            type == PrefabType.ModelPrefabInstance  || 
            type == PrefabType.PrefabInstance
        ;
    }
}
if ( gameObject.IsPrefab() )
{
    ...
}

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

Unity 拡張メソッド
using UnityEditor;

/// <summary>
/// UnityEngine.Object 型の拡張メソッドを管理するクラス
/// </summary>
public static partial class UnityEngineObjectExt
{
    /// <summary>
    /// 指定されたオブジェクトの PrefabType を返します
    /// </summary>
    public static PrefabType GetPrefabType( this UnityEngine.Object self )
    {
        return PrefabUtility.GetPrefabType( self );
    }
}
var type = gameObject.GetPrefabType();

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

Unity5.4.4f1でビルドしたアプリをサスペンドした状態で長時間放置してから
レジュームしてみたところ、OnApplicationPause が2回連続で呼び出される現象に遭遇した

アプリのサスペンド・レジューム時に1度だけ呼び出される処理を実装したい場合は
下記のようにフラグを用いたほうが安全

private bool m_isSuspended;

private void OnApplicationPause( bool isPause )
{
    if ( isPause )
    {
        OnSuspend();
    }
    else
    {
        OnResume();
    }
}

private void OnSuspend()
{
    if ( m_isSuspended ) return;
    m_isSuspended = true;
    
    ...
}

private void OnResume()
{
    if ( !m_isSuspended ) return;
    m_isSuspended = false;
    
    ...
}

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

Unity Unity5.4 トラブルシューティング

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

il2cpp_android_armeabi-v7a
il2cpp_android_x86

Unity5.5以降にバージョンアップすれば直る?

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

Unity Unity5.4 Unity5.5 トラブルシューティング

再現したUnityのバージョン

  • Unity5.6.0b2
  • Unity5.5.0p3
  • Unity5.4.4f1

発生条件

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

解決方法

private int m_prevFps;

private void OnApplicationPause( bool isPause )
{
    if ( isPause )
    {
        m_prevFps = Application.targetFrameRate;
        Application.targetFrameRate = 30;
    }
    else
    {
        Application.targetFrameRate = m_prevFps;
    }
}