【Unity】判断对象是否是预制体以及是否存储在磁盘中_Arvin ZHANG的博客-程序员秘密_unity 判断是否是预制体

技术标签: Unity  实例  预制体  Prefab  资源  

【Unity】判断对象是否是预制体以及是否存储在磁盘中

一、判断对象是否存储在磁盘中

如果对象存储在磁盘中,下面的方法会返回 true
如果对象位于场景中,下面的方法会返回 false

如果已知传入方法的参数对象是 GameObject 或 GameObject 上的 Component ,那么也可以用这个方法判断参数对象是否是预制体资源,但不能用于判断对象是否是预制体实例。如果传入方法的参数对象不是 GameObject 或 GameObject 上的 Component (例如原始美术资源),那么该方法会一直返回 true

UnityEditor.EditorUtility.IsPersistent(Object target);

二、判断对象是否是预制体

1. Unity 2018.3.0及更高版本

可以通过以下方法判断对象是预制体资源、预制体实例还是普通对象:

  • UnityEditor.PrefabUtility.IsPartOfPrefabAsset()
  • UnityEditor.PrefabUtility.IsPartOfPrefabInstance()
  • UnityEditor.PrefabUtility.IsPartOfXxx()

2. Unity 2018.3.0以下的版本

可以通过 gameObject.scene.IsValid() 来判断对象是否是预制体资源。


以下内容已废弃

判断Object是否是预制体资源

/// <summary>
/// 判断Object是否是预制体资源。
/// 如果是则返回 `true` ,如果不是则返回 `false` 。
/// </summary>
/// <param name="obj">UnityEngine.Object</param>
/// <param name="includePrefabInstance">是否将预制体资源的Scene实例视为预制体资源?</param>
/// <returns></returns>
public static bool IsPrefabAsset(UnityEngine.Object obj, bool includePrefabInstance)
{
    
#if UNITY_EDITOR
    if (!obj)
    {
    
        return false;
    }

    var type = UnityEditor.PrefabUtility.GetPrefabAssetType(obj);
    if (type == UnityEditor.PrefabAssetType.NotAPrefab)
    {
    
        return false;
    }

    var status = UnityEditor.PrefabUtility.GetPrefabInstanceStatus(obj);
    if (status != UnityEditor.PrefabInstanceStatus.NotAPrefab && !includePrefabInstance)
    {
    
        return false;
    }

    return true;
#else
    return false;
#endif
}

判断GameObject是否是预制体资源的实例

/// <summary>
/// 判断GameObject是否是预制体资源的实例。
/// 如果是则返回 `true` ,如果不是则返回 `false` 。
/// </summary>
/// <param name="gameObject">UnityEngine.GameObject</param>
/// <param name="includeMissingAsset">是否将丢失预制体关联的GameObject视为预制体实例?</param>
/// <returns></returns>
public static bool IsPrefabInstance(UnityEngine.GameObject gameObject, bool includeMissingAsset)
{
    
#if UNITY_EDITOR
    if (!gameObject)
    {
    
        return false;
    }

    var type = UnityEditor.PrefabUtility.GetPrefabAssetType(gameObject);
    if (type == UnityEditor.PrefabAssetType.NotAPrefab || (!includeMissingAsset && type == UnityEditor.PrefabAssetType.MissingAsset))
    {
    
        return false;
    }

    var status = UnityEditor.PrefabUtility.GetPrefabInstanceStatus(gameObject);
    if (status == UnityEditor.PrefabInstanceStatus.NotAPrefab)
    {
    
        return false;
    }

    return true;
#else
    return false;
#endif
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_21397217/article/details/107026794

智能推荐

Oracle11G DataGuard_思考v的博客-程序员秘密

                     Oracle11GDataGuard相同SID物理Standby搭建方案           信息技术部2014.04.18   目录一、 

人事管理系统之系统模块管理(一)_Andy丁的博客-程序员秘密

1.0模块整体的实体设计一、1.starUML结构类图2.设计说明1,有几个实体?一般是一组增删改查对应一个实体。2,实体之间有什么关系?一般是页面引用了其他的实体时,就表示与这个实体有关联关系。3,每个实体中都有什么属性?1,主键。2,关联关系属性。在类图中,关联关系是一条线,有两端,每一端对应一个表达此关联关系的属性。有几个端指向本类,本类中就有

2021年前端最火的8个技术趋势_dirft_din的博客-程序员秘密_前端前沿技术

乐字节教育是集线上教育与线下培训于一体的全栈式教育机构,致力于研发高端IT技术,培养高端IT人才,让更多的人接受更好的教育是乐字节的教学理念。2020年的年终岁尾,我们一起解读一下整个2020年的前端技术的8个技术,并深度分析2021年大前端领域又有哪些顶级技术趋势,你不容错过。2020年注定是不平凡的一年,相信因为疫情,很多程序员的工作和生活都受到了一定影响,其实现在前端的技术已经到了深水区,工程师主要分为前面架构师和前端图形学工程师,那么2021年整个前端技术又有哪些新的趋势?**1、第一个就是

VMWare mac os x 优化神器 beamoff_This is bill的博客-程序员秘密

http://files.cnblogs.com/files/yipu/beamoff.zip这个程序设置为登录启动比较好 源码很简单://// AppDelegate.m// beamoff//// Created by ANDREI VAYAVODA on 09.11.14.// Copyright (c) 2014 ANDREI VAYAVODA. All rights r...

[PC]可用于Windows Server 2008 R2的Xbox One手柄、接收器驱动_weixin_30550081的博客-程序员秘密

让客厅里的Gen8可以玩FC和PS1游戏,折腾了半天,终于将Xbox One手柄驱动弄好:http://www.drvsky.com/Microsoft/Xbox_One.htmhttp://www.drvsky.com/Microsoft/Xbox_One_Wireless_Controller.htm转载于:https://www.cnblogs.com/youliao/p/6...

YOLOv5发布第六个版本,支持一键适配OpenVINO/OpenCV DNN部署_AI视觉网奇的博客-程序员秘密_yolo最新版

YOLOv5发布了第六个版本,其它我不说,什么是开源精神,不是写个程序扔github就叫开源,而是持续不断改进,精益求精,不断演化版本,增加最有商业价值的功能,YOLOv5做到了。看看最新版本都有哪些新功能让开发者心动....新特性首次发布支持移动端的最小化模型YOLOv5n,只有1.9MB,全称为YOLOv5 Nano。支持模型导出为tensorflow跟keras格式,这是什么鬼,就这招彻底打废原来的tensorflow跟keras版本模仿者!OpenCV DNN支持,原来导出ONNX要支持..

随便推点

Spring Boot 整合JetCache缓存框架实现本地caffeine远程redis存储_ggfvg777的博客-程序员秘密_caffeine jetcache

Spring Boot 整合JetCache缓存框架实现本地caffeine远程redis存储JetCache主要通过@Cached和@CreateCache实现缓存,@Cached是在接口方法或者类方法上添加缓存,一般以参数为key,以返回值为value存入缓存中。@CreateCache是直接创建一个缓存实例,然后调用put(Tkey, T value)、get(T key)等方法实现缓存。 &lt;dependency&gt; &lt;groupId&gt;org

解决MAC下Genymotion无法创建VirtualBox接口的问题_北渚007的博客-程序员秘密

创建RN项目时,想用Genymoiton新建一个Android模拟器,报错如下:An error has occurred while trying to create a virtualbox host-only network interface原因是VirtualBox下载失败,重新下载,在系统偏好设置 -&gt; 安全性与隐私 -&gt; 通用中,选择允许Oracle下载App参考官方文档:https://support.genymotion.com/hc/en-us/articles/3600

Logistic回归原理【似然函数与梯度选择】_TaoTaoFu的博客-程序员秘密_logistic似然函数

Logistic回归为概率型非线性回归模型,是研究二分类观察结果与一些影响因素之间关系的一种多变量分析方法。通常的问题是,研究某些因素条件下某个结果是否发生,比如医学中根据病人的一些症状来判断它是否患有某种病。 在讲解Logistic回归理论之前,我们先从LR分类器说起。LR分类器,即Logistic Regression Classifier。在分类情形下

Unity的PackageManager面板不能用问题_鹿野素材屋的博客-程序员秘密

最近由于接SDK的问题,发现Package Manager面板一直报错,不能正常使用。 正常打开的显示应该如下: 后来右键点击Packages,找到manifest.json文件,与正常工程做对比,发现多出了如下代码段: 这应该是SDK中将URL指向外网的代码片段,但是!不翻墙连不上外网,所以一直会在刷新界面报错。 默默吐血,国内做开发真难。...

如何在Kafka中对Topic的leader进行均衡_幽灵之使的博客-程序员秘密_kafka一个topic有多少leader

参考操作背景在创建一个topic时,kafka尽量将partition均分在所有的brokers上,并且将replicas也j均分在不同的broker上。每个partitiion的所有replicas叫做"assigned replicas","assigned replicas"中的第一个replicas叫"preferred replica",刚创建的topic一般"p

Minesweeper by C_giturtle的博客-程序员秘密

扫雷楔子:扫雷游戏是我们小时候无聊时消磨时间的小玩意,虽然更新到Win10系统后经典的扫雷游戏不再了,不过它现在仍以一种抓虫子的游戏形式存在于Windows这个系统平台,不禁感慨游戏还是那个游戏,不过人已经不是那些人了啊.其实扫雷游戏的实现也主要运用了数组和函数封装与调用的知识,具体请看程序.以下为程序主体:#define _CRT_SECURE_NO_WARNINGS#inclu.........

推荐文章

热门文章

相关标签