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 }

    结果:

      

  • 相关阅读:
    RCTF 2019 web
    php花式读取文件
    PHP审计基础
    《笼中鸟——精神病人的生存现状》观后的一点思考
    python一些小trick
    Appium+Python入门学习总结
    解决windows下 Python中 matplotlib 做图中文不显示的问题
    py3.5 telnet的实例(在远程机器上批量创建用户)
    关于pycharm的一个imoprt的随笔
    LookupError: unknown encoding: idna 的处理方法
  • 原文地址:https://www.cnblogs.com/leiGameDesigner/p/9146264.html
Copyright © 2011-2022 走看看