如何在统一编辑器中从场景创建可编写脚本的对象

时间:2019-05-07 12:27:40

标签: c# unity3d scriptable

我目前正在Unity中创建2D游戏,面临关卡设计方面的麻烦。我想创建大约100个关卡,每个关卡在不同的位置具有不同的预制件。

为了加载适当的级别,我建立了带有可脚本化对象的体系结构。图块图用于表示障碍。因此,每个级别可能有大约30个不同的平铺位置。对我来说,分别在每个可编写脚本的对象上填写这些信息似乎是错误的。

我现在正在寻找的是一种在编辑器中创建关卡并将数据直接保存在可编写脚本的对象中的方法。在编辑器中有一个按钮,上面写着:“将当前场景布局保存在例如可编写脚本的对象级别3中”。并且还可以在编辑器模式下将每个关卡加载到场景。

2 个答案:

答案 0 :(得分:0)

您可以在预制中创建关卡,并将该​​预制引用到ScriptableObject中。 因此,您的关卡预制包含您的tilemap和其他预制。

答案 1 :(得分:0)

我会建议Raphael解决方案,但是在某些情况下,如果您要处理预制件问题,这可能会很难。

实现此目的的另一种方法是创建自定义编辑器以迭代场景并创建此ScriptableObject。

我将此代码用于类似的内容

        GameObject __PARENT = GameObject.Find("__PARENT");
        Vector3 centroid = Vector3.zero;
        Transform[] childs = __PARENT.transform.GetComponentsInChildren<Transform>();
        foreach (Transform go in childs)
        {
            Debug.Log(go.name);
            centroid += go.position;
        }
        centroid /= (__PARENT.transform.childCount);
        GameObject centerPivotObject = new GameObject();
        centerPivotObject.name = "CenterPivotObject";            
        centerPivotObject.transform.position = centroid;

        foreach (Transform go in childs)
        {
            go.parent = centerPivotObject.transform;
        }

在我的情况下,我试图在父对象中居中旋转,但是您可以使用此方法在您的父游戏中组合此迭代,并使用此脚本来创建ScriptableObject

https://wiki.unity3d.com/index.php/CreateScriptableObjectAsset