Unity的生命周期函数

总结一下unity中常用的生命周期函数:

void Reset()

Reset是在用户点击检视面板的Reset按钮或者首次添加该组件时被调用。此函数只在编辑模式下被调用。Reset最常用于在检视面板中给定一个最常用的默认值。

public GameObject target;

void Reset() {

target = GameObject.FindWithTag("Player");

}

void  Awake ()

当一个脚本实例被载入时Awake被调用。

Awake用于在游戏开始之前初始化变量或游戏状态。

在脚本整个生命周期内它仅被调用一次Awake在所有对象被初始化之后调用,所以可以安全的与其他对象对话或用诸如 GameObject.FindWithTag 这样的函数搜索它们。

每个游戏物体上的Awke以随机的顺序被调用。

Awake总是在Start之前被调用。

Awake像构造函数一样只被调用一次。

void OnEnable()

当对象变为可用或激活状态时此函数被调用。

OnEnable不能用于协同程序。

void OnEnable() {

Debug.Log("script was enabled");

}

void Start(){}

Start仅在Update函数第一次被调用前调用。

Start在behaviour的生命周期中只被调用一次。

它和Awake的不同是Start只在脚本实例被启用时调用。

可以按需调整延迟初始化代码。

Awake总是在Start之前执行。

允许你协调初始化顺序。

初始化目标变量, 目标是私有的并且不能在检视面板中编辑

using UnityEngine;

using System.Collections;

public class StartTest : MonoBehaviour

{

private GameObject target;

void Start()

{

target = GameObject.FindWithTag("Player");

}

}

void FixedUpdate(){}

固定更新void FixedUpdate ()处理基于物理游戏行为一般用该方法,处理Rigidbody时,需要用FixedUpdate代替Update。当MonoBehaviour启用时,其 FixedUpdate 在每一帧被调用。

例如:给刚体加一个作用力时,必须应用作用力在FixedUpdate里的固定帧,而不是Update中的帧。(两者帧长不同)每帧应用一个向上的力到刚体上

void FixedUpdate()

{

rigidbody.AddForce(Vector3.up);

}

void OnTriggerXXX(Collider other)

进入触发器void OnTriggerEnter (Collider other) 当Collider(碰撞体)进入trigger(触发器)时调用OnTriggerEnter。

逗留触发器void OnTriggerStay (Collider other) 当碰撞体接触触发器时,OnTriggerStay将在每一帧被调用。

退出触发器void OnTriggerExit  (Collider other)当Collider(碰撞体)停止触发trigger(触发器)时调用OnTriggerExit。

void  OnCollisionXXX (Collision collisionInfo)

进入碰撞 void  OnCollisionEnter (Collision collisionInfo),当此collider/rigidbody触发另一个rigidbody/collider时,OnCollisionEnter将会在开始碰撞时调用。

逗留碰撞 void  OnCollisionStay (Collision collisionInfo),当此collider/rigidbody触发另一个rigidbody/collider时,OnCollisionStay将会在每一帧被调用。

退出碰撞 void  OnCollisionExit (Collision collisionInfo),当此collider/rigidbody停止触发另一个rigidbody/collider时,OnCollisionExit将被调用。

Collision包含接触点,碰撞速度等细节。如果在函数中不使用碰撞信息,省略collisionInfo参数以避免不必要的运算.

void OnMouseXXX()

void OnMouseUp ():当用户释放鼠标按钮时调用OnMouseUp。OnMouseUp只调用在按下的同一物体上。此函数在iPhone上无效。

void OnMouseDown ():当鼠标在Collider(碰撞体)上点击时调OnMouseDown。

void OnMouseEnter ():当鼠标进入到Collider(碰撞体)中时调用OnMouseEnter。

void OnMouseExit ():当鼠标移出Collider(碰撞体)上时调用OnMouseExit。

void OnMouseOver ()当鼠标悬浮在Collider(碰撞体)上时调用 OnMouseOver 。

using UnityEngine;

using System.Collections;

public class OnMouseXXX : MonoBehaviour {

void OnMouseEnter()

{

Debug.Log("当鼠标进入");

}

void OnMouseDown()

{

Debug.Log("当鼠标按下");

}

void OnMouseDrag()

{

Debug.Log("当鼠标拖动");

}

void OnMouseExit()

{

Debug.Log("当鼠标推出");

}

void OnMouseOver()

{

Debug.Log("当鼠标经过");

}

}

void Update ()

当MonoBehaviour启用时,其Update在每一帧被调用。Update是实现各种游戏行为最常用的函数。

using UnityEngine;

using System.Collections;

public class UpdateTest : MonoBehaviour

{

void Update() {

transform.Translate(0, 0, Time.deltaTime * 1);

}

}

void LateUpdate ()

当Behaviour启用时,其LateUpdate在每一帧被调用。

LateUpdate是在所有Update函数调用后被调用。

这可用于调整脚本执行顺序。一般用来处理摄像机位置等的

例如:当物体在Update里移动时,跟随物体的相机可以在LateUpdate里实现。

void OnGUI()

void OnGUI()

{

if (GUI.Button(new Rect(10, 10, 150, 100), "I am a button"))

print("You clicked the button!");

}

void OnDisable ()

当对象变为不可用或非激活状态时此函数被调用。当物体被销毁时它将被调用,并且可用于任意清理代码。脚本被卸载时,OnDisable将被调用,OnEnable在脚本被载入后调用。

void OnDestroy ()

当MonoBehaviour将被销毁时,这个函数被调用。OnDestroy只会在预先已经被激活的游戏物体上被调用

---------------------

原文地址:https://www.cnblogs.com/allyh/p/10987120.html

时间: 2024-10-13 21:32:23

Unity的生命周期函数的相关文章

Unity脚本生命周期与执行顺序

文章目录 脚本生命周期 MonoBehavior生命周期图 脚本执行顺序 自定义执行顺序 在Unity中,脚本可以理解为附加在游戏对象上的用于定义游戏对象行为的指令代码.必须绑定在游戏对象上才能开始它的生命周期.游戏对象可以理解为能容纳各种组件的容器,游戏对象的所有组件一起决定了这个对象的行为和游戏中的表现. 脚本生命周期 Unity脚本中的常见必然事件如下表所示 名称 触发时机 用途 Awake 脚本实例被创建时调用 用于游戏对象的初始化,注意Awake的执行早于所有脚本的Start函数 On

ionic中的生命周期函数

//ionic中的生命周期函数 onPageLoaded(){ //page初始化时 console.log("page 1 : page loaded"); } //在这里可以做页面初始化的一些事情 onPageWillEnter(){ //page即将进入时 console.log("page 1 : page will enter"); } onPageDidEnter(){ //page进入后 console.log("page 1 : page

为什么Activity生命周期函数是运行在UI线程

这是我自己给自己提的问题,或者说是Activity的生命周期函数是怎样运行在主线程的?下面简单分析一下,讨论的问题其实远远不止于这个问题.会涉及到进程的启动,Binder的线程池,ActivityThread中的消息处理. 进程开启 我们最开始接触Android的时候,都知道主线程和非主线程区别,我们可以用Handler来将代码运行在主线程中.而主线程是如何开启的呢?在ActivityThread当中有个公有静态main方法,每次ActivityManagerService请求Zygote进程f

Cocos2d-x场景生命周期函数介绍

层(Layer)的生命周期函数有例如以下: init().初始化层调用. onEnter().进入层时候调用. onEnterTransitionDidFinish().进入层并且过渡动画结束时候调用. onExit().退出层时候调用. onExitTransitionDidStart(). 退出层并且開始过渡动画时候调用. cleanup(). 层对象被清除时候调用. 提示  层(Layer)继承于节点(Node),这些生命周期函数根本上是从Node继承而来.其实全部Node对象(包含:场景

Fragment中生命周期函数的介绍

1)第一次启动:onCreate->onAttach->onCreate->onCreateView->onActivityCreated->onStart->onResume->onResume 2)按下返回键:onPause->onPause->onStop->onStop->onDestroyView->onDestroy->onDetach->onDestroy 恢复时:因为按下返回键直接销毁了,所以恢复的时候会从

Activity生命周期函数、onSaveInstanceState()和onRestoreInstanceState()的介绍

本文涉及了Activity中的 onSaveInstanceState() 和 onRestoreInstanceState()方法,需要注意的他们并不是生命周期方法.我放在这是为了整合起来讲解. 一.生命周期中的方法调用时机 本文转自:http://blog.csdn.net/android_tutor/article/details/5772285 1) 首次执行时执行:onCreate()->onStart()->onResume() 2) 部分可见(被对话框等遮挡)时执行:onPaus

从Android到IOS,IOS应用生命周期函数

由于对于自己的C基础还算满意,花了一个月断断续续的把OC看完了,最近在看一些IOS开发的知识.初次创建一个IOS项目,xCode会自动生成这些文件与目录 从头开始,应用首次执行会先从main函数开始执行. int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } 看到源码中

React 学习(四) ---- 生命周期函数

现在我们能修改状态,页面可以进行交互了,但是还有一种状态改变没有解决,那就是倒计时效果,时间一直在变化,组件状态也一直在改变,但我们什么都没有做,如果要实现这样的效果,需要怎么处理? 我们都知道,改变状态用的是setState,  上次讲的加减操作是在把它写到事件处理函数中来改变状态的,但现在没有什么事件供我们调用,因为我们没有做任何操作,它却一直在变化,现在要做的就是找一个机会或入口,来写setState 函数, 这个机会就是组件的生命周期函数. 生命周期也是来源于对我们对现实生活的思考, 对

Vue的生命周期函数

Vue的生命周期函数通常分为以下三类: ①实例创建时的生命周期函数:②实例执行时的生命周期的函数:③实例销毁时的生命周期的函数. 代码与注释详解: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-wi