unity 获取对象脚本脚本销毁时怎么销毁该脚本的所有对象

如何制作人物减血的脚本?我现在写的不打的时候也减血,大家帮忙看看吧~
这是我的控制血的脚本:var target : Tvar range = 45.0;function Awake(){ & & & target = GameObject.FindWithTag(&Player&).}function Update () { &if(; CanAttackTarget()) & & &{ & & & &//transform.LookAt(target); & & &var targetRotation = Quaternion.LookRotation(target.position - transform.position, Vector3.up); & & & &transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * 1.2); & & } & & var forward = transform. & & & &var targetDir = target.position - transform. & & & &var angle = Vector3.Angle(targetDir, forward);if(angle & 10.0) & & & &{ & & & & & &DoDamage(); & & & &} & & & &else & & & &{ & & & &} & &}var damageTimer = 0.0;function DoDamage(){ & &if(damageTimer==0.0) & &{ & & & &damageTimer = Time. & &} & &if((damageTimer+0.05) & Time.time) & &{ & & & & & &} & &else & &{ & & & &Player.HEALTH -= 1; & & & &print(Player.HEALTH); & & & &damageTimer = Time. & &}}function CanAttackTarget(){ & &//Check if the target is close enough & &if(Vector3.Distance(transform.position, target.position) & range) & &{ & & & &print(&you are safe!&); & & & & & &}var hit : RaycastH & &//Check if there's collisi target & &if(Physics.Linecast(transform.position, target.position, hit)) & &{ & & & &if(hit.collider.gameObject.tag != &Player&) & & & &{ & & & & & &print(&Dangerous! &+hit.collider.gameObject.name); & & & & & & & & & &} & & & &else & & & &{ & & & & & &print(&Dangerous!&); & & & & & & & & & &} & &} &}
要评论请先&或者&
你是不是应该还有个开枪的脚本? 我大概看了下这脚本,它判断了目标是否存在, 是否在射程中,与枪的角度. 貌似没有地方在判断是否开枪. 
我想做的大概意思就是player进入范围内受到攻击就会减血,没有开枪,就是一个导入的带有动作的人模……以下是附到player上血条的代码……var h00 : Texture2D;var h10 : Texture2D;var h20 : Texture2D;var h30 : Texture2D;var h40 : Texture2D;var h50 : Texture2D;var h60 : Texture2D;var h70 : Texture2D;var h80 : Texture2D;var h90 : Texture2D;var h100 : Texture2D;var h110 : Texture2D;var h120 : Texture2D;var h130 : Texture2D;var h140 : Texture2D;static var HEALTH = 140;function Update(){&& &var g_Health = gameObject.Find(&g_Health&);&& &&& &if(HEALTH & 130)&& &{&& & & &g_Health.guiTexture.texture = h140;&& & & &&& &}&& &else if (HEALTH & 120)&& &{&& & & &g_Health.guiTexture.texture = h130;&& & & & & & & &&& &}&& &else if (HEALTH & 110)&& &{&& & & &g_Health.guiTexture.texture = h120;&& & & & & & & &&& &}&& &else if (HEALTH & 100)&& &{&& & & &g_Health.guiTexture.texture = h110;&& & & & & & & &&& &}&& &else if (HEALTH & 90)&& &{&& & & &g_Health.guiTexture.texture = h100;&& & & & & & & &&& &}&& &else if (HEALTH & 80)&& &{&& & & &g_Health.guiTexture.texture = h90;&& & & & & & & &&& &}&& &else if (HEALTH & 70)&& &{&& & & &g_Health.guiTexture.texture = h80;&& & & & & & & &&& &}&& &else if (HEALTH & 60)&& &{&& & & &g_Health.guiTexture.texture = h70;&& & & & & & & &&& &}&& &else if (HEALTH & 50)&& &{&& & & &g_Health.guiTexture.texture = h60;&& & & & & & & &&& &}&& &else if (HEALTH & 40)&& &{&& & & &g_Health.guiTexture.texture = h50;&& & & & & & & &&& &}&& &else if (HEALTH & 30)&& &{&& & & &g_Health.guiTexture.texture = h40;&& & & & & & & &&& &}&& &else if (HEALTH & 20)&& &{&& & & &g_Health.guiTexture.texture = h30;&& & & & & & & &&& &}&& &else if (HEALTH & 10)&& &{&& & & &g_Health.guiTexture.texture = h20;&& & & & & & & &&& &}&& &else if (HEALTH & 5)&& &{&& & & &g_Health.guiTexture.texture = h10;&& & & & & &&& &} & &&& &else if (HEALTH &= 0)&& &{&& & & &g_Health.guiTexture.texture = h00;&& & & & & & & &&& &}}InvokeRepeating(&subtract&, 2, 3);function subtract(){HEALTH -= 1;}帮忙看看~
:你是不是应该还有个开枪的脚本? 我大概看了下这脚本,它判断了目标是否存在, 是否在射程中,与枪的角度. 貌似没有地方在判断是否开枪.  ( 15:48) 我想做的大概意思就是player进入范围内受到攻击就会减血,没有开枪,就是一个导入的带有动作的人模……以下是附到player上血条的代码……
:我想做的大概意思就是player进入范围内受到攻击就会减血,没有开枪,就是一个导入的带有动作的人模……以下是附到player上血条的代码…… ( 18:59) 美女,你发的第一个脚本没问题, 第二个脚本才有问题. InvokeRepeating(&subtract&, 2, 3);//这个意思是2秒后, 每隔3秒调用一次subtractfunction subtract(){HEALTH -= 1; & &// 减1滴血}你为什么要每隔3秒减1滴血呢?
标题写的不要不打的时候也减血,然后帖子里又说进入范围内受到攻击就会减血.那么,攻击脚本在哪儿?
:美女,你发的第一个脚本没问题, 第二个脚本才有问题. InvokeRepeating(&subtract&, 2, 3);//这个意思是2秒后, 每隔3秒调用一次subtract....... ( 09:18) 是……第二个是类似计时的脚本,,就按照我的想法要怎么改这两个脚本呢~~帮忙看看哟,谢谢~~~
具体情况看不太懂,要实现你的想要的,首先要理清你自己的思路。&按照你说的,第一步是 范围判断,第二步是 扣血。&两步骤的方法都实现后,那么连起来,就是,进入范围,扣血,退出范围,停止扣血。&如你所说,停止扣血没有实现。&需要在你扣血的脚本增加一个变量,或者其他,终止执行扣血的方法即可。=============================另外,代码不用留那么多没用的空行!怎么理解当前脚本对象呢?
小白问个比较低级的问题,怎么理解脚本对象呢?脚本对象到底是挂着这个脚本的物体,还是这个脚本本身?我看应该是指的这个脚本本身,因为当我DESTROY(THIS)的时候销毁的是这个脚本,但是当我理解THIS.TRANSFORM的时候我又理解成这个物体的属性,THIS代表物体。不知道哪样理解正确,请各位指点!
已有帐号?
无法登录?
社交帐号登录(转)unity3d中脚本生命周期(MonoBehaviour lifecycle)
自:http://blog.csdn.net/qitian67/article/details/
最近在做一个小示例,发现类继承于MonoBehaviour的类,有很多个方法,于是乎必然要问出一个问题:这么多个方法,执行先后顺序是如何的呢?内部是如何进行管理的呢?于是在网上找了许多资料,发现了Richard Fine在2012年就已经发布了一篇文章,而且讲得算是相当深入,并且很有道理的,这里加上我的一些尝试与思考,分享给大家。
先贴上图,大家有个直观认识:
接下来,做出一下讲解:最先执行的方法是Awake,这是生命周期的开始,用于进行激活时的初始化代码,一般可以在这个地方将当前脚本禁用:this.enable=false,如果这样做了,则会直接跳转到OnDisable方法执行一次,然后其它的任何方法,都将不再被执行。
如果当前脚本处于可用状态,则正常的执行顺序是继续向下执行OnEnable,当然我们可以在另外一个脚本中实现这个脚本组件的启动:this.enab=
再向下执行,会进行一个判断,如果Start方法还没有被执行,则会被执行一次,如果已经被执行了,则不会再被执行。这是个什么意思呢?我们可以在某个脚本中将组件禁用this.enable=false,再启用时会转到OnEnable处执行,这时继续向下走,发现Start执行过了,将不再被执行。比如说:第一次启用时,将怪物的初始位置定在了(0,0,0)点,然后怪物可能会发生了位置的变换,后来被禁用了,再次启用时,不会让怪物又回到初始的(0,0,0)位置。
继续向后执行,就是Update了,然后是FixUpdate,再然后是LateUpdate,如果后面写了Reset,则会又回到Update,在这4个事件间可以进行循环流动。
再向后执行,就进入了渲染模块(Rendering),非常重要的一个方法就是OnGUI,用于绘制图形界面。当然,如果你使用了NGUI,这个生命周期的事情你就不用考虑了。
再向后,就是卸载模块(TearDown),这里主要有两个方法OnDisable与OnDestroy。当被禁用(enable=false)时,会执行OnDisable方法,但是这个时候,脚本并不会被销毁,在这个状态下,可以重新回到OnEnable状态(enable=true)。当手动销毁或附属的游戏对象被销毁时,OnDestroy才会被执行,当前脚本的生命周期结束。
特别要强调的是:这里虽然可以使用C#来写代码,但是这个类构造对象的生命周期,与MonoBehaviour的生命周期,是完全不同的。
可以通过如下示例:对脚本进行验证(两个脚本添加到同一个游戏对象上):
脚本1Monster1:
& & void OnBecameInvisible()& & {& & & & Debug.Log("invisible");& & & & MonsterController mc1 = this.gameObject.GetComponent&MonsterController&();& & & & mc1.enabled =& & }& & void OnBecameVisible()& & {& & & & Debug.Log("visible");& & & & MonsterController mc1 = this.gameObject.GetComponent&MonsterController&();& & & & mc1.enabled =& & }
脚本2MonsterController:
& & void Awake()& & {& & & & Debug.Log("awake");& & & & this.enabled =& & }& & void OnEnable()& & {& & & & Debug.Log("enable");& & & & this.enabled =& & }& & void Start()& & {& & & & Debug.Log("start");& & & & //this.gameObject.SetActive(false);& & }& & void Update()& & {& & & & Debug.Log("update");& & }& & void OnGUI()& & {& & & & Debug.Log("gui");& & }& & void OnDisable()& & {& & & & Debug.Log("disable");& & }& & void OnDestroy()& & {& & & & Debug.Log("destroy");& & }
如果您觉得有不对之处,欢迎指正,为了技术进步,我们一起努力。
Richard Fine的文章地址:
补充官网的信息:
事件函数的执行顺序
Unity 脚本中有许多按预设顺序以脚本身份运行的事件函数。其执行顺序如下:
加载第一个场景
启动场景时调用这些函数(为场景中的每个对象调用一次)。
Awake:&始终在调用任何 Start 函数之前和实例化预设之后调用此函数。(如果游戏对象 (GameObject) 在启动期间处于非活动状态,则直到其处于活动状态时或调用添加至其本身的任何脚本中的函数时,再调用 Awake 函数。)红字部分是图中没有提到的,特别需要注意!!!绿色的部分通关测试是不正确的
OnEnable:&(仅当对象 (Object) 处于活动状态时调用此函数):程序会在启用该对象后立即调用此函数。上述现象会在创建了实例化的 MonoBehaviour 后发生,例如加载了级别或对含脚本组件的游戏对象 (GameObject) 进行实例化后。
第一帧更新之前
Start:&只要启用脚本实例,即可在更新第一帧之前调用 Start 函数。
OnApplicationPause:&程序检测到暂停时,会在帧的结尾处调用此函数,这在常规帧更新期间很有效。调用&OnApplicationPause后,程序将运行另一帧来显示提示暂停状态的图形。
有几个不同的事件有助于追踪游戏逻辑与交互、动画、相机位置等内容。常用的方法是运行Update()&函数中的大部分任务,但也可使用其他函数。.
FixedUpdate:&通常,FixedUpdate()&的调用频率高于&Update()。如果帧速率较低,则可在一帧中多次调用此函数,如果帧速率较高,则可能完全无法在帧间调用此函数。程序调用&FixedUpdate()&后将立即执行所有物理计算和更新。在&FixedUpdate()&中应用移动计算时,无需将您的值与&Time.deltaTime&相乘。这是因为,程序是在可靠的计时器上调用FixedUpdate(),与帧速率无关。
Update:&在每帧上调用一次&Update()&函数。它是用于帧更新的主要 workhorse 函数。
LateUpdate:&完成&Update()&调用后,在每帧上调用&LateUpdate()。Update()&中执行的所有计算都将在&LateUpdate()&开始之前结束。LateUpdate()&的常规使用记录由第三人称相机跟踪。如果在&Update()&中移动和旋转角色,则可在&LateUpdate()&中计算所有相机移动和旋转。这将确保在相机跟踪其位置之前完整移动该角色。
OnPreCull:&在相机剔除场景之前调用此函数。相机可见的对象取决于剔除。OnPreCull 函数调用发生在剔除之前。
OnBecameVisible/OnBecameInvisible:&在对象对于相机可见/不可见时调用此函数。
OnWillRenderObject:&如果对象可见,则为每个相机调用一次此函数。
OnPreRender:&在相机开始渲染场景之前调用此函数。
OnRenderObject:&在完成所有常规场景渲染后调用此函数。此时,可使用 GL 类或 Graphics.DrawMeshNow 绘制自定义几何图形。
OnPostRender:&在相机完成场景渲染后调用此函数。
OnRenderImage(仅限专业版):&在完成场景渲染后调用此函数,以便对屏幕图像进行后处理。
OnGUI:&在每帧上多次调用此函数,以响应 GUI 事件。程序首先将处理 Layout 和 Repaint 事件,然后再处理每个输入事件的 Layout 和 keyboard/鼠标事件。
OnDrawGizmos&用于在场景视图中绘制小图示 (Gizmos),以实现可视化目的。
正常的协同程序更新是在返回 Update 函数之后运行。协同程序是可自行停止运行 (yield),直到给定的 YieldInstruction 结束再继续运行的函数。 协同程序 (Coroutines) 的不同用途:
&在下一帧上调用所有 Update 函数后,协同程序将继续运行。
yield WaitForSeconds(2);&在指定的时间延迟之后,为此帧调用所有 Update 函数之后继续运行
yield WaitForFixedUpdate();&在所有脚本上调用所有 FixedUpdate 后继续运行
yield WWW&完成 WWW 下载后继续运行。
yield StartCoroutine(MyFunc);&连接协同程序,并等待 MyFunc coroutine 首先结束。
对象 (Object) 被销毁时
OnDestroy:&完成所有帧更新后,在当前对象的最后一帧上调用此函数(可能为响应 Object.Destroy 或在关闭场景时销毁此对象)。
程序将在场景的所有活动对象上调用这些函数:
OnApplicationQuit:&在退出应用程序之前,程序会在所有游戏对象上调用此函数。在编辑器中,用户停止播放模式时,程序将调用此函数。在网页播放器中,此函数会在网页视图关闭时调用。
OnDisable:&此函数会在行为被禁用或不活动时调用。
综上所述,任何给定脚本的执行顺序为:
调用所有 Awake
调用所有 Start
同时进行(朝向可变增量时间)
所有 FixedUpdate 函数
OnEnter/Exit/Stay 触发函数
OnEnter/Exit/Stay 碰撞函数
刚体插值应用 transform.position 和旋转
OnMouseDown/OnMouseUp 等事件
所有 Update 函数
将动画优化为高级、混合并应用动画,以进行变换
所有 LateUpdate 函数
协同程序在所有 Update 函数结束后运行。
> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!
原文链接:http://blog.csdn.net/qitian67/article/details/ 最近在做一个小示例,发现类继承于MonoBehaviour的类,有很多个方法,于是乎必然要问出一个问题:这么多个方法,执行先后顺序是如何的呢?内部是如何进行管理的呢?于是在网上找了许多资料,发现了Richard Fine在2012年就已经发 ...
支持原文,原文请戳: Unity3D中脚本的执行顺序和编译顺序 在Unity中可以同时创建很多脚本,并且可以分别绑定到不同的游戏对象上,它们各自都在自己的生命周期中运行.与脚本有关的也就是编译和执行啦,本文就来研究一下Unity中脚本的编译和执行顺序的问题. 事件函数的执行顺序 先说一下执行顺序吧. 官方给出的脚本中事件函数的执行顺序如下图:
我们可以做一 ...
总的来说unity的脚本生命周期分几个部分:编辑→初始化→游戏逻辑→渲染→GUI→Teardown首先是Reset,顾名思义:重置.在什么情况下调用呢?1.用户第一次添加组件时.2用户点击见组件面板上的Reset按钮时.接下来的几个比较重要:Awake():当脚本实例被载入时调用,一般进行一些初始化赋值.Start():Start只在Update第一次 ...
Android 进程生命周期 Process Lifecycle
进程的生命周期 Android系统会尽力保持应用的进程,但是有时为了给新的进程和更重要的进程回收一些内存空间,它会移除一些旧的进程. 为了决定哪些进程留下,哪些进程被杀死,系统根据在进程中在运行的组件及组件的状态,为每一个进程分配了一个优先级等级. 优先级最低的进程首先被杀死. 这个进 ...
在传统的Java应用中,Bean的生命周期非常简单.Java的关键词new用来实例化Bean(或许他是非序列化的).这样就够用了.相反,Bean 的生命周期在Spring容器中更加细致.理解Spring Bean的生命周期非常重要,因为你或许要利用Spring提供的机会来订制Bean的创建过程.
Spring bean的生命周期如下:
重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/ 生命周期分析 在前面文章中我们运行了第一个 Cocos2d-x 游戏,同时也介绍了控制游戏生命周期的 AppDelegate 文件. 下面我们将结合一些游戏调试常用的技巧以及VS工具调试的方法来分析
配置在Spring中的Bean在Spring容器中从加载到销毁会经历那些过程呢?如果实现一些特定的Spring接口,这些特定接口的方法会在什么时候被调用呢?本文简单介绍一下这些过程. Bean在Spring容器中的生命周期如下图所示: 1,调用Bean的构造函数(或者工厂方法)实例化Bean. 2,对Bean的成员变量赋值. 3,如果Bean实现了BeanN ...
IOS中AppDelegate中的生命周期事件的调用条件 1 //当应用程序将要进入非活动状态执行,在此期间,应用程序不接受消息或事件,比如来电 2 - (void)applicationWillResignActive:(UIApplication *)application 3 { 4 NSLog(@&应用程序将要进入非活动状态,即将进入后台& ...自:http://blog.csdn.net/qitian67/article/details/
最近在做一个小示例,发现类继承于MonoBehaviour的类,有很多个方法,于是乎必然要问出一个问题:这么多个方法,执行先后顺序是如何的呢?内部是如何进行管理的呢?于是在网上找了许多资料,发现了Richard Fine在2012年就已经发布了一篇文章,而且讲得算是相当深入,并且很有道理的,这里加上我的一些尝试与思考,分享给大家。
先贴上图,大家有个直观认识:
接下来,做出一下讲解:最先执行的方法是Awake,这是生命周期的开始,用于进行激活时的初始化代码,一般可以在这个地方将当前脚本禁用:this.enable=false,如果这样做了,则会直接跳转到OnDisable方法执行一次,然后其它的任何方法,都将不再被执行。
如果当前脚本处于可用状态,则正常的执行顺序是继续向下执行OnEnable,当然我们可以在另外一个脚本中实现这个脚本组件的启动:this.enab=
再向下执行,会进行一个判断,如果Start方法还没有被执行,则会被执行一次,如果已经被执行了,则不会再被执行。这是个什么意思呢?我们可以在某个脚本中将组件禁用this.enable=false,再启用时会转到OnEnable处执行,这时继续向下走,发现Start执行过了,将不再被执行。比如说:第一次启用时,将怪物的初始位置定在了(0,0,0)点,然后怪物可能会发生了位置的变换,后来被禁用了,再次启用时,不会让怪物又回到初始的(0,0,0)位置。
继续向后执行,就是Update了,然后是FixUpdate,再然后是LateUpdate,如果后面写了Reset,则会又回到Update,在这4个事件间可以进行循环流动。
再向后执行,就进入了渲染模块(Rendering),非常重要的一个方法就是OnGUI,用于绘制图形界面。当然,如果你使用了NGUI,这个生命周期的事情你就不用考虑了。
再向后,就是卸载模块(TearDown),这里主要有两个方法OnDisable与OnDestroy。当被禁用(enable=false)时,会执行OnDisable方法,但是这个时候,脚本并不会被销毁,在这个状态下,可以重新回到OnEnable状态(enable=true)。当手动销毁或附属的游戏对象被销毁时,OnDestroy才会被执行,当前脚本的生命周期结束。
特别要强调的是:这里虽然可以使用C#来写代码,但是这个类构造对象的生命周期,与MonoBehaviour的生命周期,是完全不同的。
可以通过如下示例:对脚本进行验证(两个脚本添加到同一个游戏对象上):
脚本1Monster1:
& & void OnBecameInvisible()& & {& & & & Debug.Log("invisible");& & & & MonsterController mc1 = this.gameObject.GetComponent&MonsterController&();& & & & mc1.enabled =& & }& & void OnBecameVisible()& & {& & & & Debug.Log("visible");& & & & MonsterController mc1 = this.gameObject.GetComponent&MonsterController&();& & & & mc1.enabled =& & }
脚本2MonsterController:
& & void Awake()& & {& & & & Debug.Log("awake");& & & & this.enabled =& & }& & void OnEnable()& & {& & & & Debug.Log("enable");& & & & this.enabled =& & }& & void Start()& & {& & & & Debug.Log("start");& & & & //this.gameObject.SetActive(false);& & }& & void Update()& & {& & & & Debug.Log("update");& & }& & void OnGUI()& & {& & & & Debug.Log("gui");& & }& & void OnDisable()& & {& & & & Debug.Log("disable");& & }& & void OnDestroy()& & {& & & & Debug.Log("destroy");& & }
如果您觉得有不对之处,欢迎指正,为了技术进步,我们一起努力。
Richard Fine的文章地址:
补充官网的信息:
事件函数的执行顺序
Unity 脚本中有许多按预设顺序以脚本身份运行的事件函数。其执行顺序如下:
加载第一个场景
启动场景时调用这些函数(为场景中的每个对象调用一次)。
Awake:&始终在调用任何 Start 函数之前和实例化预设之后调用此函数。(如果游戏对象 (GameObject) 在启动期间处于非活动状态,则直到其处于活动状态时或调用添加至其本身的任何脚本中的函数时,再调用 Awake 函数。)红字部分是图中没有提到的,特别需要注意!!!绿色的部分通关测试是不正确的
OnEnable:&(仅当对象 (Object) 处于活动状态时调用此函数):程序会在启用该对象后立即调用此函数。上述现象会在创建了实例化的 MonoBehaviour 后发生,例如加载了级别或对含脚本组件的游戏对象 (GameObject) 进行实例化后。
第一帧更新之前
Start:&只要启用脚本实例,即可在更新第一帧之前调用 Start 函数。
OnApplicationPause:&程序检测到暂停时,会在帧的结尾处调用此函数,这在常规帧更新期间很有效。调用&OnApplicationPause后,程序将运行另一帧来显示提示暂停状态的图形。
有几个不同的事件有助于追踪游戏逻辑与交互、动画、相机位置等内容。常用的方法是运行Update()&函数中的大部分任务,但也可使用其他函数。.
FixedUpdate:&通常,FixedUpdate()&的调用频率高于&Update()。如果帧速率较低,则可在一帧中多次调用此函数,如果帧速率较高,则可能完全无法在帧间调用此函数。程序调用&FixedUpdate()&后将立即执行所有物理计算和更新。在&FixedUpdate()&中应用移动计算时,无需将您的值与&Time.deltaTime&相乘。这是因为,程序是在可靠的计时器上调用FixedUpdate(),与帧速率无关。
Update:&在每帧上调用一次&Update()&函数。它是用于帧更新的主要 workhorse 函数。
LateUpdate:&完成&Update()&调用后,在每帧上调用&LateUpdate()。Update()&中执行的所有计算都将在&LateUpdate()&开始之前结束。LateUpdate()&的常规使用记录由第三人称相机跟踪。如果在&Update()&中移动和旋转角色,则可在&LateUpdate()&中计算所有相机移动和旋转。这将确保在相机跟踪其位置之前完整移动该角色。
OnPreCull:&在相机剔除场景之前调用此函数。相机可见的对象取决于剔除。OnPreCull 函数调用发生在剔除之前。
OnBecameVisible/OnBecameInvisible:&在对象对于相机可见/不可见时调用此函数。
OnWillRenderObject:&如果对象可见,则为每个相机调用一次此函数。
OnPreRender:&在相机开始渲染场景之前调用此函数。
OnRenderObject:&在完成所有常规场景渲染后调用此函数。此时,可使用 GL 类或 Graphics.DrawMeshNow 绘制自定义几何图形。
OnPostRender:&在相机完成场景渲染后调用此函数。
OnRenderImage(仅限专业版):&在完成场景渲染后调用此函数,以便对屏幕图像进行后处理。
OnGUI:&在每帧上多次调用此函数,以响应 GUI 事件。程序首先将处理 Layout 和 Repaint 事件,然后再处理每个输入事件的 Layout 和 keyboard/鼠标事件。
OnDrawGizmos&用于在场景视图中绘制小图示 (Gizmos),以实现可视化目的。
正常的协同程序更新是在返回 Update 函数之后运行。协同程序是可自行停止运行 (yield),直到给定的 YieldInstruction 结束再继续运行的函数。 协同程序 (Coroutines) 的不同用途:
&在下一帧上调用所有 Update 函数后,协同程序将继续运行。
yield WaitForSeconds(2);&在指定的时间延迟之后,为此帧调用所有 Update 函数之后继续运行
yield WaitForFixedUpdate();&在所有脚本上调用所有 FixedUpdate 后继续运行
yield WWW&完成 WWW 下载后继续运行。
yield StartCoroutine(MyFunc);&连接协同程序,并等待 MyFunc coroutine 首先结束。
对象 (Object) 被销毁时
OnDestroy:&完成所有帧更新后,在当前对象的最后一帧上调用此函数(可能为响应 Object.Destroy 或在关闭场景时销毁此对象)。
程序将在场景的所有活动对象上调用这些函数:
OnApplicationQuit:&在退出应用程序之前,程序会在所有游戏对象上调用此函数。在编辑器中,用户停止播放模式时,程序将调用此函数。在网页播放器中,此函数会在网页视图关闭时调用。
OnDisable:&此函数会在行为被禁用或不活动时调用。
综上所述,任何给定脚本的执行顺序为:
调用所有 Awake
调用所有 Start
同时进行(朝向可变增量时间)
所有 FixedUpdate 函数
OnEnter/Exit/Stay 触发函数
OnEnter/Exit/Stay 碰撞函数
刚体插值应用 transform.position 和旋转
OnMouseDown/OnMouseUp 等事件
所有 Update 函数
将动画优化为高级、混合并应用动画,以进行变换
所有 LateUpdate 函数
协同程序在所有 Update 函数结束后运行。
阅读(...) 评论()

我要回帖

更多关于 unity切换场景不销毁 的文章

 

随机推荐