这篇博客是查找unity中缺失引用的一个简单简短的解决方案。你可以从GitHub上获取源码。
缺失引用
一个丢失引用与没有引用(在检视表显示“None”)是完全不同的概念。这些友各种原因造成,比如:把资源文件从Unity编辑器中移除,导致在.meta文件混乱,其中有个指向无效的连接。
主要问题是缺失引用在项目中会被隐藏在某处,只有等运行中找到时已经太晚了。幸运的是,我们编写了编辑器脚本来补救...
 
解决方案:
以防止你也遇到这种问题,下面是查找缺失引用的所有代码:
 
 using System.Collections;
using System.Linq;
using UnityEditor;
using UnityEngine; public class MissingReferencesFinder : MonoBehaviour
{
[MenuItem("Tools/Show Missing Object References in scene", false, )]
public static void FindMissingReferencesInCurrentScene()
{
var objects = GetSceneObjects();
FindMissingReferences(EditorApplication.currentScene, objects);
} [MenuItem("Tools/Show Missing Object References in all scenes", false, )]
public static void MissingSpritesInAllScenes()
{
foreach (var scene in EditorBuildSettings.scenes.Where(s => s.enabled))
{
EditorApplication.OpenScene(scene.path);
FindMissingReferences(scene.path, GetSceneObjects());
}
} [MenuItem("Tools/Show Missing Object References in assets", false, )]
public static void MissingSpritesInAssets()
{
var allAssets = AssetDatabase.GetAllAssetPaths();
var objs = allAssets.Select(a => AssetDatabase.LoadAssetAtPath(a, typeof(GameObject)) as GameObject).Where(a => a != null).ToArray(); FindMissingReferences("Project", objs);
} private static void FindMissingReferences(string context, GameObject[] objects)
{
foreach (var go in objects)
{
var components = go.GetComponents(); foreach (var c in components)
{
if (!c)
{
Debug.LogError("Missing Component in GO: " + FullPath(go), go);
continue;
} SerializedObject so = new SerializedObject(c);
var sp = so.GetIterator(); while (sp.NextVisible(true))
{
if (sp.propertyType == SerializedPropertyType.ObjectReference)
{
if (sp.objectReferenceValue == null
&& sp.objectReferenceInstanceIDValue != )
{
ShowError(context, go, c.GetType().Name, ObjectNames.NicifyVariableName(sp.name));
}
}
}
}
}
} private static GameObject[] GetSceneObjects()
{
return Resources.FindObjectsOfTypeAll()
.Where(go => string.IsNullOrEmpty(AssetDatabase.GetAssetPath(go))
&& go.hideFlags == HideFlags.None).ToArray();
} private const string err = "Missing Ref in: [{3}]{0}. Component: {1}, Property: {2}"; private static void ShowError (string context, GameObject go, string c, string property)
{
Debug.LogError(string.Format(err, FullPath(go), c, property, context), go);
} private static string FullPath(GameObject go)
{
return go.transform.parent == null
? go.name
: FullPath(go.transform.parent.gameObject) + "/" + go.name;
}
}
作者: Lior Tal

在Unity中查找缺失的引用的更多相关文章

  1. Unity中各种查找物体的方法

    本文转自博主:Teng的世界 https://blog.csdn.net/teng_ontheway/article/details/47188141 GameObject.Find().Transf ...

  2. pycharm中查找一个对象在哪里被引用

    pycharm中查找一个对象在哪里被引用 2018年10月28日 19:22:20 vivian_wanjin 阅读数:1600   PyCharm的Find Usages功能可以查找某个对象(变量. ...

  3. Unity中的值传递与引用传递

    1. 值类型 值类型变量本身保存了该类型的全部数据,当声明一个值类型的变量时,该变量会被分配到栈(Stack)上. 2. 引用类型 引用类型变量本身保存的是位于堆(Heap)上的该类型的实例的内存地址 ...

  4. [LeetCode]面试题53 - I. 在排序数组中查找数字 I(二分);面试题53 - II. 0~n-1中缺失的数字(二分)

    ##面试题53 - I. 在排序数组中查找数字 I ###题目 统计一个数字在排序数组中出现的次数. 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 ...

  5. 【《Effective C#》提炼总结】提高Unity中C#代码质量的21条准则

    作者:Williammao, 腾讯移动客户端开发工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:http://wetest.qq.com/lab/view/290.h ...

  6. Unity中的内存泄漏

    在对内存泄漏有一个基本印象之后,我们再来看一下在特定环境——Unity下的内存泄漏.大家都知道,游戏程序由代码和资源两部分组成,Unity下的内存泄漏也主要分为代码侧的泄漏和资源侧的泄漏,当然,资源侧 ...

  7. 【《Effective C#》提炼总结】提高Unity中C#代码质量的22条准则

    引言 原则1尽可能地使用属性而不是可直接访问的数据成员 原则2偏向于使用运行时常量而不是编译时常量 原则3 推荐使用is 或as操作符而不是强制类型转换 原则4 推荐使用条件属性而不是if条件编译 原 ...

  8. 【转】Effective C#观后感之提高Unity中C#代码质量的21条准则

    转自:http://blog.csdn.net/swj524152416/article/details/75418162 我们知道,在C++领域,作为进阶阅读材料,必看的书是<Effectiv ...

  9. Unity中所有特殊的文件夹

    1. 隐藏文件夹以.开头的文件夹会被Unity忽略.在这种文件夹中的资源不会被导入,脚本不会被编译.也不会出现在Project视图中.2. Standard Assets在这个文件夹中的脚本最先被编译 ...

随机推荐

  1. mongoDb CPU利用率100%的分析和解决

    在公司的项目中,突然出现过一个情况,mongodb 的CPU利用率到达100%,导致服务器这边卡死了,请求了半天无响应,提示请求超时. 因为,当时APP用户可能会在某一个时间段集中的使用,所以,请求量 ...

  2. Java 源码赏析 - java.lang - Void

    被人鄙视了,于是也来读读源码... package java.lang; /** * The Void class is an uninstantiable placeholder class to ...

  3. mha切换脚本可用的

    #!/usr/bin/env perl use strict; use warnings FATAL => 'all'; use Getopt::Long; my ( $command, $ss ...

  4. 微信支付WxpayAPI_php_v3(三)支付成功回调

    接收回调通知后的业务处理都在NotifyProcess做,$data包含了微信返回给你的数据. Service: <?php /** * Created by PhpStorm. * User: ...

  5. php curl_multi系列函数实现多线程抓取网页

    最近几天在做一个多搜索引擎关键字排名查询工具,用于及时方便的了解关键词在各大搜索引擎的排名. 在抓取360搜索的时候,发现360搜索每页只支持显示10个搜索结果,如果想获取100个搜索结果数据,就得搜 ...

  6. Html5學習重點清單

    SVG webSQL 數據庫 SSE 服務推送 MathML 基於xml語法 Web 存储 webSockets通信 canvas 畫布操作 音頻和視頻 地理位置 Geolocation API We ...

  7. Python 类的多态的运用

    #类的多态的运用 #汽车类 class Car(object): def move(self): print("move ...") #汽车商店类 class CarStore(o ...

  8. 自然语言交流系统 phxnet团队 创新实训 个人博客 (十一)

    名思义是 给游戏场景 添加一个 天空背景 让游戏更加精美,更具有魅力 添加天空盒 有两种方式  1 : 在当前相机上添加skybox   2 : 在当前场景上添加skybox 上面的两种方式的结果是一 ...

  9. 《FPGA全程进阶---实战演练》第十四章 蜂鸣器操作

    1 基础理论部分 本实验主要是实现蜂鸣器的操作,蜂鸣器的操作是非常简单的,只有把简单的事情做好,方可谈其他复杂的事.本实验部分会利用verilog一些宏定义语句,其实在VGA实验部分已经出现过,这里为 ...

  10. yizhihx ubuntu config

    install shadowsocks:http://www.cnblogs.com/huangshiyu13/p/8973967.html download: https://pan.baidu.c ...