在编辑模式下实例化GameObject

时间:2018-03-24 18:15:20

标签: c# unity3d

我有一些Node个对象的图表,它们有助于代表一些内部游戏状态。我希望能够从预制件中生成GameObjects,使用GUI初始化关联的Node对象 - 也就是说,有人可以在编辑模式下扩展nodes以下的示例。

我不熟悉如何在编辑模式下执行此操作,而不是在运行时实例化。

这是否可能,如果是这样,我将如何进一步发展?我对ScriptableObject很熟悉,但我不确定这里是否相关/必要。

[ExecuteInEditMode]
public class UGraph : MonoBehaviour
{
    [SerializeField] GameObject nprefab;
    [SerializeField] List<Node> nodes;

    public void CreateNode(Transform transform)
    {
        GameObject go = Instantiate(nprefab, transform.position,
                                    transform.rotation) as GameObject;
        AddToGraph(go.GetComponent<Node>());
    }

    public void AddToGraph(Node node)
    {
        node.Graph = this;
        nodes.Add(node);
    }
    ...

有关此问题的一些想法来自:https://gist.github.com/Problematic/a14aeb0638a09f378ad3

1 个答案:

答案 0 :(得分:-1)

Lece向我指出了扩展编辑器的第一页:https://docs.unity3d.com/Manual/editor-CustomEditors.html

这有助于我了解如何使用EditorWindow,并通过按下按钮激活Instantiate

public class NodeCreator : EditorWindow
{
    ....

    [MenuItem ("Window/Node Creator")]
    static void ShowWindow()
    {
        EditorWindow.GetWindow(typeof(NodeCreator));
    }

    ....

    void OnGUI()
    {
        ....
            if (GUILayout.Button("Create"))
            {
                tempobj = Instantiate(obj) as GameObject;
                ...
            }
        ....
    }