Unity Editor工具,导出unitypackage可选择是否包含脚本

概述

Unity自带的Export Package...功能,如果选中资源中包含脚本,或者Prefab挂载了自定义的脚本。在之后弹出的选择框内,如果勾选了Include dependencies会将整个项目所有的脚本全部都包含在内。等于导入了很多不相关的代码。如果取消勾选Include dependencies,又只有选中的那个资源,其他引用到的资源又不包含在内。

但是在实际的工作中导出资源时,只想导出跟选中资源相关的资源,并不想包含脚本,或者仅包含该prefab挂载的脚本。这时候就需要自己编写一个Editor工具实现该功能。具体的代码如下

工具代码

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
using System.IO;public class AssetSelectPopUpWindow : EditorWindow
{private Vector2 scrollPosition;private List<string> items = null;//是否导出脚本public static bool exportWithScript = false;private bool[] selectionStates;#region editor菜单相关[MenuItem("Assets/Tools/导出Unity资源包")]public static void ExportWithoutScript(){exportWithScript = false;ShowWindow();}[MenuItem("Assets/Tools/导出Unity资源包(包含脚本)")]public static void ExportWithScript(){exportWithScript = true;ShowWindow();}public static void ShowWindow(){AssetSelectPopUpWindow wnd = GetWindow<AssetSelectPopUpWindow>();wnd.titleContent = new GUIContent("资源导出");wnd.minSize = new Vector2(450, 200);wnd.maxSize = new Vector2(1920, 720);wnd.Show();}#endregionpublic void GetAllFiles(bool withScript){//获取鼠标选中的所有文件Object[] selectedObjects = Selection.GetFiltered<Object>(SelectionMode.Assets);List<string> assetPathNames = new List<string>();for (int i = 0; i < selectedObjects.Length; i++){string directoryPath = AssetDatabase.GetAssetPath(selectedObjects[i]);if (directoryPath != null){//如果是文件夹,就遍历文件夹下的所有资源if (Directory.Exists(directoryPath)){string[] folders = Directory.GetFiles(directoryPath);for (int j = 0; j < folders.Length; j++){//过滤掉.meta文件if (!folders[j].EndsWith(".meta")){assetPathNames.Add(folders[j]);}}}else{assetPathNames.Add(directoryPath);}}}items = new List<string>();for (int i = 0; i < assetPathNames.Count; i++){var depends = AssetDatabase.GetDependencies(assetPathNames[i], true);for (int j = 0; j < depends.Length; j++){AddFiles(withScript, depends[j]);}}items.Sort();selectionStates = new bool[items.Count];//默认全选 SelectAllItems();}private void OnEnable(){GetAllFiles(exportWithScript);}//打印所有选择的文件private void ShowFiles(){for (int i = 0; i < items.Count; i++){Debug.Log($"all Files is {items[i]}");}}private void AddFiles(bool withScript, string filePath){//特定的目录不处理if (filePath.StartsWith("Packages/")){return;}if (withScript || !filePath.EndsWith(".cs")){if (!items.Contains(filePath)){items.Add(filePath);}}}private void OnGUI(){EditorGUILayout.Space(10);// Scroll viewusing (var scrollView = new EditorGUILayout.ScrollViewScope(scrollPosition)){scrollPosition = scrollView.scrollPosition;for (int i = 0; i < items.Count; i++){selectionStates[i] = EditorGUILayout.ToggleLeft(items[i], selectionStates[i]);}}GUILayout.Space(10);// ButtonsGUILayout.BeginHorizontal();if (GUILayout.Button("全选")){SelectAllItems();}if (GUILayout.Button("全不选")){DeselectAllItems();}GUILayout.EndHorizontal();GUILayout.Space(10);if (GUILayout.Button("导出")){OutputSelectedItems();}}#region 按钮事件private void SelectAllItems(){for (int i = 0; i < selectionStates.Length; i++){selectionStates[i] = true;}}private void DeselectAllItems(){for (int i = 0; i < selectionStates.Length; i++){selectionStates[i] = false;}}private void OutputSelectedItems(){List<string> exportItems = new List<string>();    for (int i = 0; i < items.Count; i++){if (selectionStates[i]){exportItems.Add(items[i]);}}if(exportItems.Count == 0){EditorUtility.DisplayDialog("没有任何选中的资源", "请选择想要导出的资源", "OK");return;}var path = EditorUtility.SaveFilePanel("导出资源包", "", "", "unitypackage");if (path == "")return;var flag = ExportPackageOptions.Interactive | ExportPackageOptions.Recurse;//如果选择完后还想导出该资源关联的资源可以添加ExportPackageOptions.IncludeDependencies的Flag//if (exportWithScript)//{//    flag = flag | ExportPackageOptions.IncludeDependencies;//}AssetDatabase.ExportPackage(exportItems.ToArray(), path, flag);Close();}#endregion}

示例

首先随便创建一个prefab,并且给prefab创建一些动画机,修改材质,并且挂载一个自定义的脚本

之后右键Cube.prefab使用unity自带的 Export Package...

如果勾选了Include dependencies,可以看到unity会将所有的脚本都包含在内,如下图所示

然而实际上跟这个Cube.prefab相关的资源只有下面这些

如果取消勾选Include dependencies,又只包含了这个prefab,相关的材质动画等资源全部没有包含在内

这时候改用我们自定义的AssetSelectPopUpWindow的导出功能,右键Cube.prefab,在弹出的菜单选择"Tools/导出Unity资源包”

可以看到实际包含的就只有跟prefab相关的资源

如果选择"导出Unity资源包(包含脚本)",会将Cube上包含的TestBehaviour也加入到列表内

列表内确认需要的资源后点击底部的导出按钮,即可导出package

参考文档

Editor界面编写:https://docs.unity.cn/Manual/UIE-HowTo-CreateEditorWindow.html

创作不易,如果觉得这篇文章对你有所帮助,可以动动小手,点个赞哈,ღ( ´・ᴗ・` )比心

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/176795.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

soul协议算法

逆向工程技术是指对软件或应用程序进行逆向分析以了解其内部机制和功能的过程。虽然我无法详细介绍"Soul App"的逆向工程技术&#xff0c;但以下是一些常见的逆向工程技术&#xff0c;可能与你的研究相关&#xff1a; 1. 反汇编&#xff08;Disassembly&#xff09;…

[javaweb]——HTTP请求与响应协议,常见响应状态码(如:404)

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 HTTP概述 &#x1f4d5;概念&#xff1a;Hyper Text Transfer Protocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则。 &#x1f4d5;特点&#xff1a; &#x1f4d5;插播…

ORANGE室内高尔夫—韩国室内模拟高尔夫原装进口真实体验身临其境

ORANGE室内高尔夫—韩国室内模拟高尔夫 真实体验 身临其境 室内高尔夫的产品优势&#xff1a; 1. 实际高尔夫球场的限制&#xff1a;室内高尔夫可以弥补室外高尔夫球场数量有限的问题&#xff0c;使得更多人能够享受高尔夫运动。 2. 天气和季节的限制&#xff1a;室内高尔夫可…

Expected indentation of 16 spaces but found 8 spaces.eslintvue/script-indent

问题&#xff1a;Expected indentation of 16 spaces but found 8 spaces.eslintvue/script-indent 原因&#xff1a; 严格地检查缩进问题&#xff0c;并不是报错 解决&#xff1a; 方法一&#xff1a;我们可以关闭这个检查规则&#xff08;好像没用&#xff09; .eslintrc.js…

一台服务器安装两个mysql、重置数据库用于测试使用

文章目录 一、切数据库数据存储文件夹已经存在数据库数据文件夹新建数据库数据文件夹 二、安装第二个mysql安装新数据库初始化数据库数据启动数据库关闭数据库 参考文档 一、切数据库数据存储文件夹 这个方法可以让你不用安装新的数据库&#xff0c;就可以得到一个全新的一个数…

图傅里叶变换

目录 什么是图信号&#xff1f; 如何理解图信号的”谱“&#xff1f; 图傅里叶变换是什么&#xff1f; 图傅里叶变换中特征值和图信号的总变差有什么关系&#xff1f; 让我们先总结一下&#xff0c;我们想要把图信号 正交分解到一组基 上&#xff1b; 那么怎么得到&#x…

MySQL 基础学习笔记(二)

目录 1 约束1.1 约束概述1.2 非空约束1.3 唯一约束1.4 主键约束1.5 默认约束1.6 外键约束 2 数据库设计2.1 数据库设计概述2.2 表关系 3 多表查询3.1 多表查询概述3.2 内连接查询3.3 外连接查询3.4 子查询 4 事务4.1 事务概述4.2 四大特征 1 约束 1.1 约束概述 约束是作用于表…

Labview2018安装教程(超级详细)

网盘资源见文末 一 .简介 LabVIEW 2017是National Instruments&#xff08;NI&#xff09;开发的一款图形化编程环境。LabVIEW是一种流程导向的编程语言&#xff0c;它使用图形符号表示程序的逻辑和数据流&#xff0c;并且以数据流的方式执行程序&#xff0c;使得用户可以通过…

双证齐发!移远通信通过ISO 26262功能安全流程认证及产品认证

近日&#xff0c;国际知名的认证和咨询机构法国BV&#xff08;Bureau Veritas&#xff09;向移远通信颁发了ISO 26262&#xff1a;2018功能安全ASIL B流程认证证书&#xff0c;同时为移远车规级GNSS模组LG69T&#xff08;AB&#xff09;颁发了ISO 26262 ASIL-B产品认证证书。移…

Java多线程篇(13)——FutureTask、Disruptor的使用

文章目录 FutureTaskCompletionServiceCompletableFuture DisruptorDisruptor 核心概念运行流程不同生产者模式的区别Disruptor设计精髓 FutureTask 现有一个场景&#xff0c;10个线程执行10个任务&#xff0c;然后主线程获取任务结果。 比较广泛的一个说法就是&#xff0c;r…

Django开发实例总结(入门级、4.2.6、详细)

目录 概述 Django的核心组件包括 Django的项目结构 创建工程&#xff08;4.2.6&#xff09; 实例一&#xff1a;Hello world 实例二&#xff1a;访问一个自定义主页 实例三&#xff1a;通过登录跳转到主页 实例四&#xff1a;主页添加静态文件&#xff0c;包含js、css、…

MVCC(多版本并发控制)

一、什么是MVCC MVCC是为了解决数据库在不加锁的前提下提升并发性和读取效率的一种思想 数据库有已下几种并发情况 读-读&#xff1a;不会产生并发问题读-写&#xff1a;发生隔离性问题&#xff0c;可能导致脏读、幻读、不可重复度写-写&#xff1a;可能存在数据丢失 为了防…

CRM软件助力企业科学决策

我们常说“选择大于努力”&#xff0c;这对于企业发展同样适用。每一家企业管理者在日常工作中都要做大量决策&#xff0c;员工只是将决策落地&#xff0c;而这些决策往往决定了公司大大小小项目实施的顺利与否。因此&#xff0c;采用CRM软件助力企业科学决策显得十分关键。 越…

缓存击穿只会逻辑过期 OR 互斥锁?深入思考 == 鹤立鸡群

网上但凡看得见的文章&#xff0c;大部分在说缓存穿透时都是无脑分布式锁 / 逻辑过期&#xff0c;分布式锁一点问题都没有么&#xff1f;逻辑过期一点问题都没有么&#xff1f;还能不能再进一步优化&#xff1f; 在聊聊缓存击穿的双重判定锁之前&#xff0c;我们将按照循循渐进…

WebSocket协议在java中的应用

文章目录 一、WebSocket介绍1.Http和WebSocket比较&#xff1a;2.应用场景 二、WebSocket使用步骤1.客户端搭建2.导入maven坐标3.导入WebSocket服务端组件WebSocketServer&#xff0c;用于和客户端通信1.ServerEndpoint2.OnOpen3.OnMessage4.OnClose 4.导入配置类WebSocketConf…

【进程】利用 Linux 下的 /proc/pid/ 的内容学习进程

1. 进程号 在计算机中&#xff0c;每一个进程都有一个进程号&#xff0c;进程号类似于一个索引&#xff0c;操作系统就是通过这个进程号快速地找到进程。在 linux 使用 ps -aux 查看进程&#xff0c;可以看到进程号pid&#xff1a; rootswd-Lenovo-G40-80:/proc/4234# ps -au…

设计模式之两阶段终止模式

文章目录 1. 简介 2. 常见思路3. 代码实战 1. 简介 两阶段终止模式&#xff08;Two-Phase Termination Pattern&#xff09;是一种软件设计模式&#xff0c;用于管理线程或进程的生命周期。它包括两个阶段&#xff1a;第一阶段是准备阶段&#xff0c;该阶段用于准备线程或进程…

arcgis删除细长图斑的方法

1、有一张图斑数据如下&#xff1a; 如上图&#xff0c;有很多细长的面要素&#xff0c;需要保留的仅是图中的块状要素。 2、首先要将被合并的要素进行拆分&#xff0c;具体拆分步骤如下&#xff1a; 将所有要素选中&#xff0c;点击高级编辑中的拆分按钮。 3、拆分后图斑就…

汽车贴膜店展示服务预约小程序的作用是什么

很多家庭都有车辆&#xff0c;除了车身自带颜色或外观&#xff0c;部分消费者会选择贴车衣、改色膜以及其它装饰类服务&#xff1b;而市场高需求下也促进了商家生意增长。 但随着线上化程度加深&#xff0c;传统线下门店也面临多重困境&#xff0c;品牌需要线上发展获得生意及…