当前位置: 首页 Unity开发

【Unity开发】利用PrefabStage监听Prefab的状态事件处理相应逻辑

时间:2023年05月17日 阅读:553
以下内容仅是站长或网友个人学习笔记、总结和研究收藏。不保证正确性,因使用而带来的风险与本站无关!
淘客轩-衣食住行外卖生活好助手

在UnityEditor下,通过PrefabStage监听打开/关闭Prefab编辑事件,来进行 LayerMask 的设置。

  1. 引入 UnityEditor.Experimental.SceneManagement     using UnityEditor包

  2. 初始化Load时注册监听函数

  3. 定义函数

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEditor.Experimental.SceneManagement;
namespace XXXX.NameSpace
{
    public class PrefabStageChange
    {
        [InitializeOnLoadMethod]
        static void RegisterPrefabStageEvents()
        {
            PrefabStage.prefabSaving += OnSaving;
            PrefabStage.prefabSaved += OnSaved;
            PrefabStage.prefabStageClosing += OnClosing;
            PrefabStage.prefabStageOpened += OnOpend;
        }

        private static void OnSaving(GameObject go)
        {
            
            Debug.LogFormat("GameObject({0}) is saving.", go.name);
        }

        private static void OnSaved(GameObject go)
        {
            //Debug.LogFormat("GameObject({0}) is saved.", go.name);
        }

        private static void OnOpend(PrefabStage prefabStage)
        {
            if (prefabStage.prefabAssetPath.Contains("AssetBundleRes/Res"))
            {
                bool ischange = false;
                var root = prefabStage.prefabContentsRoot;
                int count = root.transform.childCount;
                for (int i = 0; i < count; i++)
                {
                    if (root.transform.GetChild(i).gameObject.layer !=LayerMask.NameToLayer("BattleUI"))
                    {
                        ischange = true;
                        root.transform.GetChild(i).gameObject.layer = LayerMask.NameToLayer("BattleUI");
                    }
                }
                if (root.layer !=LayerMask.NameToLayer("BattleUI"))
                {
                    ischange = true;
                    root.layer = LayerMask.NameToLayer("BattleUI");
                }
                if (ischange)
                {
                    EditorUtility.SetDirty(root);
                }
            }
            //Debug.LogFormat("GameObject({0}) is opend.", prefabStage.prefabAssetPath);
        }

        private static void OnClosing(PrefabStage prefabStage)
        {
            //Debug.LogFormat("GameObject({0}) is closing.", prefabStage.prefabAssetPath);
        }
    }
}


打赏
标签: Unity PrefabStage

本文地址:https://www.momojc.cn/unity/unitykaifa.html

相关推荐
支付宝领大额红包
支付宝领大额红包
似水流年
    今日已经过去小时
    这周已经过去
    本月已经过去
    今年已经过去个月
小姐姐视频

关于本站 | 隐私政策 | 免责声明 | 广告合作 | 我要投稿 | 后台管理

CopyRight © 2023-2024 MOMO教程 WWW.MOMOJC.CN , All Rights Reserved.

站长E-mail:378074730@qq.com 网站已运行:  运行时长:0.024 秒

京ICP备20029690号-1京ICP备20029690号-2 京公网安备11011402013892号京公网安备11011402013892号 中国互联网违法和不良信息举报中心 网络违法犯罪举报网站

本网站托管于 腾讯云 .由网站卫士提供网站加速和攻击防御服务 提供CDN加速/防御服务.由zblogcn强力驱动 又拍云提供CDN加速/云存储服务 51la网站统计