最近接触了虚幻引擎做一些工作中的内容实际上其他简单的python脚本代码写了不少但是虚幻引擎真的不懂多少就一些简单的基础操作吧没想到虚幻引擎也能玩python所以就去网上和AI自主学习了一下没想到是能实现一些东西和操作的所以自己记录一下。作用呢就是进行批量性的填充相机里面的属性值。这里相当于自己写的代码创建了一个自定义菜单当然是跟到b站看到的学习的这里点击“更换相机人物Actor”呢就会执行test.py里面的代码当然这个菜单只是说为了方便去执行脚本测试因为虚幻编辑器是可以直接给它脚本的文件路径去执行的。注意import unreal爆红是正常的它是拿到编辑器里面运行的,python外面是没有这个库的代码如下start_menu.pyimport os import sys import unreal TEST os.path.dirname(__file__) /test.py # 测试脚本路径 sys.path.append(os.path.dirname(__file__)) # 将当前脚本所在目录添加到Python模块搜索路径中便于导入其他模块 menus unreal.ToolMenus.get() # 获取Unreal Engine的工具菜单系统实例 main_menu menus.find_menu(unreal.Name(LevelEditor.MainMenu)) # 获取主菜单 # 创建一个子菜单 sub_menu main_menu.add_sub_menu( ownerunreal.Name(main_menu.get_name()), # 设置子菜单的所有者为当前主菜单 section_nameunreal.Name(MySection), # 指定菜单项所属的区域名称 nameunreal.Name(MySubMenu), # 设置子菜单的唯一标识名称 labelunreal.Text(脚本测试), # 设置子菜单在界面中显示的标签文本 tool_tipunreal.Text(脚本测试项) # 设置鼠标悬停时显示的提示信息 ) # 创建一个菜单项 menu_entry unreal.ToolMenuEntry( nameunreal.Name(RunTestScript) # 设置菜单项的唯一标识名称 ) # 设置菜单项的类型为标准菜单项 menu_entry.type unreal.MultiBlockType.MENU_ENTRY # 设置菜单项在界面中显示的文本标签 menu_entry.set_label(unreal.Text(更换相机人物Actor)) # 设置该菜单项执行的命令 menu_entry.set_string_command( typeunreal.ToolMenuStringCommandType.PYTHON, # 指定命令类型为Python脚本执行 custom_typeunreal.Name(RunTestScriptCustomType), # 设置自定义命令类型标识 stringexec(open(r{}).read()).format(TEST) # 设置要执行的具体Python命令读取并执行test.py文件 ) # 将创建的菜单项添加到之前创建的子菜单中 sub_menu.add_menu_entry(unreal.Name(MySection), menu_entry) # 刷新所有菜单控件使新添加的菜单项立即生效并显示在界面上 menus.refresh_all_widgets()test.pyimport unreal # 1. 获取子系统 editor_actor_subs unreal.get_editor_subsystem(unreal.EditorActorSubsystem) # 2. 查找目标 Actor # 使用 get_all_level_actors 获取所有 Actor然后通过名字筛选 all_actors editor_actor_subs.get_all_level_actors() hero_actor None scene_name xxx action_name xxx people_actor xxx for actor in all_actors: if actor.get_actor_label() people_actor: # 角色名称 hero_actor actor break if not hero_actor: unreal.log_error(f❌ 错误场景中未找到名为 {people_actor} 的 Actor。请检查拼写或确保其已在关卡中。) else: unreal.log(f✅ 成功找到目标 Actor: {people_actor}) # 3. 循环处理 相机1 到 相机20,1-10就是range(1, 21)11-20就是range(11, 21) for i in range(11, 21): target_display_name f相机{i} # 相机名称自己取得名称叫啥就是啥第几个 found_actor None # 遍历所有 Actor通过 get_actor_label() 匹配显示名称 for actor in all_actors: # 获取 Actor 的显示名称 actor_label actor.get_actor_label() if actor_label target_display_name: found_actor actor break if not found_actor: unreal.log_error(f❌ 未找到显示名称为 {target_display_name} 的 Actor。) else: # 4. 设置 目标 Actor 属性 target_property_name xxx # 请根据蓝图中的实际属性名变量名修改 target_scene_name xxx target_action_name xxx # 设置属性值 found_actor.set_editor_property(target_property_name, hero_actor) # 设置目标 Actor # found_actor.set_editor_property(target_scene_name, scene_name) # 设置场景名称 # found_actor.set_editor_property(target_action_name, action_name) # 设置动作名称 unreal.log(f✅ 已将 {target_display_name} 的目标 Actor 设置为 {people_actor}) unreal.log(✅ 所有相机 Actor 的目标已设置完成。)写好了就去编辑-项目设置-找到python,设置这两个路径点击运行后在输出日志中可以看到打印信息当然Actor细节里面的属性我就不展示了这个自由发挥
UE5自定义菜单插件实现脚本
最近接触了虚幻引擎做一些工作中的内容实际上其他简单的python脚本代码写了不少但是虚幻引擎真的不懂多少就一些简单的基础操作吧没想到虚幻引擎也能玩python所以就去网上和AI自主学习了一下没想到是能实现一些东西和操作的所以自己记录一下。作用呢就是进行批量性的填充相机里面的属性值。这里相当于自己写的代码创建了一个自定义菜单当然是跟到b站看到的学习的这里点击“更换相机人物Actor”呢就会执行test.py里面的代码当然这个菜单只是说为了方便去执行脚本测试因为虚幻编辑器是可以直接给它脚本的文件路径去执行的。注意import unreal爆红是正常的它是拿到编辑器里面运行的,python外面是没有这个库的代码如下start_menu.pyimport os import sys import unreal TEST os.path.dirname(__file__) /test.py # 测试脚本路径 sys.path.append(os.path.dirname(__file__)) # 将当前脚本所在目录添加到Python模块搜索路径中便于导入其他模块 menus unreal.ToolMenus.get() # 获取Unreal Engine的工具菜单系统实例 main_menu menus.find_menu(unreal.Name(LevelEditor.MainMenu)) # 获取主菜单 # 创建一个子菜单 sub_menu main_menu.add_sub_menu( ownerunreal.Name(main_menu.get_name()), # 设置子菜单的所有者为当前主菜单 section_nameunreal.Name(MySection), # 指定菜单项所属的区域名称 nameunreal.Name(MySubMenu), # 设置子菜单的唯一标识名称 labelunreal.Text(脚本测试), # 设置子菜单在界面中显示的标签文本 tool_tipunreal.Text(脚本测试项) # 设置鼠标悬停时显示的提示信息 ) # 创建一个菜单项 menu_entry unreal.ToolMenuEntry( nameunreal.Name(RunTestScript) # 设置菜单项的唯一标识名称 ) # 设置菜单项的类型为标准菜单项 menu_entry.type unreal.MultiBlockType.MENU_ENTRY # 设置菜单项在界面中显示的文本标签 menu_entry.set_label(unreal.Text(更换相机人物Actor)) # 设置该菜单项执行的命令 menu_entry.set_string_command( typeunreal.ToolMenuStringCommandType.PYTHON, # 指定命令类型为Python脚本执行 custom_typeunreal.Name(RunTestScriptCustomType), # 设置自定义命令类型标识 stringexec(open(r{}).read()).format(TEST) # 设置要执行的具体Python命令读取并执行test.py文件 ) # 将创建的菜单项添加到之前创建的子菜单中 sub_menu.add_menu_entry(unreal.Name(MySection), menu_entry) # 刷新所有菜单控件使新添加的菜单项立即生效并显示在界面上 menus.refresh_all_widgets()test.pyimport unreal # 1. 获取子系统 editor_actor_subs unreal.get_editor_subsystem(unreal.EditorActorSubsystem) # 2. 查找目标 Actor # 使用 get_all_level_actors 获取所有 Actor然后通过名字筛选 all_actors editor_actor_subs.get_all_level_actors() hero_actor None scene_name xxx action_name xxx people_actor xxx for actor in all_actors: if actor.get_actor_label() people_actor: # 角色名称 hero_actor actor break if not hero_actor: unreal.log_error(f❌ 错误场景中未找到名为 {people_actor} 的 Actor。请检查拼写或确保其已在关卡中。) else: unreal.log(f✅ 成功找到目标 Actor: {people_actor}) # 3. 循环处理 相机1 到 相机20,1-10就是range(1, 21)11-20就是range(11, 21) for i in range(11, 21): target_display_name f相机{i} # 相机名称自己取得名称叫啥就是啥第几个 found_actor None # 遍历所有 Actor通过 get_actor_label() 匹配显示名称 for actor in all_actors: # 获取 Actor 的显示名称 actor_label actor.get_actor_label() if actor_label target_display_name: found_actor actor break if not found_actor: unreal.log_error(f❌ 未找到显示名称为 {target_display_name} 的 Actor。) else: # 4. 设置 目标 Actor 属性 target_property_name xxx # 请根据蓝图中的实际属性名变量名修改 target_scene_name xxx target_action_name xxx # 设置属性值 found_actor.set_editor_property(target_property_name, hero_actor) # 设置目标 Actor # found_actor.set_editor_property(target_scene_name, scene_name) # 设置场景名称 # found_actor.set_editor_property(target_action_name, action_name) # 设置动作名称 unreal.log(f✅ 已将 {target_display_name} 的目标 Actor 设置为 {people_actor}) unreal.log(✅ 所有相机 Actor 的目标已设置完成。)写好了就去编辑-项目设置-找到python,设置这两个路径点击运行后在输出日志中可以看到打印信息当然Actor细节里面的属性我就不展示了这个自由发挥