unity 5.3 中新增加的 Attribute

孙广东  2015.11.24

1、PreserveAttribute

PreserveAttribute 可 从删除的类、 方法、 字段或属性的字节代码中 剥离出来 。

当你创建一个build 时,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" 应用不删除的东西上,无论该 命名空间或程序集的 属性。

2、为类提供一个自定义的文档的URL。

[HelpURL("http://example.com/docs/MyComponent.html")]
public class MyComponent
{

}

3、允许当Unity游戏 从用户加载运行时     运行时 类方法 被初始化 。

场景已被加载 (即 Awake 方法已被调用),将 调用 标记 [RuntimeInitializeOnLoadMethod] 的方法。注: 标记 [RuntimeInitializeOnLoadMethod] 的方法的执行顺序是不能保证的。

using UnityEngine;

class MyClass
{
    [RuntimeInitializeOnLoadMethod]
    static void OnRuntimeMethodLoad ()
    {
        Debug.Log("After scene is loaded and game is running");
    }

    [RuntimeInitializeOnLoadMethod]
    static void OnSecondRuntimeMethodLoad ()
    {
        Debug.Log("SecondMethod After scene is loaded and game is running.");
    }
}

4、

using UnityEngine;

[SharedBetweenAnimators]
public class AttackBehaviour : StateMachineBehaviour
{
	public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
	{
		Debug.Log("OnStateEnter");
	}
}

??

??

时间: 2024-10-15 13:31:56

unity 5.3 中新增加的 Attribute的相关文章

HTML5每日一练之input新增加的六种时间类型应用

今天介绍一下input在HTML5中新增加的时间类型的应用,与昨天的练习一样,如果在以下这几种输入框中输入的格式不正确,也是无法提交的. 注意:此种类型的input在Opera10+中效果为佳,Chrome中效果不是十分好,外观取决于浏览器 1.Date类型: <form> <input id="w3cfuns_date" name="w3cfuns.com" type="date"/> <input type=&q

HDU 2767--Proving Equivalences【scc缩点构图 &amp;&amp; 求向图中最少增加多少条边才可以使新图强连通】

Proving Equivalences Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4129    Accepted Submission(s): 1466 Problem Description Consider the following exercise, found in a generic linear algebra

表结构更改后或新增加数据后同步到表中

select 'insert into mtx_system_module(module_id,module_code,module_name,module_note,create_date,version)values('+cast(moduleid as varchar(10))+','''+ObjectID+''','''+Name+''','''+isnull(Note,'')+''',NOW(),1);' from AppModules where subsystem=1 and Pa

Unity 4.0 中的新动画系统——MecAnim

分享一个文档资料,关于动画系统的,版本应该很老了,但是有借鉴意义的: Unity 4.0 已于 2012 年 11 月 15 日正式发布,Unity 每一次版本的提升,都给游戏开发者带来惊喜,这一次也不例外,该版本最大变化之一就是引入了新动画系统--MecAnim,通过 MecAnim 新的动画系统,开发者在 Unity 中可以非常方便地实现角色动画.所以 Unity 4.0 的启动画面都突出了新的动画系统这一最新功能  . 这里需要说明的是,在 Unity 4.0 中,开发者还是可以使用原有的

Java 5 、6、 7中新特性

JDK5新特性(与1.4相比)[转] 1 循环 for (type variable : array){ body} for (type variable : arrayList){body} 而1.4必须是: for (int i = 0; i < array.length; i++){ type variable = array[i];    body} for (int i = 0; i < arrayList.size(); i++){type variable = (type) ar

【Unity游戏开发】浅谈Unity游戏开发中的单元测试

一.单元测试的定义与作用 单元测试定义:单元测试在传统软件开发中是非常重要的工具,它是指对软件中的最小可测试单元进行检查和验证,一般情况下就是对代码中的一个函数去进行验证,检查它的正确性.一个单元测试是一段自动化的代码,这段代码调用被测试的工作单元,之后对这个单元的单个最终结果的某些假设进行检验.单元测试使用单元测试框架编写,并要求单元测试可靠.可读并且可维护.只要产品代码不发生变化,单元测试的结果是稳定的.(百度的) 单元测试可以让你在软件开发的早期阶段发现 Bug,而不必到集成测试的时候才发

[转] Draw Call未被批处理?告诉你在Unity 5.6中如何查找原因 [复制链接]

Unity在5.6之前的版本中并未提供很直接的方式来查找Draw Call未被批处理的原因,但Unity 5.6在Frame Debugger中新增了一项功能,帮助开发者查找相关信息.今天这篇文章就为大家分享,在Unity 5.6中如何查看Draw Call未被批处理的原因. 相信大家都知道,Unity内置的动态与静态批处理有助于减少游戏中的Draw Call数量.在Stats窗口中,当"Saved by batching"值大于零时就表示批处理已经生效.但不幸的是,要想知道批处理为何

五种情况下会刷新控件状态(刷新所有子FWinControls的显示)——从DFM读取数据时、新增加子控件时、重新创建当前控件的句柄时、设置父控件时、显示状态被改变时

五种情况下会刷新控件状态(刷新控件状态才能刷新所有子FWinControls的显示): 在TWinControls.PaintControls中,对所有FWinControls只是重绘了边框,而没有整个重绘这些FWinControl子控件.那么什么时候才整个重绘全部FWinControls呢?这时候,就不是一个单纯的WM_PAINT来解决控件重绘的问题了,而是这个TWinControl.UpdateShowing函数: procedure TWinControl.UpdateShowing; v

Unity制作游戏中的场景

Unity制作游戏中的场景 1.2.3  场景 在Unity中,场景(Scene)就是游戏开发者制作游戏时,所使用的游戏场景.它是一个三维空间,对应的三维坐标轴分别是X轴.Y轴和Z轴本文选自Unity 2D游戏开发从入门到精通清华大学出版社. 要创建一个新的场景,只需单击File|New Scene命令,或者按下快键键Ctrl+N,如图1-16所示. 图1-16  创建程序的命令,以及场景 默认情况下,新创建游戏项目的同时,也新创建了游戏的场景,只不过还没有保存罢了.使用快捷键Ctrl+S即可保