Unity3D 加载UnityEngine.UI.dll 失败导致 Prefab 上 脚本丢失,引发各种 NullException
![](https://img-blog.csdn.net/20160523163335745)
在 Unity 官方论坛找到的解决方法是重新加载 UnityEngine.UI.dll ,把下面的脚本扔到项目里,然后右键菜单中就会出现
![](https://img-blog.csdn.net/20160523163732474)
- using UnityEngine;
- using System.Collections.Generic;
- using UnityEditor;
- using System.Text.RegularExpressions;
- using System.IO;
- using System.Text;
-
- public class ReimportUnityEngineUI {
- [MenuItem("Assets/Reimport UI Assemblies", false, 100)]
- public static void ReimportUI() {
- #if UNITY_4_6
- var path = EditorApplication.applicationContentsPath + "/UnityExtensions/Unity/GUISystem/{0}/{1}";
- var version = Regex.Match(Application.unityVersion, @"^[0-9]+\.[0-9]+\.[0-9]+").Value;
- #elif UNITY_4_7
- var path = EditorApplication.applicationContentsPath + "/UnityExtensions/Unity/GUISystem/{0}/{1}";
- var version = Regex.Match(Application.unityVersion, @"^[0-9]+\.[0-9]+\.[0-9]+").Value;
- #else
- var path = EditorApplication.applicationContentsPath + "/UnityExtensions/Unity/GUISystem/{1}";
- var version = string.Empty;
- #endif
- string engineDll = string.Format(path, version, "UnityEngine.UI.dll");
- string editorDll = string.Format(path, version, "Editor/UnityEditor.UI.dll");
- ReimportDll(engineDll);
- ReimportDll(editorDll);
-
- }
- static void ReimportDll(string path) {
- if (File.Exists(path))
- AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceUpdate | ImportAssetOptions.DontDownloadFromCacheServer);
- else
- Debug.LogError(string.Format("DLL not found {0}", path));
- }
- }