LoginSignup
29

More than 5 years have passed since last update.

【Unity】Unity 5.3 新機能メモ

Last updated at Posted at 2016-01-16

Logger

Unity 5.3 から「UnityEngine.Logger」が追加されました
Debugクラス同様にログ出力が可能なクラスですが
Debugクラスと比べると下記のような違いがあります

  • ログにタグを付与することができる
  • ログにフィルターをかけることができる
  • ログ出力の機能のON/OFFを変更できる

ログにタグを付与することができる

var logger = Debug.logger;
logger.Log( "タグ", "ログ" );
logger.LogWarning( "警告タグ", "ログ" );
logger.LogError( "エラータグ", "ログ" );

alt

ログにフィルターをかけることができる

var logger = Debug.logger;
logger.filterLogType = LogType.Warning;
LogType 出力されるログ
Log すべて
Warning Warning、Assert、Error、Exception
Assert Assert、Error、Exception
Error Error、Exception
Exception Exception

ログ出力の機能のON/OFFを変更できる

var logger = Debug.logger;
logger.logEnabled = false;

参考サイト様

ILogHandler

Unity 5.3 から「UnityEngine.ILogHandler」が追加されました
ILogHandlerを実装したクラスをLoggerクラスに設定することで
ログ出力時の挙動を変えることができます

public class MyLogHandler : ILogHandler
{
    public void LogException( 
        Exception           exception, 
        UnityEngine.Object  context 
    )
    {
        // ...
    }

    public void LogFormat( 
        LogType             logType, 
        UnityEngine.Object  context, 
        string              format, 
        params object[]     args 
    )
    {
        // ...
    }
}

例えばこのようなILogHandlerを実装したクラスを

var logger = new Logger( new MyLogHandler() );
logger.Log( "ログ" );

Loggerクラスのコンストラクタで指定してから
ログ出力する処理を記述します

後は、ILogHandlerを実装したクラスの
LogException関数とLogFormat関数の処理を記述することで
独自のログ出力機能を実装できます

例えば、出力されたログをテキストファイルに保存する、
サーバに送信するといった機能を実現できるようになります

参考サイト様

SceneAsset

Unity 5.3 から「UnityEditor.SceneAsset」が追加されました
このクラスを使用してエディタ拡張を行うことで
シーンファイルのInspectorを拡張したり
EditorGUILayout.ObjectFieldと併用することで
Inspectorでシーンファイルをドラッグ&ドロップできるようになります

using UnityEditor;
using UnityEngine;

[CustomEditor( typeof( SceneAsset ) )]
public class SceneAssetInspector : Editor
{
    public override void OnInspectorGUI()
    {
        GUI.enabled = true;
        EditorGUILayout.LabelField( "Hoge" );
        GUI.enabled = false;
    }
}

alt

参考サイト様

Preserve

Unity 5.3 から「UnityEngine.Scripting.Preserve」が追加されました
Unityはビルド開始時にプロジェクト内の未使用のコードを削除しますが
例えばリフレクションを使用して呼び出している関数が存在する場合
その関数も削除されてしまう可能性があります

Preserve属性を関数に適用することで
ビルド開始時に削除されないようにすることができます

using System.Reflection;
using UnityEngine;
using UnityEngine.Scripting;

public class ExampleClass
{
    public static void Example()
    {
        var type = typeof( ExampleClass );
        var attr = BindingFlags.NonPublic | BindingFlags.Static;
        type.GetMethod( "Log", attr ).Invoke( null, null );
    }

    [Preserve]
    private static void Log()
    {
        Debug.Log( "ログ" );
    }
}

参考サイト様

WaitWhile

Unity 5.3 から「UnityEngine.WaitWhile」が追加されました
条件を満たす間コルーチンの実行を中断できます

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour 
{
    int frame;

    IEnumerator Start()
    {
        yield return new WaitWhile( () => frame < 10 );
    }

    void Update()
    {
        frame++;
    }
}

参考サイト様

WaitUntil

Unity 5.3 から「UnityEngine.WaitUntil」が追加されました
条件を満たさない間コルーチンの実行を中断できます

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour 
{
    int frame;

    IEnumerator Start()
    {
        yield return new WaitUntil( () => frame >= 10 );
    }

    void Update()
    {
        frame++;
    }
}

参考サイト様

DelayedAttribute

Unity 5.3 から「UnityEngine.DelayedAttribute」が追加されました

using UnityEngine;

public class ExampleClass : MonoBehaviour 
{
    public int value;

    void Update()
    {
        Debug.Log( value );
    }
}

例えば上記のようなクラスをオブジェクトにアタッチして
エディタ再生中にInspectorでvalue変数の値を変更した場合
即座にログに出力される値が変化しますが

using UnityEngine;

public class ExampleClass : MonoBehaviour 
{
    [Delayed] public int value;

    void Update()
    {
        Debug.Log( value );
    }
}

このようにvalue変数にDelayed属性を適用して
エディタ再生中にInspectorでvalue変数の値を変更した場合
エンターキーを入力するまでログに出力される値が変化しません

参考サイト様

ColorUtility

Unity 5.3 から「UnityEngine.ColorUtility」が追加されました
Color型のインスタンスをカラーコードの文字列に変換したり
カラーコードの文字列をColor型のインスタンスに変換したりできます

ToHtmlStringRGB

Debug.Log( ColorUtility.ToHtmlStringRGB( Color.cyan ) );
// 00FFFF

ToHtmlStringRGBA

Debug.Log( ColorUtility.ToHtmlStringRGBA( Color.cyan ) );
// 00FFFFFF

TryParseHtmlString

Color color;
if ( ColorUtility.TryParseHtmlString( "#00FFFF", out color ) )
{
    Debug.Log( color );
    // RGBA(0.000, 1.000, 1.000, 1.000)
}

参考サイト様

ISerializationCallbackReceiver

Unity 5.3 から「UnityEngine.ISerializationCallbackReceiver」が追加されました
このインターフェイスを実装することで
JsonUtilityでシリアライズした時やデシリアライズした時に呼び出される
コールバック関数を実装することができます

public class Character : ISerializationCallbackReceiver
{
    public void OnBeforeSerialize()
    {
        Debug.Log( "OnBeforeSerialize" );
    }

    public void OnAfterDeserialize()
    {
        Debug.Log( "OnAfterDeserialize" );
    }
}
var character = new Character();
var json = JsonUtility.ToJson( character );
character = JsonUtility.FromJson<Character>( json );

参考サイト様

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29