zoukankan      html  css  js  c++  java
  • Mono生命周期小实验

    今天在写代码的时候,遇到一个初始化顺序问题,于是做了一个实验,下面记录结果:

    情景:

      1.在 脚本A中实例化 一个预制体,该预制体挂有脚本B

      2.在 脚本A中,获取实例化物体 身上的 脚本B,并且设置 B中的变量

      问题:脚本B中的变量在哪个阶段被设置成功?

    答案:

      注意:实例化出的物体,无论身上的脚本B 是否 enable,都会首先调用 Awake()方法,这个Awake()调用,在A脚本的赋值操作之前。

      实际操作中,在脚本B中,需要在OnEnable()之后,才能获得 A脚本设置的值。

    代码:

      脚本B,挂载在预制体上:

     1 public class PlayerControllerTest : MonoBehaviour {
     2     public TestLife life;
     3     bool hasCallUpdate = false;
     4     private void Awake()
     5     {
     6         Debug.Log("执行Awake,  life 设置成功:"+(life!=null).ToString());
     7     }
     8 
     9     private void Start()
    10     {
    11         Debug.Log("执行Start,   life 设置成功:" + (life != null).ToString());
    12     }
    13 
    14     private void OnEnable()
    15     {
    16         Debug.Log("执行Enable, life 设置成功:"+(life != null).ToString());
    17     }
    18 
    19     private void Update()
    20     {
    21         if (!hasCallUpdate)
    22         {
    23             Debug.Log("执行Update");
    24             hasCallUpdate = true;
    25         }
    26     }
    27 }

      脚本A,挂载在主摄像机上: 

     1 public class TestLife : MonoBehaviour {
     2 
     3     PlayerControllerTest test;
     4     private void Awake()
     5     {
     6         var go = Resources.Load("Cube") as GameObject;
     7 
     8         var temp = Instantiate(go);
     9 
    10         var sp = temp.GetComponent<PlayerControllerTest>();
    11 
    12         test = sp;
    13 
    14         test.life = this;
    15       
    16     }
    17 }

    结果:

      

  • 相关阅读:
    文件复制
    linux 计划任务
    mysql查询权限的用户名密码
    mysql导入导出及复制
    windowslucene安装配置
    apache+php32位平台安装
    文件移动
    mysql查询权限的用户名密码
    取树状结构的某个值下的所有记录
    今天发生了个有趣的排序
  • 原文地址:https://www.cnblogs.com/leiGameDesigner/p/9146264.html
Copyright © 2011-2022 走看看