关于unity3d中的[System.Serializable]类的实例化位置不同所产生的改变

在学习unity3d之余看到这篇文章:https://blog.csdn.net/qq_39816832/article/details/80316758

按照案例尝试了一下

如上通过unity帮我们实例化且序列化脚本的ClassToSerialized对象的时候在编辑器中修改 id的值(100--->120)是会作用到print打印出来的。

如上在同位置手动new了一个ClassToSerialized对象,在unity中运行后的效果是一样的。

而如果在Start函数中使用new如下

这样的话我们在unity中的编辑模式修改id的值(100--->120)在运行状态的时候 打印出来的是100

在开头我阅读的文章中那位同学说 原因是Start函数是在字段赋值之后执行的 所以在编辑器中无论怎么改都没用

那我可不可以理解为在Start函数之前存在着编辑器对实例化出来的字段进行赋值的操作。并且该操作是在图一图二实例化出对象之后进行的,如果在那之前的话是不可能的连字段都没有定义,怎么可能会有赋值这一说法呢。

所以赋值操作应该位于字段声明后且在Start之前。

那么问题来了。。假如上述是成立的在图三中在start中前 声明了对象编辑器也对对象进行了赋值操作。那为啥unity运行后打印出来的是100而不是修改后的120.

这里需要注意的是我们在Start中new了一个新对象,此时我们所声明的对象的指针就已经变为了新new的对象了。而之后就在也没有出现编辑器对对象中的的字段进行赋值的操作了。

所以运行的结果是id为100。

 

先这样啦,如果哪里说的不对欢迎大佬指出。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值