UE5 Python脚本自动化Sequence Key帧

前言


       码上1024了,给大家分享一个UE5的脚本小功能,UE5中Sequence动态Key功能,这样我们就可以根据我们的数据动态更新了,非常实用,适合刚入门或者小白,接下来我就把整个过程分享给大家。

过程

  1. 新建一个工程,添加好我们自己的Map后,在Edit ->  Editor Preference中搜索Python,对Enable Content Browser Integration 进行勾选
  2. 在根目录Content中创建Python文件夹,因为这一步是官方操作只有放在这个文件中的Python脚本才会显示在我们的工程中,可以直接新建文本,把我们后面的内容粘贴进去修改后缀为.py即可,然后点击Tools -> Execute Python Scipt 导入我们的python脚本就可以了,导入完成后如果没看到我们的python脚本,重启下工程。
  3. 双击我们导入的脚本即可对其进行编辑和修改,修改完直接保存即可
  4. 整个脚本如下,直接看注释就可以,处理过程非常简单,我们在使用的过程中检查好自己的json路径json名称以及Sequence路径即可。
    #连接虚幻API库
    import unreal,json,osdef JsonGetData(filename):# 读取/项目目录/JsonFile中的JSON文件数据存入json_dataroot_path = unreal.SystemLibrary.get_project_directory() + 'Content/SeqPlayerInfo/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():#当前写入的dict_outnew1为我们的json名称json_path = JsonGetData("dict_outnew1")# 获取资产工具asset_tools = unreal.AssetToolsHelpers.get_asset_tools()# 在根内容文件夹中创建一个名为LevelSequenceName的关卡序列level_sequence = unreal.AssetTools.create_asset(asset_tools, asset_name=json_path["seqname"],package_path="/Game/SeqPlayerInfo/LevelSequence/",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)# 将播放范围设置为20-200level_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"])# 获取位置的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]# 获取旋转xyz的关键帧channel_rotation_x = transform_section.get_channels()[3]channel_rotation_y = transform_section.get_channels()[4]channel_rotation_z = transform_section.get_channels()[5]#获取Json数据  value=index:value为当前帧数links = json_path["links"]for index in range(0, len(links)):new_time0 = unreal.FrameNumber(value=index)channel_location_x.add_key(new_time0, float(links[index]["location_x"]), 0.0)channel_location_y.add_key(new_time0, float(links[index]["location_y"]), 0.0)channel_location_z.add_key(new_time0, float(links[index]["location_z"]), 0.0)channel_rotation_x.add_key(new_time0, float(links[index]["rotation_x"]), 0.0)channel_rotation_y.add_key(new_time0, float(links[index]["rotation_y"]), 0.0)channel_rotation_z.add_key(new_time0, float(links[index]["rotation_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()
    
  5. 如果是没有json数据的情况下,我们把link那部分换成静态数据即可
    #value为当前帧数
    new_time0 = unreal.FrameNumber(value = 0)
    channel_location_x.add_key(new_time0, 213, 0.0)
    channel_location_y.add_key(new_time0, 324, 0.0)
    channel_location_z.add_key(new_time0, 543, 0.0)
    channel_rotation_x.add_key(new_time0, 0, 0.0)
    channel_rotation_y.add_key(new_time0, 0, 0.0)
    channel_rotation_z.add_key(new_time0, 0, 0.0)new_time1 = unreal.FrameNumber(value = 1)
    channel_location_x.add_key(new_time1, 228, 0.0)
    channel_location_y.add_key(new_time1, 335, 0.0)
    channel_location_z.add_key(new_time1, 668, 0.0)
    channel_rotation_x.add_key(new_time1, 0, 0.0)
    channel_rotation_y.add_key(new_time1, 0, 0.0)
    channel_rotation_z.add_key(new_time1, 0, 0.0)
  6. Json格式如下,也可以根据自己的需求修改
    {"starttimestamp": "0", //起始帧"endtimestamp": "2", //总帧数,目前就两组数据就是两帧"seqname": "VideoPlayerSeq","links": [{"location_x": "-213","location_y": "-213","location_z": "-213","rotation_x": "0","rotation_y": "0","rotation_z": "0"},{"location_x": "-213","location_y": "-213","location_z": "-213","rotation_x": "0","rotation_y": "0","rotation_z": "0"}
    }
  7. 修改以及保存后,在Outliner中先点击我们场景中要Key帧的物体,UE 鼠标右键点击导入的脚本,点击Run,即可运行我们的脚本,我们在路径下查看Sequence是否被创建,如果未在我们的路径下检测到创建的Sequence,在脚本中检查自己的Sequence路径和输出中查看报错信息

 结语

            这样我们就可以通过ython脚本自动给我们想要的物体根据数据添加关键帧了。

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

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

相关文章

【微信小程序开发】自定义组件以及页面布局设计

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于小程序的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.自定义组件的使用步骤(附实…

Sandboxie+Buster Sandbox Analyzer打造个人沙箱

一、运行环境和需要安装的软件 实验环境:win7_x32或win7_x64 用到的软件:WinPcap_4_1_3.exe、Sandboxie-3-70.exe、Buster Sandbox Analyzer 重点是Sandboxie必须是3.70版本。下载地址:https://github.com/sandboxie-plus/sandboxie-old/blo…

制作linux系统内部yum源仓库

需求说明 制作内网linux系统yum源仓库,比较简单的方式就是添加系统镜像,此种yum配置方式可参考文章 https://blog.csdn.net/d1240673769/article/details/108477661 如果无法提供系统镜像,那该如何创建内网的yum源仓库呢?本文提…

HarmonyOS 音视频开发概述

在音视频开发指导中,将介绍各种涉及音频、视频播放或录制功能场景的开发方式,指导开发者如何使用系统提供的音视频 API 实现对应功能。比如使用 TonePlayer 实现简单的提示音,当设备接收到新消息时,会发出短促的“滴滴”声&#x…

JMeter 随机数生成器简介:使用 Random 和 UUID 算法

在压力测试中,经常需要生成随机值来模拟用户行为。JMeter 提供了多种方式来生成随机值,本文来具体介绍一下。 随机数函数 JMeter 提供了多个用于生成随机数的函数,其中最常用的是 __Random 函数。该函数可以生成一个指定范围内的随机整数或…

JAVA转GO

GO 环境配置 go环境 下载go并安装(win下),环境变量他自己要配置上 https://dl.google.com/go/go1.21.3.windows-amd64.msi 验证是否安装成功: //打开cmd go versionVSCODE环境 下载VSCODE…略 配置VSCODE的环境 下载插件 go开发工具包 打开cmd,或者VSCODE自带的终端,…

IDEA使用http client无法识别http-client.env.json的环境配置

http-client.env.json的配置 {"dev": {"baseUrl": "http://192.168.60.176:9160","accessToken": "eyJhbPNOQ"} }选择不到环境 问题原因: 安装了Alibaba Cloud Toolkit插件后,被Alibaba Cloud ROS …

[初始java]——java为什么这么火,java如何实现跨平台、什么是JDK/JRE/JVM

java的名言: ”一次编译、到处运行“ 一、编译语言与解释语言 编译: 是将整份源代码转换成机器码再进行下面的操作,最终形成可执行文件 解释: 是将源代码逐行转换成机器码并直接执行的过程,不需要生成目标文件 jav…

springboot 导出word模板

一、安装依赖 <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version></dependency>二、定义工具类 package com.example.springbootmp.utils;import com.deepoove.poi.XWP…

如何加入开源项目维护并提交代码?本地搭建源码阅读开发构建环境示例: kafka

如何加入开源项目维护并提交代码?本地搭建源码阅读开发构建环境示例: kafka。 大家对开源项目有兴趣、想成为committer,或者工作需要,会从github上获取最新的开源项目源码。本文做一个示例,怎样搭建本地的源码阅读、开发、构建环境。 首先,在github上找到项目的链接,…

Web架构安全分析/http/URL/Cookie攻击

Web 架构安全分析 Web 工作机制及基本概念 传统 Web 架构 LAMP 网页 概念 网页就是我们可以通过浏览器上网看到的精美页面&#xff0c;一般都是经过浏览器渲染过的 .html 页面&#xff0c;html 语言在浏览器中渲染。其中包含了CSS、JavaScript 等前端技术。通过浏览器访问…

ELK + Filebeat 分布式日志管理平台部署

ELK Filebeat 分布式日志管理平台部署 1、前言1.1日志分析的作用1.2需要收集的日志1.3完整日志系统的基本特征 2、ELK概述2.1ELK简介2.2为什么要用ELK?2.3ELK的组件 3、ELK组件详解3.1Logstash3.1.1简介3.1.2Logstash命令常用选项3.1.3Logstash 的输入和输出流3.1.4Logstash配…

ISR实现RDN图像增强

ISR实现RDN图像增强 图像增强作用ISR项目安装1.从PyPI安装ISR&#xff08;推荐&#xff09;&#xff1a;2.从GitHub源代码安装ISR&#xff1a; 用法预测大图像推理 训练创建模型 RDN算法介绍Residual Dense Network的结构残差稠密块&#xff08;Residual Dense Block&#xff0…

三款经典的轮式/轮足机器人讲解,以及学习EG2133产生A/B/C驱动电机。个人机器人学习和开发路线(推荐)

1&#xff0c;灯哥开源&#xff08;有使用指南&#xff0c;适合刚入门新手&#xff09; 机械部分&#xff1a;2个foc无刷电机 硬件和软件部分&#xff1a;没有驱动板子。只有驱动器&#xff0c;主控板esp32和驱动器通过pwm直接通讯。驱动器板子上有蓝色电机接口&#xff0c;直…

抓了几千万条热门股数据,用Python量化验证后发现结果竟然...... | 邢不行

在体育领域一直流传着大热必死的说法&#xff0c;历史上也不乏夺冠大热门爆冷出局的故事。 在金融领域也有大名鼎鼎的金融第三定律&#xff1a;热门的东西不要碰。 01 大热必死 针对这一定律&#xff0c;我们之前也写过相关的文章。 https://mp.csdn.net/mp_blog/creation/ed…

Linux性能优化--性能工具:特定进程内存

5.0 概述 本章介绍的工具使你能诊断应用程序与内存子系统之间的交互&#xff0c;该子系统由Linux内核和CPU管理。由于内存子系统的不同层次在性能上有数量级的差异&#xff0c;因此&#xff0c;修复应用程序使其有效地使用内存子系统会对程序性能产生巨大的影响。 阅读本章后&…

JS 通过年份获取月,季度,半年度,年度

​功能描述&#xff1a; 实例化一个函数&#xff0c;给函数内传递不同的参数&#xff0c;获取从起始年份到现在年度所有的月份&#xff0c;季度&#xff0c;半年度&#xff0c;年度 动态演示 ---------正文代码开始-------- 1. 封装函数 createMonth 注&#xff1a;此代码可…

流程图如何制作?好用的11款流程图软件盘点!

流程图是一种强大的可视化工具&#xff0c;用于清晰地展示各种过程和步骤&#xff0c;应用非常广泛&#xff0c;在各个行业中随处可见&#xff0c;凡是涉及流程步骤的场景&#xff0c;都可以用到流程图&#xff0c;那么问题来了&#xff1a;流程图如何制作&#xff1f; 这篇文…

第0章:怎么入手tensorflow

近年来人工智能的火爆吸引了很多人&#xff0c;网上相关的热门课程报名的人很多&#xff0c;但是坚持下去的人却少。那些晦涩的原理没有一定知识的积累很难能理解。 如果你对人工智能感兴趣&#xff0c;且想利用人工智能去实现某项功能&#xff0c;而不是对人工智能本身感兴趣&…

c语言练习90:反转链表

反转链表 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 与方法一相比方法二的思路更容易实现 报错原因&#xff1a;head和n3不能为空&#xff0c;为空则不能执行后面的操作 报错原因&#xff1a;listnode*n1,n2,n3; 纠正&#xff1a;listnode *n1…