【unity游戏开发——编辑器扩展】AssetDatabase公共类在编辑器环境中管理和操作项目中的资源
注意
:考虑到编辑器扩展的内容比较多,我将编辑器扩展的内容分开,并全部整合放在【unity游戏开发——编辑器扩展】专栏里,感兴趣的小伙伴可以前往逐一查看学习。
文章目录
- 前言
- 一、AssetDatabase常用API
- 1、创建资源
- 1.1 API
- 1.2 示例
- 2、创建文件夹
- 2.1 API
- 2.2 示例
- 3、拷贝资源
- 3.1 API
- 3.2 示例
- 4、移动资源
- 4.1 API
- 4.2 示例
- 5、删除资源
- 5.1 API
- 5.2 示例
- 6、批量删除资源
- 6.1 API
- 6.2 示例
- 7、获取资源路径
- 7.1 API
- 7.2 示例
- 8、根据路径加载资源
- 8.1 API
- 8.2 示例
- 9、刷新项目资源
- 9.1 API
- 9.2 示例
- 10、返回资源所属的AB包名
- 10.1 API
- 10.2 示例
- 二、最终代码
- 专栏推荐
- 完结
前言
AssetDatabase公共类是 Unity 引擎中的一个编辑器类,用于在编辑器环境中管理和操作项目中的资源(Assets)。它提供了一系列静态方法,使得开发者能够在编辑器脚本中进行资源的创建、拷贝、移动、删除等操作。
官方文档:AssetDatabase
一、AssetDatabase常用API
1、创建资源
1.1 API
我们可以通过代码动态创建一些资源
AssetDatabase.CreateAsset(资源,路径);
注意:
- 路径从
Assets/...
开始 - 不能在
StreamingAssets
中创建资源, - 不能创建预设体
- 只能创建资源相关,例如材质球等
- 路径需要写后缀
1.2 示例
using UnityEditor;
using UnityEngine;public class TestAssetDatabaseEditorWindow : EditorWindow
{[MenuItem("编辑器拓展/自定义窗口拓展/AssetDatabase窗口拓展")]private static void OpenWindow(){TestAssetDatabaseEditorWindow win = EditorWindow.GetWindow<TestAssetDatabaseEditorWindow>();win.Show();}private void OnGUI(){// 创建资源按钮if (GUILayout.Button("创建资源")){// 创建一个材质,使用URP的Lit着色器Material mat = new Material(Shader.Find("Universal Render Pipeline/Lit"));// 将材质保存为Assets/Resources/TestURPLitMaterial.matAssetDatabase.CreateAsset(mat, "Assets/Resources/TestURPLitMaterial.mat");}}
}
效果
2、创建文件夹
2.1 API
AssetDatabase.CreateFolder(父文件夹路径,新文件夹名)
注意:
- 父文件夹路径从
Assets/...
开始
2.2 示例
using UnityEditor;
using UnityEngine;public class TestAssetDatabaseEditorWindow : EditorWindow
{[MenuItem("编辑器拓展/自定义窗口拓展/AssetDatabase窗口拓展")]private static void OpenWindow(){TestAssetDatabaseEditorWindow win = EditorWindow.GetWindow<TestAssetDatabaseEditorWindow>();win.Show();}private void OnGUI(){// 创建文件夹按钮if (GUILayout.Button("创建文件夹")){// 在Assets/Resources下创建一个名为MyTestFolder的文件夹AssetDatabase.CreateFolder("Assets/Resources", "MyTestFolder");}}
}
效果
3、拷贝资源
3.1 API
AssetDatabase.CopyAsset(源资源路径,目标路径)
注意:
- 需要写后缀名
- 路径从
Assets/...
开始
3.2 示例
using UnityEditor;
using UnityEngine;public class TestAssetDatabaseEditorWindow : EditorWindow
{[MenuItem("编辑器拓展/自定义窗口拓展/AssetDatabase窗口拓展")]private static void OpenWindow(){TestAssetDatabaseEditorWindow win = EditorWindow.GetWindow<TestAssetDatabaseEditorWindow>();win.Show();}private void OnGUI(){// 拷贝资源按钮if (GUILayout.Button("拷贝资源")){// 将Assets/Resources/TestURPLitMaterial.mat拷贝到Assets/Resources/MyTestFolder/TestURPLitMaterialCopy.matAssetDatabase.CopyAsset("Assets/Resources/TestURPLitMaterial.mat", "Assets/Resources/MyTestFolder/TestURPLitMaterialCopy.mat");}}
}
效果
4、移动资源
4.1 API
AssetDatabase.MoveAsset(老路径, 新路径);
注意:
- 路径从
Assets/...
开始
4.2 示例
using UnityEditor;
using UnityEngine;public class TestAssetDatabaseEditorWindow : EditorWindow
{[MenuItem("编辑器拓展/自定义窗口拓展/AssetDatabase窗口拓展")]private static void OpenWindow(){TestAssetDatabaseEditorWindow win = EditorWindow.GetWindow<TestAssetDatabaseEditorWindow>();win.Show();}private void OnGUI(){// 移动资源按钮if (GUILayout.Button("移动资源")){// 将Assets/Resources/MyTestFolder/TestURPLitMaterialCopy.mat移动到Assets/Resources/TestURPLitMaterialCopy.matAssetDatabase.MoveAsset("Assets/Resources/MyTestFolder/TestURPLitMaterialCopy.mat","Assets/Resources/TestURPLitMaterialCopy.mat");}}
}
5、删除资源
5.1 API
AssetDatabase.DeleteAsset(资源路径)
注意:
- 路径从
Assets/...
开始
5.2 示例
using UnityEditor;
using UnityEngine;public class TestAssetDatabaseEditorWindow : EditorWindow
{[MenuItem("编辑器拓展/自定义窗口拓展/AssetDatabase窗口拓展")]private static void OpenWindow(){TestAssetDatabaseEditorWindow win = EditorWindow.GetWindow<TestAssetDatabaseEditorWindow>();win.Show();}private void OnGUI(){// 删除资源按钮if (GUILayout.Button("删除资源")){// Assets/Resources/TestURPLitMaterialCopy.matAssetDatabase.DeleteAsset("Assets/Resources/TestURPLitMaterialCopy.mat");}}
}
效果
6、批量删除资源
6.1 API
AssetDatabase.DeleteAssets(string[] 路径们, List<string> 用于存储删除失败的路径)
注意:
- 路径从
Assets/...
开始
6.2 示例
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;public class TestAssetDatabaseEditorWindow : EditorWindow
{[MenuItem("编辑器拓展/自定义窗口拓展/AssetDatabase窗口拓展")]private static void OpenWindow(){TestAssetDatabaseEditorWindow win = EditorWindow.GetWindow<TestAssetDatabaseEditorWindow>();win.Show();}private void OnGUI(){// 批量删除资源按钮if (GUILayout.Button("批量删除资源")){// 创建一个列表,用于存储删除失败的资源List<string> failList = new List<string>();// 批量删除Assets/Resources/TestURPLitMaterial.mat和Assets/Resources/TestURPLitMaterial2.matAssetDatabase.DeleteAssets(new string[] { "Assets/Resources/TestURPLitMaterial.mat", "Assets/Resources/TestURPLitMaterial2.mat" }, failList);// 遍历删除失败的资源列表,并输出到控制台for (int i = 0; i < failList.Count; i++){Debug.Log(failList[i]);}}}
}
效果
7、获取资源路径
7.1 API
AssetDatabase.GetAssetPath(资源)
注意:
- 可以配合
Selection
选中资源一起使用
7.2 示例
using UnityEditor;
using UnityEngine;public class TestAssetDatabaseEditorWindow : EditorWindow
{[MenuItem("编辑器拓展/自定义窗口拓展/AssetDatabase窗口拓展")]private static void OpenWindow(){TestAssetDatabaseEditorWindow win = EditorWindow.GetWindow<TestAssetDatabaseEditorWindow>();win.Show();}private void OnGUI(){// 获取资源路径按钮if (GUILayout.Button("获取资源路径")){// 输出当前选中的资源的路径Debug.Log(AssetDatabase.GetAssetPath(Selection.activeObject));}}
}
效果
8、根据路径加载资源
8.1 API
AssetDatabase.LoadAssetAtPath(资源路径)
注意:
- 路径从
Assets/...
开始
8.2 示例
using UnityEditor;
using UnityEngine;public class TestAssetDatabaseEditorWindow : EditorWindow
{[MenuItem("编辑器拓展/自定义窗口拓展/AssetDatabase窗口拓展")]private static void OpenWindow(){TestAssetDatabaseEditorWindow win = EditorWindow.GetWindow<TestAssetDatabaseEditorWindow>();win.Show();}private void OnGUI(){// 加载资源按钮if (GUILayout.Button("加载资源")){// 加载Assets/测试文件.txt,并输出其名称TextAsset txt = AssetDatabase.LoadAssetAtPath<TextAsset>("Assets/测试文件.txt");Debug.Log(txt.name);}}
}
效果
9、刷新项目资源
9.1 API
AssetDatabase.Refresh()
是Unity编辑器API中的一个重要方法,用于刷新项目资源数据库。当你在Unity项目文件夹中添加、删除或修改资源文件时,这个方法可以确保Unity编辑器能够识别这些更改。
AssetDatabase.Refresh()
Unity通常会自动在适当时候调用刷新,但有时需要手动触发。比如当你通过代码创建或修改了资源文件,需要执行刷新,我们才能在Project窗口中显示最新的内容,否则每次都需要手动调用ctrl+R
刷新,这个API其实就是帮我们省略手动刷新这一步。
9.2 示例
using System.IO;
using UnityEditor;
using UnityEngine;public class TestAssetDatabaseEditorWindow : EditorWindow
{[MenuItem("编辑器拓展/自定义窗口拓展/AssetDatabase窗口拓展")]private static void OpenWindow(){TestAssetDatabaseEditorWindow win = EditorWindow.GetWindow<TestAssetDatabaseEditorWindow>();win.Show();}private void OnGUI(){// 创建文件并刷新资源按钮if (GUILayout.Button("创建文件并刷新资源")){// 创建文件时,如果不使用Unity相关API的话,需要调用刷新,才能在Project窗口中显示File.WriteAllText(Application.dataPath + "/Resources/test2.txt", "内容内容内容");AssetDatabase.Refresh();}}
}
效果
10、返回资源所属的AB包名
10.1 API
string bundleName = AssetDatabase.GetImplicitAssetBundleName(资源路径);
注意:
- 路径从
Assets/...
开始 - 返回该资源隐式关联的AssetBundle名称(如果有的话)
- 如果资源没有被分配到任何AssetBundle,返回空字符串(“”)
10.2 示例
using UnityEditor;
using UnityEngine;public class TestAssetDatabaseEditorWindow : EditorWindow
{[MenuItem("编辑器拓展/自定义窗口拓展/AssetDatabase窗口拓展")]private static void OpenWindow(){TestAssetDatabaseEditorWindow win = EditorWindow.GetWindow<TestAssetDatabaseEditorWindow>();win.Show();}private void OnGUI(){// 返回资源所属的AB包名按钮if (GUILayout.Button("返回资源所属的AB包名")){string assetPath = "Assets/Resources/MyPrefab.prefab";string bundleName = AssetDatabase.GetImplicitAssetBundleName(assetPath);if (!string.IsNullOrEmpty(bundleName)){Debug.Log($"资源 {assetPath} 属于AssetBundle: {bundleName}");}else{Debug.Log($"资源 {assetPath} 不属于任何AssetBundle");}}}
}
效果
二、最终代码
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;public class TestAssetDatabaseEditorWindow : EditorWindow
{[MenuItem("编辑器拓展/自定义窗口拓展/AssetDatabase窗口拓展")]private static void OpenWindow(){TestAssetDatabaseEditorWindow win = EditorWindow.GetWindow<TestAssetDatabaseEditorWindow>();win.Show();}private void OnGUI(){// 创建资源按钮if (GUILayout.Button("创建资源")){// 创建一个材质,使用URP的Lit着色器Material mat = new Material(Shader.Find("Universal Render Pipeline/Lit"));// 将材质保存为Assets/Resources/TestURPLitMaterial.matAssetDatabase.CreateAsset(mat, "Assets/Resources/TestURPLitMaterial.mat");}// 创建文件夹按钮if (GUILayout.Button("创建文件夹")){// 在Assets/Resources下创建一个名为MyTestFolder的文件夹AssetDatabase.CreateFolder("Assets/Resources", "MyTestFolder");}// 拷贝资源按钮if (GUILayout.Button("拷贝资源")){// 将Assets/Resources/TestURPLitMaterial.mat拷贝到Assets/Resources/MyTestFolder/TestURPLitMaterialCopy.matAssetDatabase.CopyAsset("Assets/Resources/TestURPLitMaterial.mat", "Assets/Resources/MyTestFolder/TestURPLitMaterialCopy.mat");}// 移动资源按钮if (GUILayout.Button("移动资源")){// 将Assets/Resources/MyTestFolder/TestURPLitMaterialCopy.mat移动到Assets/Resources/TestURPLitMaterialCopy.matAssetDatabase.MoveAsset("Assets/Resources/MyTestFolder/TestURPLitMaterialCopy.mat","Assets/Resources/TestURPLitMaterialCopy.mat");}// 删除资源按钮if (GUILayout.Button("删除资源")){// Assets/Resources/TestURPLitMaterialCopy.matAssetDatabase.DeleteAsset("Assets/Resources/TestURPLitMaterialCopy.mat");}// 批量删除资源按钮if (GUILayout.Button("批量删除资源")){// 创建一个列表,用于存储删除失败的资源List<string> failList = new List<string>();// 批量删除Assets/Resources/TestURPLitMaterial.mat和Assets/Resources/TestURPLitMaterial2.matAssetDatabase.DeleteAssets(new string[] { "Assets/Resources/TestURPLitMaterial.mat", "Assets/Resources/TestURPLitMaterial2.mat" }, failList);// 遍历删除失败的资源列表,并输出到控制台for (int i = 0; i < failList.Count; i++){Debug.Log(failList[i]);} }// 获取资源路径按钮if (GUILayout.Button("获取资源路径")){// 输出当前选中的资源的路径Debug.Log(AssetDatabase.GetAssetPath(Selection.activeObject));}// 加载资源按钮if (GUILayout.Button("加载资源")){// 加载Assets/测试文件.txt,并输出其名称TextAsset txt = AssetDatabase.LoadAssetAtPath<TextAsset>("Assets/测试文件.txt");Debug.Log(txt.name);}// 创建文件并刷新资源按钮if (GUILayout.Button("创建文件并刷新资源")){// 创建文件时,如果不使用Unity相关API的话,需要调用刷新,才能在Project窗口中显示File.WriteAllText(Application.dataPath + "/Resources/test2.txt", "内容内容内容");AssetDatabase.Refresh();}// 返回资源所属的AB包名按钮if (GUILayout.Button("返回资源所属的AB包名")){string assetPath = "Assets/Resources/MyPrefab.prefab";string bundleName = AssetDatabase.GetImplicitAssetBundleName(assetPath);if (!string.IsNullOrEmpty(bundleName)){Debug.Log($"资源 {assetPath} 属于AssetBundle: {bundleName}");}else{Debug.Log($"资源 {assetPath} 不属于任何AssetBundle");}}}
}
专栏推荐
地址 |
---|
【unity游戏开发入门到精通——C#篇】 |
【unity游戏开发入门到精通——unity通用篇】 |
【unity游戏开发入门到精通——unity3D篇】 |
【unity游戏开发入门到精通——unity2D篇】 |
【unity实战】 |
【制作100个Unity游戏】 |
【推荐100个unity插件】 |
【实现100个unity特效】 |
【unity框架/工具集开发】 |
【unity游戏开发——模型篇】 |
【unity游戏开发——InputSystem】 |
【unity游戏开发——Animator动画】 |
【unity游戏开发——UGUI】 |
【unity游戏开发——联网篇】 |
【unity游戏开发——优化篇】 |
【unity游戏开发——shader篇】 |
【unity游戏开发——编辑器扩展】 |
完结
好了,我是向宇
,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!
相关文章:

【unity游戏开发——编辑器扩展】AssetDatabase公共类在编辑器环境中管理和操作项目中的资源
注意:考虑到编辑器扩展的内容比较多,我将编辑器扩展的内容分开,并全部整合放在【unity游戏开发——编辑器扩展】专栏里,感兴趣的小伙伴可以前往逐一查看学习。 文章目录 前言一、AssetDatabase常用API1、创建资源1.1 API1.2 示例 …...

BLE协议全景图:从0开始理解低功耗蓝牙
BLE(Bluetooth Low Energy)作为一种针对低功耗场景优化的通信协议,已经广泛应用于智能穿戴、工业追踪、智能家居、医疗设备等领域。 本文是《BLE 协议实战详解》系列的第一篇,将从 BLE 的发展历史、协议栈结构、核心机制和应用领域出发,为后续工程实战打下全面认知基础。 …...

【机器学习基础】机器学习入门核心算法:GBDT(Gradient Boosting Decision Tree)
机器学习入门核心算法:GBDT(Gradient Boosting Decision Tree) 1. 算法逻辑2. 算法原理与数学推导2.1 目标函数2.2 负梯度计算2.3 决策树拟合2.4 叶子权重计算2.5 模型更新 3. 模型评估评估指标防止过拟合 4. 应用案例4.1 金融风控4.2 推荐系…...

基于开源AI大模型AI智能名片S2B2C商城小程序源码的销售环节数字化实现路径研究
摘要:在数字化浪潮下,企业销售环节的转型升级已成为提升竞争力的核心命题。本文基于清华大学全球产业研究院《中国企业数字化转型研究报告(2020)》提出的“提升销售率与利润率、打通客户数据、强化营销协同、构建全景用户画像、助…...

Spring Cache核心原理与快速入门指南
文章目录 前言一、Spring Cache核心原理1.1 架构设计思想1.2 运行时执行流程1.3 核心组件协作1.4 关键机制详解1.5 扩展点设计1.6 与Spring事务的协同 二、快速入门实战三、局限性3.1 多级缓存一致性缺陷3.2 分布式锁能力缺失3.3 事务集成陷阱 总结 前言 在当今高并发、低延迟…...

Redisson学习专栏(四):实战应用(分布式会话管理,延迟队列)
文章目录 前言一、为什么需要分布式会话管理?1.1 使用 Redisson 实现 Session 共享 二、订单超时未支付?用延迟队列精准处理2.1 RDelayedQueue 核心机制2.2 订单超时处理实战 总结 前言 在现代分布式系统中,会话管理和延迟任务处理是两个核心…...

java程序从服务器端到Lambda函数的迁移与优化
source:https://www.jfokus.se/jfokus24-preso/From-Serverful-to-Serverless-Java.pdf 从传统的服务器端Java应用,到如今的无服务器架构。这不仅仅是技术名词的改变,更是开发模式和运维理念的一次深刻变革。先快速回顾一下我们熟悉的“服务…...

使用yocto搭建qemuarm64环境
环境 yocto下载 # 源码下载 git clone git://git.yoctoproject.org/poky git reset --hard b223b6d533a6d617134c1c5bec8ed31657dd1268 构建 # 编译镜像 export MACHINE"qemuarm64" . oe-init-build-env bitbake core-image-full-cmdline 运行 # 跑虚拟机 export …...
Vue 3前沿生态整合:WebAssembly与TypeScript深度实践
一、Vue 3 WebAssembly:突破性能天花板 01、WebAssembly:浏览器中的原生性能 WebAssembly(Wasm)是一种可在现代浏览器中运行的二进制指令格式,其性能接近原生代码。结合Vue 3的响应式架构,我们可以在前端…...

Linux系统下安装配置 Nginx
Windows Nginx https://nginx.org/en/download.htmlLinux Nginx https://nginx.org/download/nginx-1.24.0.tar.gz解压 tar -zxvf tar -zxvf nginx-1.18.0.tar.gz #解压安装依赖(如未安装) yum groupinstall "Development Tools" -y yum…...
Kotlin 中集合遍历有哪几种方式?
1 for-in 循环(最常用) val list listOf("A", "B", "C") for (item in list) {print("$item ") }// A B C 2 forEach 高阶函数 val list listOf("A", "B", "C") list.forEac…...
图像卷积OpenCV C/C++ 核心操作
图像卷积:OpenCV C 核心操作 图像卷积是图像处理和计算机视觉领域最基本且最重要的操作之一。它通过一个称为卷积核(或滤波器)的小矩阵,在输入图像上滑动,并对核覆盖的图像区域执行元素对应相乘后求和的运算ÿ…...

LiveGBS作为下级平台GB28181国标级联2016|2022对接海康大华宇视华为政务公安内网等GB28181国标平台查看级联状态及会话
LiveGBS作为下级平台GB28181国标级联2016|2022对接海康大华宇视华为政务公安内网等GB28181国标平台查看级联状态及会话 1、GB/T28181级联概述2、搭建GB28181国标流媒体平台3、获取上级平台接入信息3.1、向下级提供信息3.2、上级国标平台添加下级域3.3、接入LiveGBS示例 4、配置…...
leetcode17.电话号码的字母组合:字符串映射与回溯的巧妙联动
一、题目深度解析与字符映射逻辑 题目描述 给定一个仅包含数字 2-9 的字符串 digits,返回所有它能表示的字母组合。数字与字母的映射关系如下(与电话按键相同): 2: "abc", 3: "def", 4: "ghi", …...

Gartner《2025 年软件工程规划指南》报告学习心得
一、引言 软件工程领域正面临着前所未有的变革与挑战。随着生成式人工智能(GenAI)等新兴技术的涌现、市场环境的剧烈动荡以及企业对软件工程效能的更高追求,软件工程师们必须不断适应和拥抱变化,以提升自身竞争力并推动业务发展。Gartner 公司发布的《2025 年软件工程规划…...
数据库 | 使用timescaledb和大模型进行数据分析
时序数据库:timescaledb 大模型:通义千问2.5 对话开始前提示词: 我正在做数据分析,以下是已知信息: 数据库:timescaledb,表名:dm_tag_value,tag_name列是位号名,app_time列是时间,…...
快速阅读源码
Doxygen 轻松生成包含类图、调用关系图的 HTML 和 PDF 文档, Graphviz 可以用来生成类图、调用图 sudo apt-get install doxygen graphviz brew install doxygen graphviz#HTML 文档: open docs/html/index.html一、Doxyfile配置: Doxyfile 文件 doxygen Doxyfile P…...
linux创建虚拟网卡和配置多ip
1.展示当前网卡信息列表: linux上: ip a ifconfigwindows上: ipconfig 2.创建虚拟网卡对: sudo ip link add name veth0 type veth peer name veth1 在 ip link add 命令中,type 参数可以指定多种虚拟网络设备类型&…...

Java Class类文件结构
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
AI问答-Vue3+TS:reactive创建一个响应式数组,用一个新的数组对象来替换它,同时保持响应性
在 Vue 3 中,当你使用 reactive 创建一个响应式数组后,如果你想用一个新的数组对象来替换它,同时保持响应性,有几种方法可以实现 方法一:直接替换整个数组(推荐) import { reactive } from vu…...

quasar electron mode如何打包无边框桌面应用程序
预览 开源项目Tokei Kun 一款简洁的周年纪念app,现已发布APK(安卓)和 EXE(Windows) 项目仓库地址:Github Repo 应用下载链接:Github Releases Preparation for Electron quasar dev -m elect…...

【HW系列】—Windows日志与Linux日志分析
文章目录 一、Windows日志1. Windows事件日志2. 核心日志类型3. 事件日志分析实战详细分析步骤 二、Linux日志1. 常见日志文件2. 关键日志解析3. 登录爆破检测方法日志分析核心要点 一、Windows日志 1. Windows事件日志 介绍:记录系统、应用程序及安全事件&#x…...

VIN码识别解析接口如何用C#进行调用?
一、什么是VIN码识别解析接口? VIN码不仅是车辆的“身份证”,更是连接制造、销售、维修、保险、金融等多个环节的数字纽带。而VIN码查询API,正是打通这一链条的关键工具。 无论是汽车电商平台、二手车商、维修厂,还是保险公司、金…...

动态规划之网格图模型(一)
文章目录 动态规划之网格图模型(一)LeetCode 64. 最小路径和思路Golang 代码 LeetCode 62. 不同路径思路Golang 代码 LeetCode 63. 不同路径 II思路Golang 代码 LeetCode 120. 三角形最小路径和思路Golang 代码 LeetCode 3393. 统计异或值为给定值的路径…...

PCB设计实践(三十)地平面完整性
在高速数字电路和混合信号系统设计中,地平面完整性是决定PCB性能的核心要素之一。本文将从电磁场理论、信号完整性、电源分配系统等多个维度深入剖析地平面设计的关键要点,并提出系统性解决方案。 一、地平面完整性的电磁理论基础 电流回流路径分析 在PC…...
x86_64-apple-ios-simulator 错误
Could not find module ImagePicker for target x86_64-apple-ios-simulator; found: arm64, arm64-apple-ios-simulator 解决方案一 添加 arm64。 搜索 Excluded Architectures ,添加arm64 解决方案二 在Podfild中,添加佐料。在文件的最下方添加如…...

使用ray扩展python应用之流式处理应用
流式处理就是数据一来,咱们就得赶紧处理,不能攒批再算。这里的实时不是指瞬间完成,而是要在数据产生的那一刻,或者非常接近那个时间点,就做出响应。这种处理方式,我们称之为流式处理。 流式处理的应用场景…...

IP证书的作用与申请全解析:从安全验证到部署实践
在网络安全领域,IP证书(IP SSL证书)作为传统域名SSL证书的补充方案,专为公网IP地址提供HTTPS加密与身份验证服务。本文将从技术原理、应用场景、申请流程及部署要点四个维度,系统解析IP证书的核心价值与操作指南。 一…...
第四十一天打卡
简单CNN 知识回顾 数据增强 卷积神经网络定义的写法 batch归一化:调整一个批次的分布,常用与图像数据 特征图:只有卷积操作输出的才叫特征图 调度器:直接修改基础学习率 卷积操作常见流程如下: 1. 输入 → 卷积层 →…...
C++中指针常量和常量指针的区别
C中指针常量和常量指针的区别 前言 在 C/C 编程中,指针是一个非常重要的概念,而指针常量和常量指针又是指针的两种特殊形式,它们在实际开发中有着不同的应用场景和语义,理解它们的区别对于编写高质量的代码至关重要。本文将详细…...