コガネブログ

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

【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 = self.GetAtlasSprite();
            return self.width == data.width && self.height == data.height;
        }

        /// <summary>
        /// スナップされていない場合 true を返します
        /// </summary>
        public static bool IsNotSnapped( this UISprite self )
        {
            return !self.IsSnapped();
        }
    }
}
if ( uiSprite.IsSnapped() )
{
    // ...
}

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

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

【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 elapsedTime = Time.realtimeSinceStartup - startTime;
            Debug.logger.logEnabled = true;
            Debug.Log( elapsedTime );
        }
        
        {
            var startTime = Time.realtimeSinceStartup;
            for ( int i = 0; i < count; i++ )
            {
                Log( i );
            }
            var elapsedTime = Time.realtimeSinceStartup - startTime;
            Debug.Log( elapsedTime );
        }
    }
    
    [System.Diagnostics.Conditional( "DISABLE_RELEASE" )]
    private void Log( object message )
    {
        Debug.Log( message );
    }
}

検証結果

項目 処理時間
Debug.logger.logEnabled 0.13631110 秒
System.Diagnostics.Conditional 0.00304985 秒

まとめ

Conditional 属性は引数の評価がスキップされるため logEnabled プロパティよりも高速
リリース版のアプリでログ出力を無効化する場合は Conditional 属性の方が良い

【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.IL2CPP 
        );
    }
}