Version: 5.3 (switch to 5.4b)
言語English
  • C#
  • JS

スクリプト言語

好きな言語を選択してください。選択した言語でスクリプトコードが表示されます。

PreserveAttribute

class in UnityEngine.Scripting

フィードバック

ありがとうございます

この度はドキュメントの品質向上のためにご意見・ご要望をお寄せいただき、誠にありがとうございます。頂いた内容をドキュメントチームで確認し、必要に応じて修正を致します。

閉じる

送信に失敗しました

なんらかのエラーが発生したため送信が出来ませんでした。しばらく経ってから<a>もう一度送信</a>してください。ドキュメントの品質向上のために時間を割いて頂き誠にありがとうございます。

閉じる

キャンセル

マニュアルに切り替える

説明

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

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

#pragma strict

import UnityEngine; import UnityEngine.Scripting; import System.Reflection;

public class NewBehaviourScript extends MonoBehaviour { function Start() { ReflectionExample.InvokeBoinkByReflection(); } } public class ReflectionExample { public static function 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 function Boink() { Debug.Log("Boink"); } }
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" を持つどのような属性でも考慮します。