Unity for Python —— 强大的 Python 脚本支持提升 Unity 编辑器效率
内容将会持续更新,有错误的地方欢迎指正,谢谢!
拥有更好的学习体验 —— 不断努力,不断进步,不断探索 |
助力快速掌握 关键词 学习 为初学者节省宝贵的学习时间,避免困惑! |
前言:
在 Unity 开发过程中,我们常常面临一些重复性、繁琐的任务,尤其是在编辑器开发和自动化工作流方面。为了提高效率和扩展 Unity 编辑器,Unity 官方推出了 Python for Unity,它允许开发者在 Unity 编辑器中运行 Python 脚本,从而增强工作流、自动化任务和数据处理。
本文将详细介绍 Unity for Python 的功能、部署步骤、低级 API 和高级 API,举例说明如何在实际开发中使用它,并展示一些常见的应用案例,帮助你快速掌握如何利用 Python 在 Unity 中提高开发效率。
TechX 教程效果:
文章目录
- 一、什么是 Unity for Python?
- 二、Unity for Python 的功能和应用
- 三、Unity for Python 使用条件与安装
- 1、使用条件
- 2、安装
- 3、验证安装
- 四、Python for Unity 设置
- 1、使用requirements.txt文件
- 2、手动安装Python包
- 五、API 介绍
- 1、Low-level API
- 2、High-level API
- 3、 API 交互 —— 带参调用与返回结果
- 六、实际应用案例
一、什么是 Unity for Python?
Unity for Python 是 Unity 编辑器的一个扩展,允许开发者通过 Python 脚本与 Unity 编辑器进行交互。它使得 Python 成为 Unity 编辑器的一部分,可以用于自动化开发流程、创建自定义工具、操作场景数据以及与外部系统进行交互。通过 Python,开发者可以利用 Python 在数据处理、科学计算、文件操作等方面的强大能力,从而提高开发效率。
二、Unity for Python 的功能和应用
Unity for Python 的主要功能包括:
- 自动化任务:通过 Python 脚本自动化一些重复性任务,比如批量修改资源、更新游戏对象属性、批量处理场景元素等。
- 自定义工具和编辑器扩展:使用 Python 脚本创建自定义工具,增强 Unity 编辑器功能,提供更多灵活的操作界面。
- 数据导入与处理:通过 Python 导入外部数据(如 CSV、JSON 等),并在 Unity 中应用。
- 与 Unity 编辑器和游戏对象的交互:Python 可以直接访问 Unity 编辑器 API,操作场景中的对象、资源以及材质等。
三、Unity for Python 使用条件与安装
1、使用条件
要使用 Unity for Python,你需要满足以下条件:
- 系统要求:仅限 Windows 10+ 或 macOS High Sierra 10.13+,64 位版本。
- Unity 版本:Unity 2021.2。我们建议通过 Unity Hub 安装最新版本的 Unity 2021.2;2020.2 是最小值。
2、安装
您可以通过 Package Manager 或项目的清单安装此包。
在 Unity 2022.1 及更高版本中:
-
打开 Package Manager Project Settings。
-
启用 Enable Pre-release packages 复选框。
-
打开 Package Manager 窗口。
-
单击 Packages 下拉列表,然后选择 Unity Registry。
-
在包列表中找到并选择 Python for Unity,然后单击 Install。
在 Unity 2021.2 中:
-
打开 Package Manager 窗口。
-
单击 + 下拉列表,然后选择 Add package by name。
-
输入 com.unity.scripting.python,然后单击 Add。
安装过程完成后,控制台中将显示“Python successfully installed”。
3、验证安装
安装和配置完成后,打开 Window > General > Python Console。如果 Python 控制台正常显示,且可以输入命令执行 Python 脚本,则说明安装成功。
四、Python for Unity 设置
在Unity中使用Python脚本时,可能需要安装额外的Python包。Python for Unity提供了多种方式来管理这些包:
1、使用requirements.txt文件
您可以在项目的ProjectSettings文件夹中创建一个名为requirements.txt的文件,列出所需的Python包及其版本。每次打开项目时,Unity会自动根据该文件安装或更新Python包。
请注意,只有在项目打开时才会应用requirements.txt中的更改,如果在Unity运行时修改了该文件,需要重新启动Unity以使更改生效。
2、手动安装Python包
您可以使用 pip 为您的项目安装 Python 包。它们将安装在项目的 Library/PythonInstall/Lib/site-packages 文件夹中。如果需要手动安装或更新Python包,可以按照以下步骤操作:
-
Windows:
-
在Project Settings > Python Scripting中,点击Launch Terminal按钮。
-
这将打开一个PowerShell窗口,其PATH 环境已配置为Unity的Python安装路径。
-
在该窗口中,使用pip3命令安装所需的包,例如:
pip3 install numpy
-
安装完成后,运行以下命令将当前安装的包列表保存到requirements.txt:
pip3 freeze > ProjectSettings/requirements.txt
-
-
macOS:
-
在Unity项目中,右键点击Assets文件夹,选择Reveal in Finder。
-
打开终端(Terminal),输入cd,然后将Library文件夹拖入终端窗口,按下回车。
-
接着输入:
cd PythonInstall/bin
-
使用以下命令安装所需的包:
./pip3 install numpy
-
安装完成后,运行以下命令将当前安装的包列表保存到requirements.txt:
./pip3 freeze > ../../../ProjectSettings/requirements.txt
-
请注意,修改requirements.txt文件后,需要重新启动Unity以应用更改。
五、API 介绍
Unity for Python 提供了多种 API,主要包括低级 API、高级 API 以及交互 API(用于传参和返回结果)。
1、Low-level API
您可以直接使用 Python for .NET,它包装了 CPython API。使用 C# dynamic 类型,您可以编写类似于 Python 的 C#。
低级 API 通过 PythonEngine 进行 Python 环境的初始化和代码执行,允许更精细的控制和复杂交互。
示例:使用 PythonEngine 执行 Python 代码
using Python.Runtime;
using UnityEditor.Scripting.Python;public class MyPythonScript
{[MenuItem("MyPythonScript/Run")]public static void Run(){PythonRunner.EnsureInitialized();using (Py.GIL()) {try {dynamic sys = Py.Import("sys");UnityEngine.Debug.Log($"python version: {sys.version}");} catch(PythonException e) {UnityEngine.Debug.LogException(e);}}}
}
通过调用 PythonRunner.EnsureInitialized() 确保 Python 已正确初始化。
始终获取 CPython 全局解释器锁 (GIL)。
您需要添加程序集引用,以便编译器知道在 Python.Runtime 中的何处可以找到低级 API。在项目视图中,右键单击并创建新的程序集引用:
然后添加对 com.unity.scripting.python.editor 的引用 :
2、High-level API
高级 API 提供了更简洁的接口,通过 PythonRunner.RunString 和 PythonRunner.RunFile 快速执行 Python 脚本,无需手动管理 Python 环境,非常适合自动化任务和编辑器扩展。
示例:使用 PythonRunner.RunString 执行内联 Python 代码
using UnityEditor;
using UnityEditor.Scripting.Python;
using UnityEngine;public class HelloWorld
{[MenuItem("Python/Hello World")]static void PrintHelloWorldFromPython(){PythonRunner.RunString(@"
import UnityEngine
UnityEngine.Debug.Log('hello world')");}
}
您可以使用 C# 中可用的任何程序集,只需使用 Python import 语句导入它 - 在示例中,我们展示了如何导入 UnityEngine。
示例:使用 PythonRunner.RunFile 执行 Python 脚本文件
您可以使用 PythonRunner.RunFile 方法执行整个 Python 脚本,而不是在 C# 脚本中内联 Python 代码。例如,此 Python 脚本循环访问场景中的所有 GameObject,并确保所有名称都以下划线结尾:
import UnityEngineall_objects = UnityEngine.Object.FindObjectsOfType(UnityEngine.GameObject)
for go in all_objects:if go.name[-1] != '_':go.name = go.name + '_'
将此文件放在 Assets/ensure_naming.py 中。脚本文件可以位于文件系统上的任何位置,它们不需要位于项目中。您可以从 C# 运行此 Python 脚本,如下所示:
using UnityEditor.Scripting.Python;
using UnityEditor;
using UnityEngine;public class EnsureNaming
{[MenuItem("Python/Ensure Naming")]static void RunEnsureNaming(){PythonRunner.RunFile($"{Application.dataPath}/ensure_naming.py");}
}
3、 API 交互 —— 带参调用与返回结果
Unity for Python 同样支持调用 Python 中的单个函数、传递参数、获取返回值,甚至支持复杂数据结构的返回。
示例一:C# 调用Python
将 Python 脚本保存为 calculate_sum.py:
# calculate_sum.py
import sysdef calculate_sum(a, b):return a + b
C# 调用代码如下:
using UnityEditor;
using UnityEditor.Scripting.Python;
using UnityEngine;public class PythonWithParamsFromFile
{[MenuItem("Python/Calculate Sum From File")]static void CalculateSumFromFile(){PythonRunner.EnsureInitialized();using (Py.GIL()){try{dynamic sys = Py.Import("calculate_sum");dynamic sum = sys.calculate_sum(1,2);Debug.Log($"python version: {sum}");}catch (PythonException e){Debug.LogException(e);}}}
}
在这里要特别注意,Python 的 import 机制会在 当前目录 或 sys.path 列表中的目录 查找模块。因此,确保 calculate_sum.py 放在 Unity 可被 Python 识别的目录。
在Project Settings=>Python Scripting设置的Package Directories中,将你的py脚本所在目录添加到这个列表中,这样才可以导入这个模块并执行里面的方法。
**示例二:Python 调用 C# **
C# 脚本也定义一个计算两个数和的函数,可以供Python调用。
C# 脚本 PlayerController.py:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;namespace PlayerController
{public class PlayerController : MonoBehaviour{public int Sum(int a, int b){ return a + b;}}
}
Python 调用如下:
import UnityEngine
import PlayerController# 获取场景中的 Player
player = UnityEngine.GameObject.Find("Player")# 获取 Player 的 PlayerController 组件
controller = player.GetComponent(PlayerController.PlayerController)print(controller)sum = controller.Sum(1,6)print(sum)
在Python里面,所有的程序集已经自动加载,不在需要手动去加载
#手动加载,但是这里不在需要这样去加载
import clr
clr.AddReference("Assembly-CSharp")
但是我们需要导入模块,这里的模块指的是C#中的命名空间名称,像这样namespace PlayerController,如果写的脚本没有命名空间,直接去导入类的话会报错找不到模块,这块是需要注意的
六、实际应用案例
下面通过几个实际案例展示 Unity for Python 能够实现哪些功能,帮助你在项目中灵活应用这一工具。
案例 1:批量修改资源
通过 Python 脚本批量处理项目中资源,例如重命名 Prefab 文件。
import UnityEditor
import osasset_paths = UnityEditor.AssetDatabase.GetAllAssetPaths()
prefix = "NewPrefix_"for path in asset_paths:if path.endswith(".prefab"):file_name = os.path.basename(path)new_file_name = prefix + file_nameUnityEditor.AssetDatabase.RenameAsset(path, new_file_name)UnityEditor.AssetDatabase.Refresh()
案例 2:自动化构建流程
使用 Python 脚本自动构建项目、生成构建报告,并进行构建后处理。
import UnityEditor
import datetimebuild_target = UnityEditor.BuildTarget.StandaloneWindows
build_path = "Builds/MyGame.exe"
report_path = "Builds/BuildReport.txt"UnityEditor.BuildPipeline.BuildPlayer(UnityEditor.EditorBuildSettings.scenes, build_path, build_target, UnityEditor.BuildOptions.None)with open(report_path, 'w') as file:file.write(f"Build Report - {datetime.datetime.now()}\n")file.write(f"Build Path: {build_path}\n")file.write("Scenes Included:\n")for scene in UnityEditor.EditorBuildSettings.scenes:file.write(f"- {scene.path}\n")
案例 3:自定义编辑器工具
使用 Python 创建自定义编辑器窗口,实现对选中对象名称的快速修改。
import UnityEditor
import UnityEngineclass CustomEditorWindow(UnityEditor.EditorWindow):@staticmethoddef show_window():window = UnityEditor.EditorWindow.GetWindow(CustomEditorWindow, True, "Custom Editor Tool")window.Show()def OnGUI(self):self.obj_name = UnityEditor.EditorGUILayout.TextField("Object Name", self.obj_name)if UnityEditor.EditorGUILayout.Button("Change Object Name"):selected_objects = UnityEditor.Selection.objectsfor obj in selected_objects:if isinstance(obj, UnityEngine.GameObject):obj.name = self.obj_nameUnityEditor.EditorUtility.SetDirty(obj)CustomEditorWindow.show_window()
案例 4:数据导入与处理
从 CSV 文件导入数据,并将数据应用到场景中的游戏对象上。
Name,X,Y,Z
Cube1,10,10,10
Cube2,20,20,20
import csv
import UnityEditor
import UnityEnginefile_path = "Assets/PositionData.csv"
with open(file_path, newline='') as csvfile:reader = csv.DictReader(csvfile)for row in reader:obj_name = row['Name']x, y, z = float(row['X']), float(row['Y']), float(row['Z'])obj = UnityEngine.GameObject.Find(obj_name)if obj:obj.transform.position = UnityEngine.Vector3(x, y, z)
每一次跌倒都是一次成长 每一次努力都是一次进步 |
如果您喜欢本博客,请点赞和分享给更多的朋友,让更多人受益。同时,您也可以关注我的博客,以便及时获取最新的更新和文章。
在未来的写作中,我将继续努力,分享更多有趣、实用的内容。再次感谢大家的支持和鼓励,期待与您在下一篇博客再见!
相关文章:
Unity for Python —— 强大的 Python 脚本支持提升 Unity 编辑器效率
内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity for Python —— 强大的 Python 脚本支持提升 Unity 编辑器效率 TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 Tec…...
【Dubbo+Zookeeper】——SpringBoot+Dubbo+Zookeeper知识整合
🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大二学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL࿰…...
家用路由器的WAN口和LAN口有什么区别
今时今日,移动终端盛行的时代,WIFI可以说是家家户户都有使用到的网络接入方式。那么路由器当然也就是家家户户都不可或缺的设备了。而路由器上的两个实现网络连接的基础接口 ——WAN 口和 LAN 口,到底有什么区别?它们的功能和作用…...
Python--函数入门
1. 函数基础概念 1.1 什么是函数 定义:函数是一段可重复调用的代码块,用于封装特定功能。 核心作用: 代码重用:减少重复代码的编写。增强可读性:通过命名和模块化让代码逻辑更清晰。 1.2 函数的定义与调用 def 函…...
EasyRTC低延迟通信与智能处理:论嵌入式WebRTC与AI大模型的技术融合
在当今数字化时代,实时通信的需求日益增长,视频通话作为一种高效、直观的沟通方式,广泛应用于各个领域。WebRTC技术的出现,为实现浏览器之间的实时音视频通信提供了便捷的解决方案。而基于WebRTC技术的EasyRTC视频通话SDK…...
《操作系统 - 清华大学》 8 -6:进程管理:进程状态变化模型
进程状态及其转换全解析 在操作系统中,进程有着特定的生命周期和多种状态变化。不考虑进程结束时,进程主要有三个基本状态。 运行态:即进程正在占用CPU执行任务。总结:运行态表示进程当前正在使用CPU。就绪状态:进程…...
大语言模型中的 Token如何理解?
在大语言模型中,Token 是文本处理的基本单元,类似于“文字块”,模型通过将文本分割成Token来理解和生成内容。举一个形象一点的例子,可以理解为 AI 处理文字时的“最小积木块”。就像搭乐高时,每块积木是基础单位一样&…...
信息学奥赛一本通 1522:网络 | OpenJudge 百练 1144:Network
【题目链接】 ybt 1522:网络 OpenJudge 百练 1144:Network 【题目考点】 1. 图论:割点 【解题思路】 每个交换机是一个顶点,如果两地点之间有电话线连接,那么两顶点之间有一条无向边,该图是无向图。 初始时任何地…...
3分钟快速本地部署deepseek
DeepSeek简介 DeepSeek 是杭州深度求索人工智能基础技术研究有限公司开发的一系列大语言模型,背后是知名量化资管巨头幻方量化3。它专注于开发先进的大语言模型和相关技术,拥有多个版本的模型,如 DeepSeek-LLM、DeepSeek-V2、DeepSeek-V3 等…...
Linux系统管理与编程01:准备工作
0 准备工作 0.1 安装VMWare Workstation pro17 到百度搜一下,到处都是。安装好VMWare Workstation pro17(以下简称VW)。 图0- 1 安装过程略。 0.2下载CentOS7.6 图0- 2 选择minimal版本。 0.3下载yum库文件 下载阿里云yum库文件https:…...
常用的几种编码方式
常见的编码方式有多种,每种编码方式都有其特定的用途和特点。以下是几种常见的编码方式: ASCII(美国信息交换标准代码) 用途:主要用于表示英文字符及控制字符。特点:使用7位二进制数表示字符,能…...
WebXR教学 03 项目1 旋转彩色方块
一、项目结构 webgl-cube/ ├── index.html ├── main.js ├── package.json └── vite.config.js二、详细实现步骤 初始化项目 npm init -y npm install three vite --save-devindex.html <!DOCTYPE html> <html lang"en"> <head><…...
从零开始的网站搭建(以照片/文本/视频信息通信网站为例)
本文面向已经有一些编程基础(会至少一门编程语言,比如python),但是没有搭建过web应用的人群,会写得尽量细致。重点介绍流程和部署云端的步骤,具体javascript代码怎么写之类的,这里不会涉及。 搭…...
netcore 启用gzip压缩及缓存
public void ConfigureServices(IServiceCollection services) {....// 配置gzip 与 br的压缩等级为最优services.Configure<BrotliCompressionProviderOptions>(options > {options.Level CompressionLevel.Optimal;});services.Configure<GzipCompressionProvid…...
c++入门-------命名空间、缺省参数、函数重载
C系列 文章目录 C系列前言一、命名空间二、缺省参数2.1、缺省参数概念2.2、 缺省参数分类2.2.1、全缺省参数2.2.2、半缺省参数 2.3、缺省参数的特点 三、函数重载3.1、函数重载概念3.2、构成函数重载的条件3.2.1、参数类型不同3.2.2、参数个数不同3.2.3、参数类型顺序不同 前言…...
elf_loader:一个使用Rust编写的ELF加载器
本文介绍一个使用Rust实现的ELF加载器。 下面是elf_loader的仓库链接: github: https://github.com/weizhiao/elf_loaderhttps://github.com/weizhiao/elf_loader crates.io: https://crates.io/crates/elf_loaderhttps://crates.io/cra…...
postman调用ollama的api
按照如下设置,不需要设置key 保持长会话的方法 # 首次请求 curl http://localhost:11434/api/generate -d {"model": "deepseek-r1:32b","prompt": "请永久记住:110,1-12,之后所有数学计算必…...
鸿蒙5.0实战案例:基于ArkUI的验证码实现
往期推文全新看点(文中附带全新鸿蒙5.0全栈学习笔录) ✏️ 鸿蒙(HarmonyOS)北向开发知识点记录~ ✏️ 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ ✏️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景&#…...
通俗理解什么是云原生?
by deepseek。 一、核心理念:云原生到底是什么? 1. 一句话定义 云原生(Cloud Native) 是一种构建和运行应用程序的方法论,它利用云计算的优势(弹性、分布式、自动化),让软件从设计…...
基于PSO粒子群优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a/matlab2024b 3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频…...
什么是完全前向保密(PFS)?
在当今数字化时代,信息安全至关重要。而密码学中的完全前向保密(Perfect Forward Secrecy,简称PFS)技术,已经成为保障信息安全的关键一环。如果没有完全前向保密,一旦长期密钥被泄露,攻击者就可…...
Oracle备库srvctl start丢失某个原有的service_names的案例
最近在测试主备环境中使用srvctl添加新的service之后,srvctl start发现其中一个原本用于主备同步的service丢失了。 原始的参数文件中的service_names参数值如下(数据库中service_names的值也一样,省略查看步骤): [oraclesmartdbstb01 202502…...
重学SpringBoot3-怎样优雅停机
更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞??收藏评论 重学SpringBoot3-怎样优雅停机 1. 什么是优雅停机?2. Spring Boot 3 优雅停机的配置3. Tomcat 和 Reactor Netty 的优雅停机机制 3.1 Tomcat 优雅停机3.2 Reactor Netty 优…...
SkyWalking集成Kafka实现日志异步采集经验总结
SkyWalking日志异步采集架构 【重点知识】 1、【Agent】kafka-reporter-plugin-x.x.x.jar包放plugins目录后必走kafka(kafka没有正确配置就会报错) 2、【Agent】异步如不开启数据压缩,日志数据较大,pod多、业务大时容易造成网络…...
图论 之 BFS
文章目录 3243.新增道路查询后的最短距离1311.获取你好友已观看的视频 BFS:广度优先搜索(BFS) 是一种常用的算法,通常用于解决图或树的遍历问题,尤其是寻找最短路径或层级遍历的场景。BFS 的核心思想是使用队列(FIFO 数…...
rust学习笔记5-所有权机制
rust核心就是所有权机制,是其内存管理的核心特性,旨在消除内存安全问题(如空指针、悬垂指针、内存泄漏等)而无需依赖垃圾回收(GC) 1.首先看一下语义模型 当声明一个变量 let a "32";它的语义模…...
网站快速收录:如何优化网站404页面?
优化网站404页面是提升用户体验和SEO效果的重要一环。以下是一些优化404页面的建议: 一、设计友好的404页面 简洁明了的提示信息:使用清晰的语言告诉用户该页面不存在或已被删除,避免使用过于技术化的术语。 提供导航链接:在40…...
关于order by的sql注入实验
实验描述 本实验基于sqli-lab的第46关进行测试 本关的sql 语句为$sql "SELECT * FROM users ORDER BY $id" 利用sort进行sql注入,我们可以利用报错注入,延时注入来爆出数据 1.报错注入 1.手工测试 爆出数据库 ?sort(extractvalue(1, c…...
Docker(Nginx)部署Vue
简介:目标使用docker将vue生成的dist文件,结合nginx生成镜像,然后运行; 1、首选确保vue项目正确运行,并能正确打包dist文件; 2、查看已经生成的dist文件 3、将dist文件打包为rar文件或者zip文件…...
从函数到神经网络
一、从函数到神经网络 所有一切的前提是,你要相信这个世界上的所有逻辑和知识,都可以用一个函数来表示。Functions describe the world ! 比如输入物体的质量和加速度,根据牛顿第二定律,就可以得到物体施加的力,这就是…...
Python 字符串格式化 print
Python 字符串格式化 print flyfish 1. 使用百分号(%)操作符进行字符串格式化 百分号(%)操作符是 Python 中比较传统的字符串格式化方式,它的使用方式类似于 C 语言中的 printf 函数。 # 格式化整数 num 10 print…...
LabVIEW 中的 Bluetooth.llb 库
Bluetooth.llb 库位于C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform目录,它是 LabVIEW 平台下用于蓝牙通信相关操作的重要库。该库为 LabVIEW 开发者提供了一系列工具,用于实现设备间的蓝牙连接、数据传输与交互等功能&…...
MySQL | MySQL库、表的基本操作01
MySQL库、表的基本操作01 一、库操作1.1 查看数据库1.2 创建数据库1.3 选择数据库1.4 查看创建数据库的SQL语句1.5 修改数据库1.6 删除数据库 二、表操作2.1 创建数据表2.2 查看表2.3 查看表结构2.4 查看创建数据库的SQL语句2.5 修改表2.6 删除表 ⚠️MySQL版本 8.0 一、库操作…...
抖音试水AI分身;腾讯 AI 战略调整架构;百度旗下小度官宣接入DeepSeek...|网易数智日报
抖音试水AI分身,字节旗下AI智能体平台扣子已与抖音打通,相关功能内测中 2月19日消息,钛媒体App独家获悉,字节旗下AI智能体开发平台扣子(Coze)已与抖音打通,抖音创作者可在扣子智能体平台打造AI分…...
RPC 框架项目剖析
RPC 框架项目剖析 说明 本文用于梳理一个 rpc项目的实现细节,此项目基于cpp语言 大概三千行左右,用于学习目的。 项目链接:rpc项目 项目底层类 1.抽象消息类 描述: 各种消息的基类 属性: 消息id,消息类型…...
前端 fetch API 调用 Tushare 的数据接口获取免费的基金股票信息数据
要在前端使用 JavaScript 的 fetch API 调用 Tushare 的数据接口,您需要遵循以下步骤: 1. 注册 Tushare 账号并获取 Token 首先,访问 Tushare 官网 注册账号。注册成功后,登录账号,在个人中心获取您的 API Token。 …...
【SpringMVC】十分钟跑起来一个SpringMVC项目
目录标题 1 项目概述1.项目结构解析2. MVC项目的结构和每个组件的作用:3. 项目的工作流程:4 后期可以扩展的点:2.源码学习1. HelloController 类,Spring MVC控制器2 springmvc-servlet.xml - Spring MVC的主要配置文件3.web 目录 …...
LeetCode 热题 100 11. 盛最多水的容器
LeetCode 热题 100 | 11. 盛最多水的容器 大家好,今天我们来解决一道经典的算法题——盛最多水的容器。这道题在LeetCode上被标记为中等难度,要求我们找到两条垂线,使得它们与 x 轴共同构成的容器可以容纳最多的水。下面我将详细讲解解题思路…...
Web自动化之Selenium实战案例1:论文pdf自动下载
在上一篇文章中,我们介绍了Selenium的基础用法和一些常见技巧。今天,我们将通过中国科学:信息科学网站内当前目录论文下载这一实战案例来进一步展示Selenium的web自动化流程。 目录 中国科学:信息科学当期目录论文下载 1.网页内…...
在VSCode中接入deepseek
注册就送14元2000万tokens。 https://cloud.siliconflow.cn/i/rnbA6i6U各种大模型 下面介绍我是如如接入vscode的 左边生成一个key,呆会vscode要用,不然401. 打开vscod,电脑能上网。下插件。 下好要配置 点它一下。 要配置,全…...
CentOS停服后的替代选择:openEuler、Rocky Linux及其他系统的未来展望
CentOS停服后的替代选择:openEuler、Rocky Linux及其他系统的未来展望 引言CentOS停服的背景华为openEuler:面向未来的开源操作系统1. 简介2. 特点3. 发展趋势 Rocky Linux:CentOS的精神继承者1. 简介2. 特点3. 发展趋势 其他可选的替代系统1…...
vector的模拟实现
目录 一、构造和析构函数 二、插入删除访问迭代器 三、迭代器失效 四、拷贝构造和赋值 五、tip 一、构造和析构函数 namespace stn {template<class T>class vector{typedef T* iterator;public:vector():_start(nullptr);, _end(nullptr), _endofstorage(nullptr){…...
【高可用】keepalived的试用与学习笔记
版本日期修订人描述V1.02025/2/23nick huang创建文档 背景 最近,预研给现有的Nginx单点实例添加故障转移的功能,以备单实例故障时无法快速恢复。 本文记录Keepalived的学习笔记,供自己或同学日后参考。 Keepalived Keepalived是一个开源的…...
在Dify中实现联网检索功能(模拟DeepSeek)
跟着上一篇博客:Error response from daemon: Get “https://registry-1.docker.io/v2/“: request canceled while的解决办法-CSDN博客 DeepSeek发布之后,感觉联网检索功能变成标配了。这篇博客简单介绍一下怎么在Dify中配置初步的联网检索功能&#x…...
Deepseek-强化学习算法(通俗易懂版)
首先先贴一张Deepseek核心技术的梳理图: 上图详细了讲述了Deepseek主要在哪些阶段用了强化学习方法(GRPO) 1.GRPO算法 GRPO是一种用于提高语言模型推理能力的强化学习算法。它在DeepSeekMath论文中,在数学推理的背景下被提出。G…...
[展示]Webrtc NoiseSuppressor降噪模块嵌入式平台移植
最近在尝试把WebRtc的NoiseSuppressor模块移植到嵌入式平台,现在已经移植了,尝试了下效果,降噪效果很显著,噪声带被显著抑制了 降噪前: 降噪后:...
了解 RAG 第二部分:经典 RAG 的工作原理
在本系列的第一篇文章中,我们介绍了检索增强生成 (RAG) ,解释了扩展传统大型语言模型 (LLM)功能的必要性。我们还简要概述了 RAG 的核心思想:从外部知识库检索上下文相关的信息,以确保 LLM 生成准确且最新的信息,而不会…...
剖析IO原理和零拷贝机制
目录 1 Linux的五种IO模型1.1 模型调用的函数1.1.1 recv函数1.1.2 select函数1.1.3 poll函数1.1.4 epoll函数1.1.5 sigaction函数 1.2 IO模型1.2.1 阻塞IO模型1.2.2 非阻塞IO模型1.2.3 IO复用模型1.2.4 信号驱动IO模型1.2.5 异步IO模型1.2.6 IO模型比较 2 Java的BIO、NIO、AIO2…...
【论文精读】MapTR:用于在线矢量化高精地图构建的结构化建模与学习
论文地址: MAPTR: STRUCTURED MODELING AND LEARNING FOR ONLINE VECTORIZED HD MAP CONSTRUCTION 源代码:MapTR 摘要 High-definition(HD Map)map为自动驾驶场景提供了丰富且精确的环境信息,是自动驾驶系统规划中不…...
云图库平台(五)——后端图片模块开发
目录 一、需求分析二、库表设计三、图片的处理如何实现图片的上传和下载创建图片的业务流程如何对图片进行解析 四、创建并使用对象存储五、后端操作对象存储初始化客户端通用能力类文档上传文件下载 一、需求分析 管理员功能: 图片的上传和创建:仅管理…...