Unity编程笔记(一)

以下测试内容均使用Unity 5.6.2f1版本,WIN7操作系统
脚本执行顺序
  • 官方给的顺序是Awake()->OnEnable()->Start()
  • 实际这只适用在单个脚本中。当在多个脚本中时,Awake()和OnEnable()的执行顺序是不一定的,比如我有脚本1和脚本2,那执行顺序就是这样的,1_Awake()->1_OnEnable()->2_Awake()->2_OnEnable()。他会先执行完脚本1的Awake()和OnEnable(),再执行脚本2的Awake()和OnEnable()。

OnEnable()事件函数的执行时机
  • OnEnable()事件函数的执行时机也是很有意思。
  • 以前我以为————如果我在Update()函数里激活了某个游戏物体的脚本,那么这个游戏物体会在Update()结束以后,下一帧开始的时候,执行它的OnEnable()事件函数。
  • 然而事实不是这样的,事实是,在激活游戏物体的时候,也就是在gameObject.setActive(True)那一行结束的时候,程序就会跳入被激活游戏物体的OnEnable()事件函数,等执行完OnEnable()以后,在跳回gameObject.setActive(True)的下一行。
  • Awake在游戏物体第一次激活的时候执行(即便脚本不激活Awake也会执行)
  • OnEnable在脚本每次激活的时候执行
  • Start在脚本第一次激活的时候执行
  • 为了弄清楚这三个事件函数的执行时机,做测试如下:场景中放置一个cube和一个sphere,cube上挂脚本“Cube”,sphere上挂脚本“Sphere”,然后将cube取消激活,cube上的脚本也取消激活,运行场景。
public class Cube : MonoBehaviour {

    private void Awake()
    {
        Debug.Log("Cube Awake!");
    }

    private void OnEnable()
    {
        Debug.Log("Cube OnEnable!");
    }

    void Start ()
    {
        Debug.Log("Script Start!");
    }
	
}
public class Sphere : MonoBehaviour {

    public GameObject cube;

    void Start ()
    {
        cube.SetActive(true);
        Debug.Log("Sphere Set Cube Active!");
        cube.GetComponent<ScriptOrderTest>().enabled = true;
        Debug.Log("Sphere Set Cube Script Active!");
    }
}
  • 输出结果如下:
  • 1、Cube Awake!
  • 2、Sphere Set Cube Active!
  • 3、Cube OnEnable!
  • 4、Sphere Set Cube Script Active!
  • 5、Script Start!

Unity的EventSystem事件顺序
  • 试验品为toggle
  • 大家都知道点击toggle会出现对号,那么OnPointDown(),OnPointUp(),OnPointClick()执行的时间,和toggle对号出现的时间先后顺序是怎样的呢?
  • 在有toggle组件的游戏物体上挂一个脚本,并且实现OnPointDown(),OnPointUp(),OnPointClick()方法,在这些方法内Debug输出各自的方法名称。当点击Toggle的时候就会发现,他们的执行顺序是这样的:
  • OnPointDown()->OnPointUp()->Toggle.isOn->OnPointClick()

Unity事件函数与脚本禁用
  • 当一个脚本被禁用的时候,脚本内众多的unity事件函数中,只有start,onenable,ondisable,onGUI,update三兄弟,这7个会被禁用掉,其他的诸如awake,onTrigger等等,即使脚本被禁用了,他们还是一样会被触发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值