在UE中使用Python设置枚举类属性值的问题

本文详细描述了在UnrealEngine的UE编辑器中,如何使用Python设置Actor的数值类和枚举类属性值,包括不同情况下的命名策略和可能遇到的问题解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标

在UE编辑器中使用Python设置枚举类属性值会遇到些问题,本篇记录了这些问题的解决方法。

1. 设置数值类属性值

先在编辑器中选择一个Actor,然后运行下面Python代码:

actor = unreal.EditorLevelLibrary.get_selected_level_actors()[0]
actor.set_editor_property("InitialLifeSpan",0.369)

即可设置此属性:
在这里插入图片描述
你也许不知道准确的属性名字 “InitialLifeSpan” 如何得到,毕竟编辑器中显示的名字带有空格。对于Actor的属性,可以参考【附录1】中的方式查看属性名。

2. 设置枚举类属性值(枚举类定义在C++代码里)

对于枚举类型的属性,下面脚本

actor.set_editor_property("SpawnCollisionHandlingMethod",unreal.SpawnActorCollisionHandlingMethod.ADJUST_IF_POSSIBLE_BUT_DONT_SPAWN_IF_COLLIDING)

将会设置:
在这里插入图片描述
脚本里的 “unreal.SpawnActorCollisionHandlingMethod.ADJUST_IF_POSSIBLE_BUT_DONT_SPAWN_IF_COLLIDING” 其实是 unreal.枚举类名.枚举成员名。你也许不知道他们的准确名字,为此可以参考【附录2】中的方式。

需要注意的是,此方式仅适用于 枚举类定义在C++代码里 的情况。

3. 设置枚举类属性值(枚举类定义在Enumeration资源里)

假如枚举类定义在Enumeration资源里:
在这里插入图片描述
为了测试,做一个蓝图Actor添加此类型的属性:
在这里插入图片描述
这里遇到的问题是:unreal.枚举类名失效了:
在这里插入图片描述
不过,“先获得属性value,然后使用type(value)获得枚举类”的方式依旧奏效。所以可以用下面的脚本:

value = actor.get_editor_property("MyTest")
actor.set_editor_property("MyTest",type(value).CCC)

在这里插入图片描述

(实验发现,去掉type(),即直接使用value.CCC也是可以的)

4. 设置枚举类属性值(枚举类定义在Enumeration资源里,且成员名以数字开头)

当我们在Enum资源中定义的枚举成员有数字开头时:
在这里插入图片描述
使用之前的方式将会产生问题:
在这里插入图片描述

这大概是因为Python中的枚举成员不能以数字作为开头。

这时,需要用cast函数:

value = actor.get_editor_property("MyTest2")
actor.set_editor_property("MyTest2",type(value).cast(2))

在这里插入图片描述
cast将一个数字转换为枚举值。当然,需要事先确认自己想要设置的值和数字的对应关系。

总结

  • 假如枚举类定义在C++中,则直接使用 unreal.枚举类名.枚举成员名
  • 假如枚举类定义在Enumeration资源中。则需要先获得值value,然后使用type(value)来取代之前的unreal.枚举类名
  • 假如枚举类定义在Enumeration资源中,且枚举成员是数字。则需要先获得值value,然后使用type(value).cast(i)将数字i转换为枚举值。此时也需要事先确认自己想要设置的值和数字的对应关系。

附录1:如何知道准确的属性名?

对于Actor,首先在编辑器中找到一个此类型的Actor,并修改一下你感兴趣的属性(确保此属性不是默认值)。然后,选择此Actor后按Ctrl+C来复制,然后找一个文本编辑器按Ctrl+V,就能看到Actor的字符串形式,然后就可以根据显示名和当前值来找到其准确的属性名了:
在这里插入图片描述

附录2:如何知道准确的枚举类名和枚举成员名

直接打印当前属性值:

value = actor.get_editor_property("SpawnCollisionHandlingMethod")
print(value)

这将会打印枚举类名,以及当前的枚举成员名
在这里插入图片描述
在编辑器中修改属性值,并再次打印,就可以按这种方式知道所有编辑器显示的名字与枚举成员名的对应关系。


要想知道当权枚举类的所有成员,有两种方式:

(1) 直接遍历unreal.枚举类名

for member in unreal.SpawnActorCollisionHandlingMethod:
    print(member)

在这里插入图片描述
(2) 先获得属性value,然后遍历 type(value)

actor = unreal.EditorLevelLibrary.get_selected_level_actors()[0]
value = actor.get_editor_property("SpawnCollisionHandlingMethod")
for member in type(value):
    print(member)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值