码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Unity脚本判断场景内物体是否为Root Prefab的方法


    问题

    由于如果不是根Prefab,是无法通过PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(gameObject)获得的地址来进行修改后属性的存储的。

    所以,如果脚本中需要对修改属性后的Prefabs进行保存,又要避开Prefabs下的part,需要进行对gameobject的判断,判断是否为root Prefab。

    探索

    但是我试过了很多方法,总会存在情况有一些漏网之鱼:

    1. 直接通过PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(gameObject)获得距离最近的Prefab Object地址,然后通过字符串操作取出文件名,判断当前的Gameobject.name是否与地址中的文件名相符,如果文件名相同,那么就是根prefab,如果不是,说明它存在一个非本身的prefab root。但是不行,会出现这样的情况:
      很抽象,会存在root prefab下包含了一个包含prefab的非prefab,很绕,但是你懂了就能懂了,这样的话,最近的prefab object就成了children prefab自己了,而不是隔了一个非prefab的root prefab。

    2. 通过一些可能成功的函数:尝试过PrefabUtility.IsPartOfAnyPrefab(gameObject),看上去是一个判断它是否是一个Prefab的part的办法,但是!但是root prefab本身也会被判断为是part of a prefab,很气,但是确实也没毛病,所以也不行。

    解决方法

    最终就不打算找函数了,通过逻辑完成root prefab的寻找。方法就是,首先获得当前scene下的所有Root GameObject,然后对于每个Root GameObject进行children的递归遍历,当遇到第一个为Prefab的gameobject的时候,将其存到一个全局list里面,然后return出当前递归,回溯到上一层递归中的children for,check下一个children。

    这样,存到list里面的prefab一定是递归树中最靠近root node的那一个,它的父节点和祖先节点都不存在prefab。于是就得到了一个当前场景下的root prefabs的列表。最终判断一下当前GameObject是否exist在这个列表里就ok了。

  • 相关阅读:
    牛客小白月赛56
    最新宝塔反代openai官方API开发接口详细搭建教程,解决502 Bad Gateway问题
    微服务和 C++ 如何有效结合?
    grid网格布局,比flex方便太多了,介绍几种常用的grid布局属性
    基于Python的深度优先搜索----解决迷宫最短路径问题
    安卓手机获取root权限---修补面具root步骤解析
    【vue3: vuex4 状态管理库】使用&讲解
    C/C++新冠疫情死亡率 2020年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析
    Matlab:数值的显示格式
    基于simulink的单相光伏系统并网储能控制仿真
  • 原文地址:https://blog.csdn.net/weixin_46052886/article/details/133752931
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号