检查器 Godot C# 中的结构列表

问题描述 投票:0回答:1

在 Godot 中,使用 C#,我试图做一些我认为非常简单的事情,但我似乎无法让它按照我想要的方式工作。

我有结构体

SnapPoint
,它只存储一个
Vector3
和一个
string

public struct SnapPoint
{
    public Vector3 Position;
    public string Name;

}

然后我想要导出这些

SnapPoint
的列表,我可以在检查器中添加和删除它们。我在其他节点(例如 CSG 节点)上看到过类似的控件,所以我认为这是可能的。

我尝试了几种方法。有些要么不起作用,要么没有按照我想要的方式工作。

我的第一个想法是导出这些结构的列表,但这不起作用。使用 C# 集合或数组会导致构建错误(不支持导出属性的类型),而使用 godot 集合会导致 Varient 类型错误。我还尝试在结构上方添加

[System.Serializable]
,尽管这没有任何作用。我还尝试从结构更改为类,但这也没有帮助。

因此,我考虑使用资源。我创建了一个

SnapPoint
资源并导出了该资源类型。这可行......但意味着我必须为我拥有的每个快照点创建一个新资源,这有点痛苦。

我考虑用自定义检查器编写一个自定义插件,这种方法看起来可以得到我想要的东西,但对于像这样简单的东西来说似乎过于冗长。也许这并不简单,但它似乎确实应该在我的脑海中。我很好这样做,我只是想看看在我走这条路之前是否有人知道更好的方法。

那么,最终是否有一种简单的方法来获得我正在寻找的功能,或者这是 Godot 检查器的限制?或者我从根本上错过了一些东西?我来自 Unity,在他们的检查员中,这个任务是微不足道的。

c# list struct godot godot4
1个回答
0
投票

正如您所发现的,您可以导出扩展

Resource
的自定义类的数组。

目前还没有办法让 Inspector 使用

struct
类型。


让我轻松使用自定义资源数组的一种方法是让脚本在编辑器中运行(即使用

[Tool]
),并为导出的属性定义一个 setter,它将任何
null
替换为一个新实例。这样,当您向检查器中的数组添加新元素时,setter 将创建自定义资源类的新实例来填充数组中的新槽位。

© www.soinside.com 2019 - 2024. All rights reserved.