使用@unreal.uclass()在UE中通过Python定义UObject
目标
学习在Python中使用 @unreal.uclass()
、@unreal.ufunction()
、unreal.uproperty()
等定义UE的Object系统能识别的UObject,并验证效果。
Python装饰器
@
符号是python中“装饰器”的意思,函数装饰器的用法可以参考:Python 函数装饰器 | 菜鸟教程。
不过本篇不需要对它有准确的理解,只需要把它加在类/函数前一行即可。
1. 使用 @unreal.uclass() 定义UObject
可使用@unreal.uclass()
定义Actor等UObject类。
样例脚本:
@unreal.uclass()
class MyTestPyActor(unreal.Actor):
print("define MyTestPyActor")
效果:
2. 使用 unreal.uproperty 定义属性
(要注意,这个不是装饰器,没有@
符号)
样例脚本:
@unreal.uclass()
class MyTestPyActor(unreal.Actor):
TestFloat = unreal.uproperty(float)
TestString = unreal.uproperty(str)
TestStringArray = unreal.uproperty(unreal.Array(str))
TestMap = unreal.uproperty(unreal.Map(str,int))
效果
3. 使用 @unreal.ustruct() 定义UStruct
样例脚本:
@unreal.ustruct()
class MyTestPyStruct(unreal.StructBase):
Test = unreal.uproperty(int)
@unreal.uclass()
class MyTestPyActor(unreal.Actor):
TestStruct = unreal.uproperty(MyTestPyStruct)
效果:
4. 使用 @unreal.uenum() 定义枚举
样例脚本:
@unreal.uenum()
class MyTestPyEnum(unreal.EnumBase):
apple = unreal.uvalue(0)
banana = unreal.uvalue(1)
pear = unreal.uvalue(2)
@unreal.uclass()
class MyTestPyActor(unreal.Actor):
Fruit = unreal.uproperty(MyTestPyEnum)
效果:
5. 使用meta
样例脚本:
@unreal.uclass()
class MyTestPyActor(unreal.Actor):
TestPropA = unreal.uproperty(int,meta=dict(Category="CategoryAAA"))
TestPropB = unreal.uproperty(float,meta=dict(Category="CategoryBBB"))
效果:
6. 使用 @unreal.ufunction 定义函数
官方文档中定义:
unreal.ufunction(meta=None, ret=None, params=None, override=None, static=None, pure=None, getter=None, setter=None)
decorator used to define UFunction fields from Python
下面根据参考文档给出其中重要的部分:
ret=<type>
:指定函数的返回类型。带有 ufunction() 装饰器的 Python 函数通常只有一个返回值。必须指定,除非override=True。params=[<type>,...]
:指定函数参数的类型。必须指定,除非override=True。override=True
:指定此函数重写父类的虚UFunction,并且应继承其类型说明符。如果使用了此参数,则不再需要ret
和params
。meta=dict()
:meta。static=True
:指定此函数为static函数(用于蓝图库中的函数)
样例脚本:
@unreal.uclass()
class MyTestPyActor(unreal.Actor):
TestPropA = unreal.uproperty(int)
@unreal.ufunction(ret=bool,params=[str,int])
def test_func(self,parm_str,parm_int):
print(self.TestPropA)
for i in range(parm_int+self.TestPropA):
print(parm_str)
return True
效果:
使用后可以看到此函数:
触发后可以调用到此函数:
参考文档
这个是UE官方PythonAPI文档,这里面包含所有相关的装饰器和函数:
unreal — Unreal Python 4.27 (Experimental) documentation
此处有基础概念以及 @unreal.ufunction() 相关的补充:
UClass Decorators (Python) | Unreal Engine Community Wiki
此处有很多范例:
Python in Unreal Engine — The undocumented parts | by Filip Sivák | Medium
此处是一个创建蓝图库的范例:
Building UE4 Blueprint Function Libraries in Python | by Joe Graf | Medium
此处有在定义property使用meta的范例:
Create Blueprint Accessible Node in Python | Epic Developer Community
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!