Mono生命周期小实验
2024-10-09 14:37:04
今天在写代码的时候,遇到一个初始化顺序问题,于是做了一个实验,下面记录结果:
情景:
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; }
}
结果:
最新文章
- CRL快速开发框架系列教程九(导入/导出数据)
- LINQ 函数的实战演练测试
- Maven项目WEB-INF/views无法引入js,css静态文件解决方法
- HBase 实战(1)--HBase的数据导入方式
- spring mvc jsp运行不起来的问题
- 在android的spinner中,实现取VALUE值和TEXT值。 ZT
- oracle11g OEM无法连接到数据库实例解决办法
- maven常见问题归纳
- PhpStorm, XDebug, and DBGp Proxy
- ie F12开发工具出不来
- XML有哪些解析方式有何优缺点?xml有哪些解析技术?区别是什么?
- javascript将毫秒还原为可读时间格式
- poj 1007 纯水题 排序
- C#使用Socket实现一个socket服务器与多个socket客户端通信
- one-to-one 一对一映射关系(转 wq群)
- Hive和HBase区别
- python模块_hashlib详解
- 网络编程——socket(四十三)
- Struts1的基础知识
- Oracle 存储过程起步
热门文章
- 数据结构C语言实现----快速排序
- Python 教你自动发微博,每日一句英语
- 十多位全球技术专家,为你献上近十个小时的.Net微服务介绍
- C#LeetCode刷题之#824-山羊拉丁文​​​​​​​(Goat Latin)
- golang 中的struct理解
- JavaScript中的正则表达式详解
- 【算法•日更•第三十五期】FF算法优化:EK算法
- Ng-Matero V10 正式发布!
- Python默认参数的陷阱
- unity探索者之微信分享回调