Logger
Unity 5.3 から「UnityEngine.Logger」が追加されました
Debugクラス同様にログ出力が可能なクラスですが
Debugクラスと比べると下記のような違いがあります
- ログにタグを付与することができる
- ログにフィルターをかけることができる
- ログ出力の機能のON/OFFを変更できる
ログにタグを付与することができる
var logger = Debug.logger;
logger.Log( "タグ", "ログ" );
logger.LogWarning( "警告タグ", "ログ" );
logger.LogError( "エラータグ", "ログ" );
ログにフィルターをかけることができる
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;
}
}
参考サイト様
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 );
参考サイト様