本文为B站系列教学视频《使用 UnrealEnginPython 插件进行UE4中的Python开发》——《Day 04 Python与蓝图通信》的学习笔记,UP主为腾讯游戏策划、虚幻社区贡献者 世欺子。
本节课将对在虚幻引擎中,如何实现Python脚本传值到蓝图以及调用蓝图自定义函数(Custom Function)进行详解,然后综合运用上述知识在 UE5.0.3 中生成斐波那契数列(1-9) “兔子梯”。
4.1 Python脚本传值到蓝图
以 Uobject 为例,用法为:uobject.[variable_name] = [python_variable],即直接将 Python 脚本中定义的变量赋值给 Uobject 在蓝图中的变量。
但要注意,Python脚本传值的类型要 UE 蓝图变量基本匹配或者能转化,例如可以将 Python 的 Float 类型赋值给蓝图中的 float 类型,也可以将 Python 中的 String 类型赋值给蓝图的 Name 类型结构体。
目前 UnrealEnginPython 插件不支持诸如如数组、映射或 Python 的 list、dict等数据结构传值,即便代码不报错也会传入 0 或 空值。想要对这些数据结构进行传值,可以在蓝图内自定义组合结构体的函数。
4.2 Python脚本调用蓝图自定义函数(Custom Function)
以 Uobject 为例,用法为:
- 按函数名调用:
uobject.call('function arg0 arg1 arg2 ... argN...'),例如:text_render_component.call('SetText Hello')。经UP主这种使用方法在某些情况下会报错,因此不推荐这种用法。 - 获取返回值:
ret = uobject.call('function, arg0, arg1, ... , argN...),参数量视函数需要调用的参数量而定,例如:actor = uobject.get_owner() - 直接调用 “.call_function”,例如
actor.call_function('MyCustomFunction')
4.3 生成斐波那契数列(1-9) “兔子梯”
-
在内容浏览器中 “
Content” 目录下新建文件夹,命名为 “UsingBPCustomFunctions”,用来保存后面用到的资产。新建一个关卡 “Basic”并保存。接着新建一个 Actor 类,命名为 “BP_UsingBPCustomFunctions”,用于生成“兔子梯”。然后获取兔子对的静态网格模型 “SM_Two_Bunnies”,添加到 “UsingBPCustomFunctions” 目录下。

-
双击 “
BP_UsingBPCustomFunctions”,弹出 “BP_UsingBPCustomFunctions” 资产编辑窗口,在 “组件” 面板添加 一个Python组件,设置 “Python Module” 为 “tutorial_using_bp_custom_functions”,将 “Python Class” 设置为 “Calclocation”。

-
新建 “浮点”类型 变量 “
LocationX”、“LocationY” 和 “LocationZ”,用于保存兔子的位置,以及 “变换数组”类型 变量 “Transforms”。

-
新建函数 “
SpawnBunny”,为该函数编写蓝图,用于获取“兔子梯”中每个兔子对的位置并根据位置放置静态网格模型。

-
新建函数 “
AddToTransformArray”,为该函数编写蓝图,用于保存斐波那契数列计算出的每个兔子对的位置。

-
新建事件分发器 “
onCalcLocation”,并在 “BP_UsingBPCustomFunction” 事件图表界面编写蓝图程序。

-
打开
Python Editor新建脚本tutorial_using_bp_custom_functions,参考UP主在视频中提供的代码。import unreal_engine as ue '''斐波那契数列递归定义''' def fib_recur(n): assert n >= 0, "n > 0" if n <= 1: return n return fib_recur(n - 1) + fib_recur(n - 1) class Calclocation: def begin_play(self): self.uobject.get_owner().bind_event("OnCalcLocation", self.calc_location) '''计算每层“兔子梯”中所以兔子对的位置''' def calc_location(self): Actor = self.uobject.get_owner() # Python脚本调用蓝图自定义函数的第二种方式--获取返回值 for i in range(1, 10): f = fib_recur(i) for j in range(1, f+1): Actor.LocationX = i * 100 # Python脚本传值到蓝图 Actor.LocationY = (f - 1) * (-75) + (j - 1) * 150 # Python脚本传值到蓝图 Actor.LocationZ = (i - 1) * 150 # Python脚本传值到蓝图 Actor.call_function('AddToTransformArray') # Python脚本调用蓝图自定义函数的第三种方式--使用call_function() -
将 “
BP_UsingBPCustomFunctions” 置于场景中,运行测试。可以看到“兔子梯”成功生成。



本文详细介绍了如何在虚幻引擎4中使用Python脚本与蓝图交互,包括传值、调用自定义函数,并应用到生成斐波那契数列构成的兔子梯实例。
1643

被折叠的 条评论
为什么被折叠?



