欢迎光临散文网 会员登陆 & 注册

MonoBehaviour类的实例化

2021-01-24 13:56 作者:Anicca丶Y  | 我要投稿

在Unity的资源中MonoBehaviour是比较特殊的一类,

在开发中,继承MonoBehaviour类的脚本只有通过挂载到某个GameObject上才能够被实例化(即拖拽到Inspector上).并且可以在Inspector上修改Public变量,

那么问题就来了,Inspector中修改的变量值,是不会修改脚本本身的,那么这些变量的值保存在哪里?

其实在Unity中只要是GameObject的Inspector界面中的组件都是会生成引用的,而引用在生成游戏后都保存到了.assets文件中.

MonoBehaviour保存有实例化脚本的关键信息,在序列化后会关联产生PPtr<MonoScript>,而PPtr<MonoScript>指针指向一个MonoScript的资源这个文件的信息非常简单直接标明了MonoBehaviour所对应的程序集,命名空间,类信息等.(MonoScript提供了MonoBehaviour实例化最基本的信息,是哪个类)


指针
信息

在通过MonoScript获得最基本的信息之后,根据这个信息获取相应的类信息后,MonoBehaviour中的二进制数据就能够解析并且填充到类中的各个变量里,这样成功实例化就成功了.

通过上面的流程大致摸清楚了MonoBehaviour的解析和实例化流程,

讲一个用到的例子:

如果有一个MonoBehaviour中保存了大量的文本信息,而这些文本信息是我们需要提取的内容,

当用UABE或者assetstudio打开时通常就会弹出窗口需要我们自己添加这个程序集的路径,

在添加完后MonoBehaviour才能够被解析.

如果这过程中我们选择不添加程序集的路径,则会解析失败.

解析失败和成功对比

可以得出一个结论:如果单纯把MonoBehaviour导出成二进制(raw),由于二进制文件中并没有MonoScript的详细信息只有指针信息,所以解析难度较大,需要根据上面的流程自己写个脚本对其进行解析,进而也可以实现MonoBehaviour一些较简单的修改.


MonoBehaviour类的实例化的评论 (共 条)

分享到微博请遵守国家法律