美文网首页
脚本和生命周期以及如何在代码中获取基本属性

脚本和生命周期以及如何在代码中获取基本属性

作者: _凉笙 | 来源:发表于2016-12-07 20:25 被阅读0次

    一、脚本的生命周期

    Awake() 脚本组件载入时(调用一次)
    Start() 第一个Update发生之前(调用一次)
    Update() 大部分游戏行为代码被执行的地方,除了物理代码
    FixedUpdate() 固定时间调用,常用于物理相关的计算,比如对RigidBody的操作
    LaterUpdate() 每帧Update调用之后
    OnGui() 绘制GUI时调用
    Reset() 组件重设为默认值时(只用于编辑状态)
    OnDisable() 当对象设置为不可用时
    OnDestroy() 组件销毁时调用


    image.png
    生命周期调用以下方法的执行顺序是如下
    void Awake()
    {
        Debug.Log("执行顺序Awake---1");
    }
    //判断一个游戏对象可用?
    void OnEnable()
    {
        Debug.Log("执行顺序OnEnable---2");
    }
    // Use this for initialization
    void Start()
    {
        Debug.Log("执行顺序Start---3");
    }
    //固定帧率调用,一般用于物理方面(例如刚体)
    void FixedUpdate()
    {
        Debug.Log("执行顺序FixedUpdate---3");
    }
    // Update is called once per frame
    void Update()
    {
        Debug.Log("执行顺序Update---4");
    }
    //在Update函数之后调用,频率跟UpDate一样。
    void LateUpdate()
    {
        Debug.Log("执行顺序LateUpdate---5");
    }
    //绘制UI控件的时候调用。例如加Button按钮控件,Lable标签控件等等
    void OnGUI()
    {
        Debug.Log("执行顺序OnGUI---6");
    }
    //当游戏对象不可用的时候调用(当禁止一个游戏对象运行的时候或者退出游戏的时候会调用方法)
    void OnDisable()
    {
        //Destroy(this.gameObject);//摧毁当前的游戏对象
        Debug.Log("执行顺序Disable---7");
    }
    //注意:OnEnable和OnDisable:当游戏进行时,一个游戏第一次启用的时候会执行Awake()、OnEnable()、Start()方法函数,
    //当游戏对象不可用的时候,会调用OnDisable()方法,再重新启用就不会执行Awake()、Start()方法函数了。
    
    生命周期表
    脚本的加载顺序

    脚本只有挂载在游戏物体上时,才会被启用。
    假设 我现在同一个物体上挂载了两个脚本,分别为Scripts1.cs 与
    Scripts2.cs,它们两个的Awake函数是同时进行的吗?如果不是,
    我该怎样调节它们的执行顺序?
    选择Edit<Project Settings < Scripts Execution Order
    红圈中为脚本名,红线代表时间,时间越大,执行顺序越靠后
    点击加号可以添加自定义脚本

    图1-1
    Update 详解
    FixedUpdate 固定频率更新
    可以在 Edit -> project settings -> Time -> Fixed Timestep 中设定该频率
    Update 渲染帧更新
    Update是受当前渲染的物体,更确切的说是三角形的数量影响,有时快有时慢,帧率会变化
    LateUpdate 延迟更新
    在每帧的所有Update函数执行完以后,才会执行此函数
    图1-2

    如何在代码中获取基本属性

    public  GameObject obj;
    // Use this for initialization
    void Start () {
        obj.SetActive(true);//让游戏对象显示或者隐藏
        obj.isStatic=true;//表示当前游戏对象是一个禁止对象
        obj.name = "hello";//在游戏运行时游戏对象名字的更改;
      Transform t2 = GetComponent<Transform>();
      print(t2.position.x);//输出Transform下position的x轴的值
    }
    // Update is called once per frame
    void Update () {
    
    }

    相关文章

      网友评论

          本文标题:脚本和生命周期以及如何在代码中获取基本属性

          本文链接:https://www.haomeiwen.com/subject/frarmttx.html