02、基础函数(脚本生命周期)
1、 Awake()
脚本唤醒,系统执行的第一个方法,在脚本中仅执行一次。最好用来设置脚本之间的引用和初始化。
private GameObject target; void Awake()//初始化操作 { target = GameObject.FindWithTag("Player"); print("awake");//在控制台输出awake }
2、OnEnable()
void OnEnable()//每次激活脚本时调用。所以一般把协程放这里 { print("OnEnable"); }
3、Start()
Update()之前执行,但必须是脚本已被启用的情况下。在脚本中仅执行一次。(注:有Start函数的在Unity引擎界面前面的脚本组件才可以打钩)
void Start () //第一次调用Update之前调用一次,初始化操作 { print("Start"); }
如:一个敌人进入游戏场景,使用Awake()设置子弹数量,然后在Start()中启用敌人的射击功能,也就是脚本启用之后。注意Awake()和Start()只在脚本生命周期中调用一次。在启用脚本之前,我们可以先用Awake()进行初始化设置,这样就不需要在每个脚本中分别进行设置了
4、Update()
使用Update这个函数的脚本每一帧都会自动进行调用,大部分需要周期性改变的内容都放在这个函数里,非物理对象的移动、计时器、输入检测、通常都放在Update()中。注意Update()并不根据正常的时间轴调用,如果某一帧花费的时间大于下一帧,那么每一帧调用的间隔将不同。
void Update () //每帧调用一次 { print("Update"); }
5、LateUpdate()
在Update()之后执行,同上,也是每一帧系统自动执行,仅顺序与Update()不同。
void LateUpdate()//Update之后调用 { print("LateUpdate"); }
6、FixedUpdate()
这个方法可以设定执行频率(Edit->Project Setting->time),如可设定0.5帧执行该方法。 他根据正常的时间轴调用,且每次调用的间隔是相同的。调用FixedUpdate()后,会进行需要的物理计算。比如有刚体的物理对象,需要放在FixedUpdate()中,而不是Update()中。FixedUpdate() 通常用于移动物理对象。
Rigidbody rb; void Start() { rb = GetComponent<Rigidbody>(); } void FixedUpdate() { rb.AddForce(Vector3.up * 10f); }