-
kvfreedom
- Posts: 69
- Joined: 2024/07/11 04:36
Post
by kvfreedom »
- 1.png (11.34 KiB) Viewed 13114 times
- 2.png (8.49 KiB) Viewed 13114 times
目前InputField<Enum>不支持序列化,希望能实现下面的效果
- 3.png (14.09 KiB) Viewed 13114 times
在不能确定枚举类型时,有枚举类型选择按钮,并且菜单中只会包含枚举的选项
- 4.png (9.76 KiB) Viewed 13114 times
在选择枚举类型后,就可以设置枚举值
- 5.png (11.43 KiB) Viewed 13114 times
在字段的右键菜单中有一个修改类型的选项,点击后打开类型选择菜单,或者是一个类型重置选项,点击后重新出现类型选择按钮
这个功能最好也能应用于abstract和interface的序列化上
-
caitsithware
- 管理人
- Posts: 90
- Joined: 2024/03/26 01:56
Post
by caitsithware »
像这样改变 InputField<T> 是浪费
例如,对于 InputField<int> 来说,这是一个不必要的功能。
我们希望将来支持Generic会员的访问。
这在
Roadmap中列出了(虽然还没有开始)
如果您要求首先安装相当于 Enum.HasFlag<T> 的脚本,我们将考虑支持它。
-
kvfreedom
- Posts: 69
- Joined: 2024/07/11 04:36
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 (14.97 KiB) Viewed 13101 times
为应对只可以单选和可以多选的2种情况,我会分2个枚举来写,所以Enum.HasFlag<T> 我只会在确定没有只能单选的情况时会用到。由于判断枚举是否包含的逻辑并不是标准的,所以我不要求官方实现这个组件。
-
caitsithware
- 管理人
- Posts: 90
- Joined: 2024/03/26 01:56
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
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成员的脚本生成函数这个功能太棒了!