Version: 2018.1

PreserveAttribute

class in UnityEngine.Scripting

マニュアルに切り替える

説明

PreserveAttribute はクラス、メソッド、フィールド、プロパティーを削除することでバイトコードのストリッピングを防止します。

ビルドを作成するとき、 Unity はプロジェクトから不要なコードを除去しようとします。これはビルドサイズを削減する素晴らしい機能です。しかし、使用されていないコードのよう見えても、時にはコードをストリッピングしたくない場合もあります。これはインスタンスのためにリフレクションを使用してメソッドを呼び出すか、特定のクラスのオブジェクトをインスタンス化する場合が該当します。 [Preserve] 属性をクラス、メソッド、フィールド、プロパティーに適用できます。PreserveAttribute を使用することに加え、従来の方法として、削除しないようにリンカーに指示する link.xml ファイルを使用することもできます。PreserveAttribute は IL2CPP のプラットフォームでのみ動作します。 link.xml ファイルは Mono や IL2CPP プラットフォームで動作します。

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

public class NewBehaviourScript : MonoBehaviour { void Start() { ReflectionExample.InvokeBoinkByReflection(); } }

public class ReflectionExample { static public void InvokeBoinkByReflection() { typeof(ReflectionExample).GetMethod("Boink", BindingFlags.NonPublic | BindingFlags.Static).Invoke(null, null); }

// No other code directly references the Boink method, so when when stripping is enabled, // it will be removed unless the [Preserve] attribute is applied. [Preserve] static void Boink() { Debug.Log("Boink"); } }

UnityEngine.dll に依存したくないサードパーティのライブラリのために独自の PreserveAttribute を定義することも可能です。コードストリッパーはそれも尊重し、ストリップしない理由として、名前空間に関係ないことや属性の集合に適用されることで正確な名前 "PreserveAtribute" を持つどのような属性でも考慮します。