更易用的字段序列化

kvfreedom
Posts: 69
Joined: 2024/07/11 04:36

更易用的字段序列化

Post by kvfreedom »

1.png
1.png (11.34 KiB) Viewed 13116 times
2.png
2.png (8.49 KiB) Viewed 13116 times
目前InputField<Enum>不支持序列化,希望能实现下面的效果
3.png
3.png (14.09 KiB) Viewed 13116 times
在不能确定枚举类型时,有枚举类型选择按钮,并且菜单中只会包含枚举的选项
4.png
4.png (9.76 KiB) Viewed 13116 times
在选择枚举类型后,就可以设置枚举值
5.png
5.png (11.43 KiB) Viewed 13116 times
在字段的右键菜单中有一个修改类型的选项,点击后打开类型选择菜单,或者是一个类型重置选项,点击后重新出现类型选择按钮

这个功能最好也能应用于abstract和interface的序列化上
User avatar
caitsithware
管理人
Posts: 90
Joined: 2024/03/26 01:56

Re: 更易用的字段序列化

Post by caitsithware »

像这样改变 InputField<T> 是浪费
例如,对于 InputField<int> 来说,这是一个不必要的功能。

我们希望将来支持Generic会员的访问。
这在Roadmap中列出了(虽然还没有开始)

如果您要求首先安装相当于 Enum.HasFlag<T> 的脚本,我们将考虑支持它。
User avatar
caitsithware
管理人
Posts: 90
Joined: 2024/03/26 01:56

Re: 更易用的字段序列化

Post by caitsithware »

另外,由于判断EnumFlags是否包含常规Enum是一种特殊用法,资产方官方无法支持。
kvfreedom
Posts: 69
Joined: 2024/07/11 04:36

Re: 更易用的字段序列化

Post by kvfreedom »

caitsithware wrote: 2024/08/09 09:51 像这样改变 InputField<T> 是浪费
例如,对于 InputField<int> 来说,这是一个不必要的功能。

我们希望将来支持Generic会员的访问。
这在Roadmap中列出了(虽然还没有开始)

如果您要求首先安装相当于 Enum.HasFlag<T> 的脚本,我们将考虑支持它。
或许可以允许在InputField<T>上加一个[TypeSelectableAttribute]来实现上面的功能。
我不确定Roadmap上的Generic Call Script Generation最终的效果是怎样的,不知道是否能有助于在不写Editor的情况下实现判断EnumFlags是否包含常规Enum的组件。
1.png
1.png (14.97 KiB) Viewed 13103 times
为应对只可以单选和可以多选的2种情况,我会分2个枚举来写,所以Enum.HasFlag<T> 我只会在确定没有只能单选的情况时会用到。由于判断枚举是否包含的逻辑并不是标准的,所以我不要求官方实现这个组件。
User avatar
caitsithware
管理人
Posts: 90
Joined: 2024/03/26 01:56

Re: 更易用的字段序列化

Post by caitsithware »

问题在于,虽然 InputField<T> 被广泛使用,但请求是专门化的。
无论指定类型如何,InputFIeld<T> 的内部数据结构都是相同的,但如果包含某些类型的特殊数据,则其他类型(例如 InputFIeld<int>)也会包含不必要的数据。

基本上,如果要创建独特的功能,每个用户都应该编写特定的脚本。
在本例中,我们不会创建通用的 EnumContainsEvaluateComponent,而是创建一个 EnemyTypeContainsEvaluateComponent,或者在静态类中创建一个诸如 EnemyTypeUtility.Contains(EnemyTypeFlags flags, EnemyType element) 之类的方法,然后生成该节点的成员访问脚本请这样做。

我们正在规划一个用于调用Generic成员的脚本生成函数,但例如,如果您在静态类中创建 EnumFlagsUtility.Contains<TFlags, TEnum>(TFlags flag, TEnum element) 等代码,则可以创建一个节点中 TFlags 和 TEnum 的脚本现在可以设置类型,并且我们正在计划一项功能,允许您结合指定类型设置输入和输出字段。
kvfreedom
Posts: 69
Joined: 2024/07/11 04:36

Re: 更易用的字段序列化

Post by kvfreedom »

caitsithware wrote: 2024/08/09 11:51 问题在于,虽然 InputField<T> 被广泛使用,但请求是专门化的。
无论指定类型如何,InputFIeld<T> 的内部数据结构都是相同的,但如果包含某些类型的特殊数据,则其他类型(例如 InputFIeld<int>)也会包含不必要的数据。

基本上,如果要创建独特的功能,每个用户都应该编写特定的脚本。
在本例中,我们不会创建通用的 EnumContainsEvaluateComponent,而是创建一个 EnemyTypeContainsEvaluateComponent,或者在静态类中创建一个诸如 EnemyTypeUtility.Contains(EnemyTypeFlags flags, EnemyType element) 之类的方法,然后生成该节点的成员访问脚本请这样做。

我们正在规划一个用于调用Generic成员的脚本生成函数,但例如,如果您在静态类中创建 EnumFlagsUtility.Contains<TFlags, TEnum>(TFlags flag, TEnum element) 等代码,则可以创建一个节点中 TFlags 和 TEnum 的脚本现在可以设置类型,并且我们正在计划一项功能,允许您结合指定类型设置输入和输出字段。
我明白了,完全认同你的观点,用于调用Generic成员的脚本生成函数这个功能太棒了!
Post Reply