版本:Unity 6 (6000.0)
语言英语
  • C#

PreserveAttribute

UnityEngine.Scripting 类

/

实现于:UnityEngine.CoreModule

建议修改

成功!

感谢您帮助我们改进 Unity 文档质量。虽然我们不能接受所有提交内容,但我们确实会阅读用户提出的每个建议的更改,并在适当的情况下进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们改进 Unity 文档质量。

关闭

取消

描述

PreserveAttribute 阻止字节码剥离移除类、方法、字段或属性。

创建构建时,Unity 会尝试从您的项目中剥离未使用的代码。这对获得较小的构建很有帮助。但是,有时您希望某些代码不被剥离,即使它看起来没有被使用。例如,如果您使用反射调用方法或实例化某个类的对象,就会发生这种情况。您可以将 [Preserve] 属性应用于类、方法、字段和属性。除了使用 PreserveAttribute,您还可以使用 link.xml 文件的传统方法来告诉链接器不要移除这些内容。PreserveAttribute 和 link.xml 对 Mono 和 IL2CPP 脚本后端都有效。

有关 [Preserve] 和 link.xml 的更多详细信息,请参阅 托管代码剥离

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。代码剥离器也会尊重这一点,它会将任何具有完全名称“PreserveAttribute”的属性视为不剥离其应用对象的理由,无论该属性的命名空间或程序集是什么。