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

情景:

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

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

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

答案:

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

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

代码:

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

 public class PlayerControllerTest : MonoBehaviour {
public TestLife life;
bool hasCallUpdate = false;
private void Awake()
{
Debug.Log("执行Awake, life 设置成功:"+(life!=null).ToString());
} private void Start()
{
Debug.Log("执行Start, life 设置成功:" + (life != null).ToString());
} private void OnEnable()
{
Debug.Log("执行Enable, life 设置成功:"+(life != null).ToString());
} private void Update()
{
if (!hasCallUpdate)
{
Debug.Log("执行Update");
hasCallUpdate = true;
}
}
}

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

 public class TestLife : MonoBehaviour {

     PlayerControllerTest test;
private void Awake()
{
var go = Resources.Load("Cube") as GameObject; var temp = Instantiate(go); var sp = temp.GetComponent<PlayerControllerTest>(); test = sp; test.life = this; }
}

结果:

  

最新文章

  1. CRL快速开发框架系列教程九(导入/导出数据)
  2. LINQ 函数的实战演练测试
  3. Maven项目WEB-INF/views无法引入js,css静态文件解决方法
  4. HBase 实战(1)--HBase的数据导入方式
  5. spring mvc jsp运行不起来的问题
  6. 在android的spinner中,实现取VALUE值和TEXT值。 ZT
  7. oracle11g OEM无法连接到数据库实例解决办法
  8. maven常见问题归纳
  9. PhpStorm, XDebug, and DBGp Proxy
  10. ie F12开发工具出不来
  11. XML有哪些解析方式有何优缺点?xml有哪些解析技术?区别是什么?
  12. javascript将毫秒还原为可读时间格式
  13. poj 1007 纯水题 排序
  14. C#使用Socket实现一个socket服务器与多个socket客户端通信
  15. one-to-one 一对一映射关系(转 wq群)
  16. Hive和HBase区别
  17. python模块_hashlib详解
  18. 网络编程——socket(四十三)
  19. Struts1的基础知识
  20. Oracle 存储过程起步

热门文章

  1. 数据结构C语言实现----快速排序
  2. Python 教你自动发微博,每日一句英语
  3. 十多位全球技术专家,为你献上近十个小时的.Net微服务介绍
  4. C#LeetCode刷题之#824-山羊拉丁文​​​​​​​(Goat Latin)
  5. golang 中的struct理解
  6. JavaScript中的正则表达式详解
  7. 【算法•日更•第三十五期】FF算法优化:EK算法
  8. Ng-Matero V10 正式发布!
  9. Python默认参数的陷阱
  10. unity探索者之微信分享回调