You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

UE5中如何将Editor Utility Widget的根部件传递给Execute Python Script节点以修改控件内容

UE5中如何将Editor Utility Widget的根部件传递给Execute Python Script节点以修改控件内容

嘿,我来帮你搞定这个问题!你遇到的核心问题是没找对传递根部件的正确姿势,以及Python里操作控件的API用法有点小偏差,一步步调整就好:


1. 先在Editor Utility Widget蓝图里配置参数传递

打开你的EUW蓝图,找到按钮的点击事件链,对着Execute Python Script节点做这几步:

  • 点击节点右上角的「+」添加一个输入参数,命名为widget_root,类型选择Widget Object Reference(一定要选对象引用,不是类引用)
  • 直接把蓝图里的Root Widget拖到这个新参数的输入pin上,这样点击按钮时就会把根部件对象传过去

2. 修正Python脚本的函数逻辑

你之前的代码里直接调用widget_reference.set_text是不对的——set_text是文本框控件的专属方法,不是根部件的,得先从根部件里定位到目标文本框才行。修正后的Python代码如下:

import unreal

class SomeClass(unreal.GlobalEditorUtilityBase):
    @staticmethod
    def reload():
        import importlib
        import phil_ui
        importlib.reload(phil_ui)

    @staticmethod
    def some_method(widget_root):
        # 通过控件名称从根部件里定位目标文本框
        text_box = widget_root.find_widget("ResultTextBox")
        if text_box:
            # 给文本框设置内容
            text_box.set_text("test")
            unreal.log("文本设置成功!")
        else:
            # 找不到控件时打个警告日志,方便排查
            unreal.log_warning("警告:未找到名为ResultTextBox的文本框控件,请检查控件名称是否匹配!")

3. 在Execute Python Script节点里正确调用函数

在节点的脚本输入框里,要先拿到蓝图传过来的根部件参数,再传给你的Python方法:

import someclass  # 确保这个脚本放在UE能识别的Python路径里,比如项目Content/Scripts文件夹下
import unreal

# 从蓝图传递的参数中获取根部件对象
widget_root = unreal.PythonLibrary.get_editor_property('widget_root')
# 调用自定义方法
someclass.SomeClass.some_method(widget_root)

几个关键注意事项

  • 控件名称要完全匹配:文本框在蓝图里的命名必须是ResultTextBox,大小写、拼写都不能错,不然find_widget会返回None
  • Python脚本路径要正确:把你的someclass.py放在项目的Content/Scripts目录下,UE会自动扫描这个路径下的Python模块
  • 调试小技巧:如果还是没效果,可以在Python函数里加一行unreal.log(f"拿到的根部件:{widget_root}"),打开UE的输出日志窗口看是否成功拿到了对象,排查是传递问题还是控件查找问题

这样调整后,点击按钮就能触发Python脚本修改文本框内容啦😉

火山引擎 最新活动