当前位置: 首页 > news >正文

Unity的IPostBuildPlayerScriptDLLs:深入解析与实用案例

Unity IPostBuildPlayerScriptDLLs

Unity IPostBuildPlayerScriptDLLs是Unity引擎中的一个非常有用的功能,它可以让开发者在构建项目后自定义哪些文件需要被复制到输出目录中。这个功能可以帮助开发者更好地控制项目的构建过程,确保输出目录只包含必要的DLL文件。在本文中,我们将介绍Unity IPostBuildPlayerScriptDLLs的使用方法,并提供三个使用例子,帮助读者更好地理解这个功能。

Unity IPostBuildPlayerScriptDLLs的使用方法

Unity IPostBuildPlayerScriptDLLs是一个接口,它包含一个名为OnPostBuildPlayerScriptDLLs方法。在这个方法中,我们可以编写我们需要执行的操作,并且可以获取构建报告。下是一个简单的例子,演示了如何在构建项目后自定义哪些DLL文件需要被复制到输出目录中:

using UnityEditor.Build;
using UnityEditor.Build.Reporting;
using UnityEditor.Callbacks;
using System.IO;public class BuildHandler : IPostBuildPlayerScriptDLLs
{public int callbackOrder { get { return 0; } }public void OnPostBuildPlayerScriptDLLs(BuildReport report){string outputDirectory = Path.GetDirectoryName(report.summary.outputPath);string[] dllFiles = Directory.GetFiles(outputDirectory, "*.dll", SearchOption.AllDirectories);foreach (string dllFile in dllFiles){if (!dllFile.Contains("MyNamespace")){File.Delete(dllFile);}}}
}

在这个例子中,我们实现了IPostBuildPlayerScriptDLLs接口,并重写了它的OnPostBuildPlayerScriptDLLs方法。在这个方法中我们首先获取输出目录的路径。然后,我们遍历输出目录中的所有DLL文件,如果DLL文件的名称不包含"MyNamespace",则将其删除。

使用例子

下面是三个使用Unity IPostBuildPlayerScriptDLLs的例子,每个例子都供了具体的实现。

例子1:只复制指定的DLL文件

在这个例子中,我们将演示如何在构建项目后只复制指定的DLL文件。

using UnityEditor.Build;
using UnityEditor.Build.Reporting;
using UnityEditor.Callbacks;
using System.IO;public class BuildHandler : IPostBuildPlayerScriptDLLs
{public int callbackOrder { get { return 0; } }public void OnPostBuildPlayerScriptDLLs(BuildReport report){string outputDirectory = Path.GetDirectoryName(report.summary.outputPath);string[] dllFiles = Directory.GetFiles(outputDirectory, "*.dll", SearchOption.AllDirectories);foreach (string dllFile in dllFiles){if (dllFile.Contains("MyNamespace")){File.Copy(dllFile, Path.Combine(outputDirectory, Path.GetFileName(dllFile)), true);}}}
}

在这个例子中,我们实现了IPostBuildPlayerScriptDLLs接口,并重写了它的OnPostBuildPlayerScriptDLLs方法。在这个方法中,我们首先获取输出目录的路径。然后,我们遍历输出目录中的所有DLL文件,如果DLL文件的名称含"MyNamespace",则将其复制到输出目录中。

例子2:排除指定的DLL文件

在这个例子中,将演示如何在构建项目后排除指定的DLL文件。

using UnityEditor.Build;
using UnityEditor.Build.Reporting;
using UnityEditor.Callbacks;
using System.IO;public class BuildHandler : IPostBuildPlayerScriptDLLs
{public int callbackOrder { get { return 0; } }public void OnPostBuildPlayerScriptDLLs(BuildReport report){string outputDirectory = Path.GetDirectoryName(report.summary.outputPath);string[] dllFiles = Directory.GetFiles(outputDirectory, "*.dll", SearchOption.AllDirectories);foreach (string dllFile in dllFiles){if (!dllFile.Contains("MyNamespace")){File.Delete(dllFile);}}}
}

在这个例子中,我们实现了IPostBuildPlayerScriptDLLs接口,并重写了它的OnPostBuildPlayerScriptDLLs方法。在这个方法中,我们首先获取输出目录的路径。然后,我们遍历输出目录中的所有DLL文件,如果DLL文件的名称不包含"MyNamespace",则将其删除。

例子3:根据平台选择DLL文件

在这个例子中,我们将演示如何在构建项目后根据平台选择需要被复制到输出目录中的DLL文件。

using UnityEditor.Build;
using UnityEditor.Build.Reporting;
using UnityEditor.Callbacks;
using System.IO;public class BuildHandler : IPostBuildPlayerScriptDLLs
{public int callbackOrder { get { return 0; } }public void OnPostBuildPlayerScriptDLLs(BuildReport report){string outputDirectory = Path.GetDirectoryName(report.summary.outputPath);string[] dllFiles = Directory.GetFiles(outputDirectory, "*.dll", SearchOption.AllDirectories);if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android){foreach (string dllFile in dllFiles){if (dllFile.Contains("Android")){File.Copy(dllFile, Path.Combine(outputDirectory, Path.GetFileName(dllFile)), true);}}}else if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.iOS){foreach (string dllFile in dllFiles){if (dllFile.Contains("iOS")){File.Copy(dllFile, Path.Combine(outputDirectory, Path.GetFileName(dllFile)), true);}}}else{foreach (string dllFile in dllFiles){if (dllFile.Contains("Windows")){File.Copy(dllFile, Path.Combine(outputDirectory, Path.GetFileName(dllFile)), true);}}}}
}

在这个例子中,我们实现了IPostBuildPlayerScriptDLLs接口,并重写了它的OnPostBuildPlayerScriptDLLs方法。在这个方法中,我们首先获取输出目录的路径。然后,我们根据当前的平台选择需要被复制到输出目录的DLL文件。如果当前的平台是Android,则只复制包含"Android"的DLL文件。如果当前的平台是iOS,则只复制包含"iOS"的DLL文件。如果当前的平台不是Android或iOS,则只复制包含"Windows"的DLL文件。

结论

Unity IPostBuildPlayerDLLs是一个非常有用的功能,可以帮助开发者更好地控制项目的构建过程,确保输出目录中只包含必要的DLL文件。在本文中,我们介绍了Unity IPostBuildPlayerScriptDLLs的方法,并提供了三个使用例子,助读者更好地理解这个功能。希望这篇文章对读者有所帮助。

相关文章:

Unity的IPostBuildPlayerScriptDLLs:深入解析与实用案例

Unity IPostBuildPlayerScriptDLLs Unity IPostBuildPlayerScriptDLLs是Unity引擎中的一个非常有用的功能,它可以让开发者在构建项目后自定义哪些文件需要被复制到输出目录中。这个功能可以帮助开发者更好地控制项目的构建过程,确保输出目录只包含必要的…...

MySQL数据库服务器安装与配置(步骤简单详细,看完可学会下载MySQL所有版本)

目录 引言 一,5.6.51数据库服务器下载 二,8.1.0最新版数据库服务器下载 三,MySQL客户端下载 引言 个人认为MySQl数据库目前推荐的两个版本系列为5.6.51和8.系列。 至于我们为什么要下载两个版本呢?是因为官方在数据库下载的结构…...

PowerDesigner16.5安装教程

一、什么是PowerDesigner PowerDesigner是Sybase的企业建模和设计解决方案,采用模型驱动方法,将业务与IT结合起来,可帮助部署有效的企业体系架构,并为研发生命周期管理提供强大的分析与设计技术。PowerDesigner独具匠心地将多种标…...

Java反射全面详解

1. 什么是反射? 首先听这个名字就有些疑惑,什么是反射,它能用来干什么呢? Java官方对反射的解释是 "反射允许对封装类的字段,方法和构造函数进行编程式访问"。这里的字段指的就是成员变量,方法…...

助力工业物联网,工业大数据之费用事实指标分析及实现【二十四】

文章目录 1:费用事实指标分析及实现2:差旅事实指标分析及实现3:网点物料事实指标分析及实现 1:费用事实指标分析及实现 目标:实现DWB层费用报销事实指标表的构建 路径 step1:目标需求step2:数据…...

Istio 安全 mTLS认证 PeerAuthentication

这里定义了访问www.ck8s.com可以使用http也可以使用https访问,两种方式都可以访问。 那么是否可以强制使用mtls方式去访问? mTLS认证 PeerAuthentication PeerAuthentication的主要作用是别人在和网格里的pod进行通信的时候,是否要求mTLS mTL…...

【MySQL】数据库基本使用

文章目录 一、数据库介绍二、数据库使用2.1 登录MySQL2.2 基本使用2.2.1 显示当前 MySQL 实例中所有的数据库列表2.2.2 创建数据库2.2.3 创建数据库表2.2.4 在表中插入数据2.2.5 在表中查询数据 三、服务器、数据库、表之间的关系四、SQL语句分类五、存储引擎 一、数据库介绍 …...

计算shell脚本执行的时间

我们在使用shell脚本进行一些批量活动的时候,在有的场景下会需要知道脚本执行用了多长的时间,一谈到这个话题,我们一般的想法就是记录时间再开始阶段,执行完成后再记录时间,然后求时间差,这样是可以的&…...

无网络环境下,如何部署Docker镜像

无网络环境下,如何部署Docker镜像 什么是Docker镜像 Docker镜像是Docker容器的基础构建块。它是一个轻量级、独立且可执行的软件包,其中包含了运行应用程序所需的所有文件系统、代码、依赖关系和配置。 Docker镜像由一系列只读层(Layers&a…...

瑞吉外卖项目----(2)缓存优化

1 缓存优化 1.0 问题说明 1.1 环境搭建 将项目推送到远程仓库里,教程在git 提交远程仓库前建议取消代码检查 创建新的分支v1.0(用于实现缓存优化)并推送到远程仓库 1.1.1 maven坐标 导入spring-data-redis的maven坐标: &l…...

c++ http url encode decode

在C++中,可以使用以下方法对URL进行编码和解码: URL编码:#include <iostream> #include <string> #include <sstream> #include <iomanip>std::string urlEncode...

@vue/composition-api功能介绍

前言 vue/composition-api 是通过一个插件的方式,为 Vue2&#xff08;2.7自带&#xff0c;2.6及以下可用&#xff09; 提供类似 Vue3 composition API 的函数式编程能力。它的实现思路主要有: 1、提供组合式函数,在函数内部追踪响应性依赖。 2、将组合产生的响应式状态保存到…...

WebSocket整合直播

由于浏览器不支持对于rtmp协议推拉流&#xff0c;所以需要后台对传输的数据进行处理&#xff0c;将数据转接&#xff0c;为了实现其实时性&#xff0c;使用websocket将数据传输 先使用obs和vlc测试正常的推拉流是否正常 然后在跑本地后台传输视频 使用JavaCV技术传输音视频 …...

【Linux】IO 篇:文件调用原理,文件描述符,FILE的内涵,解析重定向,理解缓冲区

文章目录 一、系统调用接口二、文件调用1. 文件描述符 fd2. 文件调用原理3. FILE 三、重定向dup2 四、缓冲区简易 FILE 的代码实现 文件被加载之前&#xff0c;被存在磁盘上&#xff0c;操作文件&#xff0c;文件的部分内容则会被调度到 内存中。 要分析文件&#xff0c;我们也…...

力扣:47. 全排列 II(Python3)

题目&#xff1a; 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;力扣 示例&#xff1a; 示例 1&#xff1a; 输入&#xff1a;nums [1,1,2] 输出&#xff1a;[…...

Android uart-修改串口节点名

需求: 应客户软件的需求,需要将Android系统里面的/dev/ttyS3节点名称修改为/dev/ttyS9; 实现: 1、判断 driver->name是否为"ttyS",index是否为3,如果是的话替换为ttyS9; diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c old mode 100644 new …...

【HarmonyOS】键盘遮挡输入框时,实现输入框显示在键盘上方

【关键字】 harmonyOS、键盘遮挡input&#xff0c;键盘高度监听 【写在前面】 在使用API6、API7开发HarmonyOS应用时&#xff0c;常出现页面中需要输入input&#xff0c;但是若input位置在页面下方&#xff0c;在input获取焦点的时候&#xff0c;会出现软键盘挡住input情况&a…...

day19-二叉树的最大最小深度

二叉树的最大/最小深度 给定一个二叉树 root &#xff0c;返回其最大/小深度。 二叉树的 最大/小深度 是指从根节点到最远/近叶子节点的最长路径上的节点数。 思路 求最大深度比较简单&#xff0c;我们先解决最大深度。 最大深度 递归 class Solution { public:int maxD…...

Ansible-roles

Ansible-roles 一、roles作用 把playbook剧本里的各个play看作为角色&#xff0c;将各个角色的tasks任务、vars变量、templates模板、files文件等内容放置到角色的目录中统一管理&#xff0c;需要的时候可在playbook中直接使用roles调用&#xff0c;所以roles可以实现playboo…...

NullPointerException导致手机重启案例分析

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、 Framework 层对象 空指针导致手机重启。二、解决方案&#xff0c;规避空指针三、Telecom APK 控制导致的重启举例 一、 Framework 层对象 空指针导…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

SQL Server 触发器调用存储过程实现发送 HTTP 请求

文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...

sshd代码修改banner

sshd服务连接之后会收到字符串&#xff1a; SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢&#xff1f; 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头&#xff0c…...

从零手写Java版本的LSM Tree (一):LSM Tree 概述

&#x1f525; 推荐一个高质量的Java LSM Tree开源项目&#xff01; https://github.com/brianxiadong/java-lsm-tree java-lsm-tree 是一个从零实现的Log-Structured Merge Tree&#xff0c;专为高并发写入场景设计。 核心亮点&#xff1a; ⚡ 极致性能&#xff1a;写入速度超…...