UE Python笔记

插件

官方

商城

Python Editorhttps://www.fab.com/listings/f4c99ba0-1a86-4f6a-b19d-2fd13f15961b

GitHUB

好像只更新到了2020年4.2x的版本。可能有大佬改了5.x的版本。也希望分享给我一份。谢谢

https://github.com/20tab/UnrealEnginePython

学习笔记

网上教程一大堆。边学边写。学会到哪写到哪。哪天不更新了。就是这个笔记又太监了。写的不对的地方喷的时候也麻烦轻点。

Sequencer中的Python脚本https://dev.epicgames.com/documentation/zh-cn/unreal-engine/python-scripting-in-sequencer-in-unreal-engine?application_version=5.0

UE 使用Python控制Sequencehttps://zhuanlan.zhihu.com/p/13347612063

这下面这个文档解释的比较细:

UE5 中用 Python 接口创建 Level Sequence 与设置 TriggerEvent-腾讯云开发者社区-腾讯云遇到了一个美术需求,需要批量读取一段动画,制作成 UE 中的 Level Sequence,然后给动画添加几个 Event Track。随后,需要在 Event Track 中添加 Trigger Event,设置插件 uDraper 布料的缓存数据路径。总之,最终效果如下:https://cloud.tencent.com/developer/article/2146577

跟着学的案例
目前还没“复刻”成功=复制粘贴都不行.gif:

复刻成功=没学会:

1.这个Json文件少了个]。其他按照他这个做基本能复刻。

UE5 Python脚本自动化Sequence Key帧_ue sequnece python-CSDN博客

2.Json(latitude,longitude,elevation)= Python(uex,uey,uez)。因为我没有PythonEditor所以改成了固定的main方式。

【UE4】Python读取Json数据创建对应关卡序列_json设计关卡-CSDN博客

Json相关

读取(祖传代码)

(filename = 外部输入的名字)特别要注意的是Json格式问题

 #def JsonGetData(filename):# 读取/项目目录/JsonFile中的JSON文件数据存入json_dataroot_path = unreal.SystemLibrary.get_project_directory() + 'Content/Json/'final_path = root_path + filename + '.json'fp = open(final_path, 'r', encoding='utf-8')json_str = fp.read()json_data = json.loads(json_str)unreal.log("=== INFO: Json Get OK ===")return json_data

报这个错误就是Json格式出现问题了。

JSON在线 | JSON解析格式化—SO JSON在线工具

解析

示例 
"commands": [{"commandtype": "Create","objectcreateinfo": {"object": {"id": "1","objecttype": "myship"},"propertys": [{"key": "DisplayName","value": "我的船","propertytype": "String","displaystring": "我的船"}],
 #读取各项数据创建关键帧commands = json_data["commands"]#循环获取commands里面的数据for index in range(0,len(commands)):#for command in commands:#json中commandtype为Create时执行if commands[index]["commandtype"] == "Create":# 获取到"commands->objectcreateinfo->object->objecttype"这一层是否等于myshipif commands[index]["objectcreateinfo"]["object"]["objecttype"] == "myship":

Main方法

没有这个函数的话。直接右键运行是不会执行任何东西的。

//有这个右键脚本运行才能有效
if __name__ == '__main__':create()

python获取场景中的actor
  # 获取Actor子系统以抓取选定的Actoractor_system = unreal.get_editor_subsystem(unreal.EditorActorSubsystem)# 获取选定的Actoractor = actor_system.get_selected_level_actors()[0]# 将Actor作为可拥有物添加到关卡中actor_binding = level_sequence.add_possessable(actor)# 刷新以直观地查看添加的新绑定unreal.LevelSequenceEditorBlueprintLibrary.refresh_current_level_sequence()# 使用绑定将轨迹添加到Sequencer(由轨迹类型指定)transform_track = actor_binding.add_track(unreal.MovieScene3DTransformTrack) 
属性/状态
    #transform# 将分段添加到轨迹以便能够设置范围、参数或属性transform_section = transform_track.add_section()#位移:获取位置的xyz通道channel_location_x = transform_section.get_channels()[0]channel_location_y = transform_section.get_channels()[1]channel_location_z = transform_section.get_channels()[2]#获取旋转yz的关键帧channel_rotation_x = transform_section.get_channels()[3]channel_rotation_y = transform_section.get_channels()[4]channel_rotation_z = transform_section.get_channels()[5]#添加关键帧links = json_path["links"]for index in range(0, len(links)):new_time0 = unreal.FrameNumber(value=index*int(json_path["fov"]))#channel_fov.add_key(new_time0, float(json_path["fov"]), 0.0)channel_location_x.add_key(new_time0, float(links[index]["x"]), 0.0)channel_location_y.add_key(new_time0, float(links[index]["y"]), 0.0)channel_location_z.add_key(new_time0, float(links[index]["z"]), 0.0)channel_rotation_x.add_key(new_time1, float(links[index]["roll"]), 0.0)channel_rotation_y.add_key(new_time1, float(links[index]["pitch"]), 0.0)channel_rotation_z.add_key(new_time1, float(links[index]["yaw"]), 0.0)#设置显示隐藏:#为actor添加可视性(隐藏)关键帧channel_visibility_bool = visibility_section.get_channels()[0]#添加关键帧channel_visibility_bool.add_key(new_time,False)
获取蓝图自定义的变量(感谢DeepSeeK)
import unreal# 方法1:获取当前关卡中所有蓝图实例
def get_blueprint_variable(actor_class_name, variable_name):# 获取当前关卡所有Actoractors = unreal.EditorLevelLibrary.get_all_level_actors()# 遍历查找目标蓝图类实例for actor in actors:if actor.get_class().get_name() == actor_class_name:# 检查变量是否存在if actor.property_exists(variable_name):value = actor.get_editor_property(variable_name)print(f"Found variable '{variable_name}': {value}")return valueelse:print(f"Variable '{variable_name}' not found in actor.")return Noneprint(f"Actor of class '{actor_class_name}' not found.")return None# 使用示例:获取类名为"MyBlueprintClass"的Actor的"MyVariable"变量
get_blueprint_variable("MyBlueprintClass", "MyVariable")# 方法2:通过选中Actor获取(需提前在编辑器中选中)
selected_actors = unreal.EditorLevelLibrary.get_selected_level_actors()
if selected_actors:actor = selected_actors[0]value = actor.get_editor_property("MyVariable")print(f"Selected actor's variable value: {value}")#我自己是用的这个写法(上面都是DeepSeek发的)# 获取Actor子系统以抓取选定的Actoractor_system = unreal.get_editor_subsystem(unreal.EditorActorSubsystem)# 获取选定的Actoractor = actor_system.get_selected_level_actors()[0]print(actor)value = actor.get_editor_property("TestInt")
Sequence添加Int/float轨道
 #  创建整型轨道(int)int_track = actor_binding.add_track(unreal.MovieSceneIntegerTrack)property_name_int = "VAR_Index"int_track.set_property_name_and_path(property_name_int, property_name_int)#将分段添加到轨迹以便能够设置范围、参数或属性int_section = int_track.add_section()#设置开始和结束帧数int_section.set_start_frame_seconds(0)int_section.set_end_frame_seconds(600)channel_int = int_section.get_channels()[0]  # 假设第一个通道是整型通道     #  创建浮点轨道(假设变量类型为float)float_track = actor_binding.add_track(unreal.MovieSceneFloatTrack)property_name = "Alpha"float_track.set_property_name_and_path(property_name, property_name)#将分段添加到轨迹以便能够设置范围、参数或属性float_section = float_track.add_section()#设置开始和结束帧数float_section.set_start_frame_seconds(0)float_section.set_end_frame_seconds(600)channel_float = float_section.get_channels()[0]  # 假设第一个通道是float通道links = json_path["links"]for index in range(0, len(links)):new_time0 = unreal.FrameNumber(value=index*int(json_path["fov"]))#channel_fov.add_key(new_time0, float(json_path["fov"]), 0.0)channel_int.add_key(new_time0, float(links[index]["va"]), 0.0)#print("index",float(links[index]["va"]))#float_track.add_key(new_time0, float(links[index]["al"]), 0.0)channel_float.add_key(new_time0, float(links[index]["al"]), 0.0)

尝试
Json
{"starttimestamp": 0,"endtimestamp": 600,"frametime": 60,"seqname": "VideoPlayerSeqSpline","fov": 60,"links": [{"x": 0,"y": 0,"z": 0},{"x": 1088.2844551244866,"y": -6.1749946553391055e-05,"z": 9.0949470177292824e-13},{"x": 962.03462911456836,"y": 1326.0205919409059,"z": -2.1247876702545909e-07},{"x": 1655.6119959682651,"y": 1939.9672775097956,"z": 6.2318827929175313e-06},{"x": 2921.7209372361831,"y": 1163.8111134544288,"z": -1.546140993013978e-11},{"x": 3168.7212710348158,"y": -502.86935341987612,"z": 36.471531137039221},{"x": 3168.7212776581878,"y": -1900.5658369533642,"z": 36.471531137031945},{"x": 3168.7212858682856,"y": -2762.9053314381854,"z": 15.992892525690252},{"x": 1705.8193762352209,"y": -2821.7894823782708,"z": 15.992892525679338},{"x": 1705.8193759169985,"y": -1617.7851900597982,"z": 15.992892525679792},{"x": 273.03898678036694,"y": -1617.7851516590028,"z": 15.992892525679792}]
}
Python
#连接虚幻API库
import unreal,json,osdef JsonGetData(filename):# 读取/项目目录/JsonFile中的JSON文件数据存入json_dataroot_path = unreal.SystemLibrary.get_project_directory() + 'Content/Json/'final_path = root_path + filename + '.json'fp = open(final_path, 'r', encoding='utf-8')json_str = fp.read()json_data = json.loads(json_str)unreal.log("=== INFO: Json Get OK ===")return json_datadef Seqcreate():json_path = JsonGetData("test")# 获取资产工具asset_tools = unreal.AssetToolsHelpers.get_asset_tools()# 在根内容文件夹中创建一个名为LevelSequenceName的关卡序列level_sequence = unreal.AssetTools.create_asset(asset_tools, asset_name=json_path["seqname"],package_path="/Game/Sequence/",asset_class=unreal.LevelSequence,factory=unreal.LevelSequenceFactoryNew())# 创建一个帧率对象并设置为所需的fps数值frame_rate = unreal.FrameRate(numerator=json_path["frametime"], denominator=1)# 设置显示速率level_sequence.set_display_rate(frame_rate)# 设置播放范围level_sequence.set_playback_start(json_path["starttimestamp"])level_sequence.set_playback_end(json_path["endtimestamp"])# 获取Actor子系统以抓取选定的Actoractor_system = unreal.get_editor_subsystem(unreal.EditorActorSubsystem)# 获取选定的Actoractor = actor_system.get_selected_level_actors()[0]# 将Actor作为可拥有物添加到关卡中actor_binding = level_sequence.add_possessable(actor)# 刷新以直观地查看添加的新绑定unreal.LevelSequenceEditorBlueprintLibrary.refresh_current_level_sequence()# 使用绑定将轨迹添加到Sequencer(由轨迹类型指定)transform_track = actor_binding.add_track(unreal.MovieScene3DTransformTrack) # 将分段添加到轨迹以便能够设置范围、参数或属性transform_section = transform_track.add_section()transform_section.set_start_frame_seconds(json_path["starttimestamp"])transform_section.set_end_frame_seconds(json_path["endtimestamp"])channel_location_x = transform_section.get_channels()[0]channel_location_y = transform_section.get_channels()[1]channel_location_z = transform_section.get_channels()[2]links = json_path["links"]for index in range(0, len(links)):new_time0 = unreal.FrameNumber(value=index*int(json_path["fov"]))#channel_fov.add_key(new_time0, float(json_path["fov"]), 0.0)channel_location_x.add_key(new_time0, float(links[index]["x"]), 0.0)channel_location_y.add_key(new_time0, float(links[index]["y"]), 0.0)channel_location_z.add_key(new_time0, float(links[index]["z"]), 0.0)unreal.EditorAssetLibrary.save_loaded_asset(level_sequence, False)# 刷新以直观地查看新增的轨迹和分段unreal.LevelSequenceEditorBlueprintLibrary.refresh_current_level_sequence()unreal.log("=== INFO: Seq Create Completed Please check the file===")if __name__ == '__main__':Seqcreate()

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

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

相关文章

PXE批量网络装机与Kickstart自动化安装工具

目录 一、系统装机的原理 1.1、系统装机方式 1.2、系统安装过程 二、PXE批量网络装机 2.1、PXE实现原理 2.2、搭建PXE实际案例 2.2.1、安装必要软件 2.2.2、搭建DHCP服务器 2.2.3、搭建TFTP服务器 2.2.4、挂载镜像并拷贝引导文件到tftp服务启动引导文件夹下 2.2.5、编…

【C语言】第八期——指针、二维数组与字符串

目录 1 初始指针 2 获取变量的地址 3 定义指针变量、取地址、取值 3.1 定义指针变量 3.2 取地址、取值 4 对指针变量进行读写操作 5 指针变量作为函数参数 6 数组与指针 6.1 指针元素指向数组 6.2 指针加减运算(了解) 6.2.1 指针加减具体数字…

Linux系统管理(十七)——配置英伟达驱动、Cuda、cudnn、Conda、Pytorch、Pycharm等Python深度学习环境

文章目录 前言安装驱动下载安装Cuda编辑环境变量安装Cudnn安装conda验证安装成功配置conda镜像退出conda环境创建python环境查看当前conda环境激活环境安装python包安装pytorch 安装pycharm安装jupyter notebook 前言 深度学习和大语言模型的部署不免会用到Linux系统&#xff…

C++蓝桥杯基础篇(六)

片头 嗨~小伙伴们,大家好!今天我们来一起学习蓝桥杯基础篇(六),练习相关的数组习题,准备好了吗?咱们开始咯! 第1题 数组的左方区域 这道题,实质上是找规律,…

计算机毕业设计Python+DeepSeek-R1大模型期货价格预测分析 期货价格数据分析可视化预测系 统 量化交易大数据 机器学习 深度学习

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

webstorm的Live Edit插件配合chrome扩展程序JetBrains IDE Support实现实时预览html效果

前言 我们平时在前端网页修改好代码要点击刷新再去看修改的效果,这样比较麻烦,那么很多软件都提供了实时预览的功能,我们一边编辑代码一边可以看到效果。下面说的是webstorm。 1 Live Edit 首先我们需要在webstorm的settings里安装插件Live …

可以免费无限次下载PPT的网站

前言 最近发现了一个超实用的网站,想分享给大家。 在学习和工作的过程中,想必做PPT是一件让大家都很头疼的一件事。 想下载一些PPT模板减少做PPT的工作量,但网上大多精美的PPT都是需要付费才能下载使用。 即使免费也有次数限制&#xff0…

九、数据治理架构流程

一、总体结构 《数据治理架构流程图》(Data Governance Architecture Flowchart) 水平结构:流程图采用水平组织,显示从数据源到数据应用的进程。 垂直结构:每个水平部分进一步划分为垂直列,代表数据治理的…

vue3中ref和reactive响应式数据、ref模板引用(组合式和选项式区别)、组件ref的使用

目录 Ⅰ.ref 1.基本用法:ref响应式数据 2.ref模板引用 3.ref在v-for中的模板引用 ​4.ref在组件上使用 ​5.TS中ref数据标注类型 Ⅱ.reactive 1.基本用法:reactive响应式数据 2.TS中reactive标注类型 Ⅲ.ref和reactive的使用场景和区别 Ⅳ.小结…

SpringBoot集成easy-captcha图片验证码框架

SpringBoot集成easy-captcha图片验证码框架 此项目已经很久未维护,如有更好的选择,建议使用更好的选择!!! 一、引言 验证码(CAPTCHA)是现代应用中防止机器人攻击、保护接口安全的核心手段之一。然而,从零开发验证码…

算法与数据结构(二叉树中的最大路径和)

题目 思路 这道题我们可以考虑用递归来解决。 首先设计一个maxPath函数用来递归计算二叉树中一个节点的最大贡献值,具体来说,就是以该节点为根节点的子树中寻找以该节点为起点的一条路径,使得该路径上的节点值之和最大。 如果该节点为空&a…

7-Zip命令行复制

先下载一个: 找到压缩exe目录: 写脚本 set EXE_PATH"C:/Program Files/7-Zip/7z.exe"%EXE_PATH% a -t7z OutputName.7z "D:/工程/前端工作"pause

【洛谷贪心算法题】P2240部分背包问题

【解题思路】 贪心策略选择 对于部分背包问题,关键在于如何选择物品放入背包以达到最大价值。由于物品可以分割,遍历排序后的物品数组,根据物品重量和背包剩余容量的关系,决定是将整个物品放入背包还是分割物品放入背包&#xff…

C++ AVL树详解(含模拟实现)

目录 AVL树的概念 AVL树节点的定义 AVL树的插入 AVL树的旋转(难点) AVL树的验证 AVL树的删除(本文不做具体的模拟实现) AVL树的性能 AVL树的模拟实现 AVL树的概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索…

网络安全学习中,web渗透的测试流程是怎样的?

渗透测试是什么?网络安全学习中,web渗透的测试流程是怎样的? 渗透测试就是利用我们所掌握的渗透知识,对网站进行一步一步的渗透,发现其中存在的漏洞和隐藏的风险,然后撰写一篇测试报告,提供给我…

Bitbucket 设置SSH KEY方法

0 Preface/Foreword SSH具有传输安全特点,受到广泛使用。 1 添加方法 Bitbucket也是代码托管平台,跟GitLab类似。SSH key的设置方法也跟GitLab类似。 在个人profile设置界面,添加SSH KEY。

和鲸科技推出人工智能通识课程解决方案,助力AI人才培养

2025年2月,教育部副部长吴岩应港澳特区政府邀请,率团赴港澳宣讲《教育强国建设规划纲要 (2024—2035 年)》。在港澳期间,吴岩阐释了教育强国目标的任务,并与特区政府官员交流推进人工智能人才培养的办法。这一系列行动体现出人工智…

Ollama下载安装+本地部署DeepSeek+UI可视化+搭建个人知识库——详解!(Windows版本)

目录 1️⃣下载和安装Ollama 1. 🥇官网下载安装包 2. 🥈安装Ollama 3.🥉配置Ollama环境变量 4、🎉验证Ollama 2️⃣本地部署DeepSeek 1. 选择模型并下载 2. 验证和使用DeepSeek 3️⃣使用可视化工具 1. Chrome插件-Page …

STM32中使用PWM对舵机控制

目录 1、硬件JIE 2、PWM口配置 3、角度转换 4、main函数中应用 5、工程下载连接 1、硬件介绍 单片机:STM32F1 舵机:MG995 2、PWM口配置 20毫秒的PWM脉冲占空比,对舵机控制效果较好 计算的公式: PSC、ARR值的选取&#xf…

Java+Vue+uniapp微信小程序校园自助打印系统(程序+论文+讲解+安装+调试+售后)

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。 系统介绍 在当今时代,网络与科学技术正以前所未有的速度迅猛发展,这股强大…