creator3d 支持在属性面板编辑自定义掩码吗?

目前能在编辑器属性面板里编辑掩码的类型只发现有 Layers.BitMask 类型

例如可以像下面使用
@property({type:Layers.BitMask})
public topLayer:Layers.BitMask = Layers.BitMask.ALL;企业微信截图_16119141221830

自己尝试模仿Layers.BitMask写一个自定义的掩码类型,使用报错


自定义的掩码不能作为类型

你好,自定义 bitMask 类型可参考这个 demo 片段里的写法

按你这样做还是有问题,我的demo如下图,我的枚举值只定义了5个,但是在属性面板显示属性时为什么把自定义的图层枚举也显示出来
企业微信截图_16202879283453

属性面板里除了出现自定义枚举,还出现了很多Layer层的枚举,如下图
企业微信截图_16202880251799

尝试选择列表中自定义的mask0-mask4,发现无法打勾,选择掩码失败,这是个bug。说白了就是creator的自定义掩码没有做好,根本无法使用。

如果能在属性面板里只出现自定义的枚举掩码,并且能选择枚举,那就达到要求了。混入了Layer的枚举就觉得很怪异。

是的,即将发布的 v3.1 正式版有修复这个问题。

除了混入Layers的枚举,自定义的枚举也不能勾选,这也是个bug。

@property({type:Layers.BitMask}) 像这个写法可以使用掩码类型,但是只有Layers.BitMask能用,没有用到BitMask(type),这是怎么做到的。感觉这种写法更好,有什么办法也可以让其它枚举类型也能用这种写法呢?

不能勾选?没发现有额外的这个问题,你编辑器版本是多少的,完整的代码就上面的贴图吗,我这边用 v3.1 内部测试版试了你的代码,是可以切换自定义枚举项的

creator3.0.1,上面的就是完整代码,混入的layers层是我在设置面板里添加的。
可能是被layers的枚举混入造成的。
只有mask4 = 1 << 4 这个可以选,但是勾选这个会把其它所有的枚举全勾选上,和Everything的功能一样,取消勾选的话会把大部分枚举都取消勾选

Layers.BitMask 的数据类型是 BitMask 类型,而 BitMask(enumData) 是将 enumData 数据类型转为 BitMask 类型。如果想用 type: xx.xxx 这种形式,提前执行好 xx.xxx = BitMask(enumData) 这个动作。

用了creator3.1,虽然自定义掩码混入图层的枚举是改了。
但是在脚本里声明引擎自带的图层属性时,发现只出现编辑器默认自带的图层,自己新增的图层是无法显示的。

如下面代码。
@property({type:Layers.Enum})
public layer:Layers.Enum = Layers.Enum.DEFAULT;

在属性面板展开的图层枚举列表里只会有编辑器默认的层,自己新增定义的层不出现。但是在node的面板的layer属性能正常显示所有枚举。

同理声明引擎自带的物理碰撞组属性时也无法出现新增自定义的组枚举,如下代码。

@property({type:PhysicsSystem.PhysicsGroup})
public group:number = PhysicsSystem.PhysicsGroup.DEFAULT;

自己加了一个Floor碰撞组,但是无法在脚本声明的碰撞组属性显示。但是碰撞器上的group属性能正常显示所有。

3.1之前的版本这些功能是正常的,可能是你改了那个自定义枚举类型会混入图层枚举类型导致的吧。

能否补充些截图说明

很简单的操作,你在项目设置的Layer里新增一个MyLayer层。

然后创建一个Test.ts脚本,挂在一个节点上,脚本里加上下面的代码
@property({type:Layers.Enum})
public layer:Layers.Enum = Layers.Enum.DEFAULT;

你在编辑器Test的属性面板的,展开 layer 的枚举列表,你看看有没有你新增的那个MyLayer层。
再展开node面板的layer属性枚举列表,对比一下。

同理物理碰撞组的测试也一个样。结果都是在自己脚本声明的层或碰撞组不会出现在项目设置里添加的新的层或组

怎么样,按我说的方式能重现出问题吗。还是说要我截图给你看是什么回事.

多谢,了解了,重现了你说的问题。“同理物理碰撞组的测试也一个样”,这个也理解了,解决这个合并项目配置数据的需求,我在内部先反馈下这个需求。