Unity脚本引用原理,修复Unity脚本引用丢失,源码脚本与dll中的脚本引用互换

本文探讨Unity中脚本引用丢失的修复方法,包括Prefab引用脚本原理、DLL脚本的区别以及不同场景下的替换策略。文章详细阐述了通过修改GUID和FILEID来修复脚本引用,同时提供了MD4算法的简要说明。
摘要由CSDN通过智能技术生成

前言

在我们开发游戏的过程中,经常会碰到脚本引用丢失的情况,但是怎么把它们修复到我们的理想情况呢?先在这打个预防针,不是所有情况下的脚本引用丢失都能修复,但绝大多数情况下都是可行的,只要你知道原来脚本的GUID和FILEID(不知道也可以在prefab中找到),最重要的是你要有(必须有)用来做修复的脚本GUID和FILEID,要不然就没办法修复 了。

我举个极端情况,假如Prefab挂了A脚本,但是这个Prefab是第三方的,但是它却没有把A脚本给你,这种情况下你就没办法修复了,除非你通过其它途径知道了A脚本的实现,你自己在本地创建了一个类A的脚本,这样才可能被修复


脚本在Prefab中被引用的原理

脚本被引用有两种情况

a.prefab引用的是cs文件脚本

b.prefab引用的是dll文件中的脚本


区别一:

对于第一种情况,脚本的文件名必须和类名相同,且必须为MonoBehaviour类,不管脚本里面有一个或多个类,只有和文件名相同的类名的才能被挂接上

对于第二种情况,一个脚本可以包含多个MonoBehaviour类,如果把它打成dll后,它里面的所有类都是可以被挂接

区别二:

prefab挂了脚本,打成AssetBundle后,加载运行的时候,只有第一种情况的脚本是可以生效的,挂的dll是无效,因为bundle加载并初始化的时候,unity是从包内的脚本中去搜索的,并不会从包内的dll中去搜索(这也是脚本更新的拦路虎之一,解决方法要么动态挂脚本,要么挂的脚本不热更,跟包走)


引用的原理,如下图:


用文本编辑器打开prefab文件,如上图,挂载的脚本如上紫框内所示,fileID脚本中类的信息,guild表示脚本所在的文件ID

a.直接挂载脚本

    这种情况下,fileID的值永远是11500000,它实际上指的是MonoScript类型组件,它的值

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值