Missing (Mono Script), Missing Prefab

时间:2021-07-17 10:34:24

开始研究Google Cardboard SDK,下载了一份gvr-unity-sdk,用Unity打开里面的Samples: CastleDefense,导出XCode项目在iPhone上面运行,出现如下错误:

You've implemented -[<UIApplicationDelegate> application:didReceiveRemoteNotification:fetchCompletionHandler:], but you still need to add "remote-notification" to the list of your supported UIBackgroundModes in your Info.plist.

修改完上述错误再运行又出现如下错误:

The referenced script on this Behaviour (Game Object 'ExplosionMobile') is missing!

返回Untiy项目,看到Assets/Game/Prefabs/Cannon Ball这个Prefab里面的ExplosionMobile下面挂的脚本丢了

Missing (Mono Script), Missing Prefab

在检查了Edit->Project Settings->Editor里面的Version Control设置为Visual Meta Files,Asset Serialization设置为Force Text(如果你的项目设置不是这样,需要修改成这样).

在项目文件目录下选中 Cannon Ball.prefab 这个文件,用文本编辑器打开,并搜索ExplosionMobile:

Missing (Mono Script), Missing Prefab

从上图可以看到m_Name: ExplosionMobile这一行上面有m_Component的数据,-  4:为Transform,- 114:为Script,即为丢失的Script,复制其后面的fileID数值11463042,并在该文件中搜索11463042,除去当前这个位置,另外一个位置,就是该Script的数据信息:

Missing (Mono Script), Missing Prefab

Missing (Mono Script), Missing Prefab

--- !u!114 &11463042这个模块下的数据,m_Script这一行里面有一个guid,数值039587c051912eb4ead9e58344c5f3ce即为丢失的Script的guid,该guid是Unity自动生成并保存在.meta文件里面的。

在本地文件系统中搜索039587c051912eb4ead9e58344c5f3ce,结果如下:

Missing (Mono Script), Missing Prefab

往下拉寻找*.cs.meta,发现如下:

Missing (Mono Script), Missing Prefab

点击其中一个ParticleSystemMultiplier.cs.meta,在上层文件夹中显示出来,发现是Unity的Standard Assets: ParticleSystems里面的脚本:

Missing (Mono Script), Missing Prefab

在项目中导入ParticleSystems Package后,丢失的代码即刻恢复了:

Missing (Mono Script), Missing Prefab

到此,丢失的Script找到了。

Missing Prefab也是类似的操作,用文本编辑器打开丢失Prefab的*.unity这个场景文件,然后搜索Missing Prefab,通过fileID在文件中查到Prefab的数据信息,分析该Prefab数据中包含哪些Component,并手动重建一个,丢失的资源文件,则根据guid在项目目录下查找。

本文为原创,如果转载请注明出处