0

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

为了加载适当的关卡,我构建了一个带有可脚本化对象的架构。瓦片地图被用来表示障碍物。因此,每个级别可以有大约 30 个不同的瓷砖位置。在我看来,分别在每个可编写脚本的对象上填写这些信息似乎是错误的。

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

4

2 回答 2

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;
        }

在我的情况下,我试图在父对象中居中枢轴,但是您可以使用 this 在您的父游戏上进行迭代并使用它创建您的 ScriptableObject

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

于 2019-05-07T15:21:09.380 回答
0

您在预制件中创建关卡并将此预制件引用到您的 ScriptableObject 中。所以你的关卡预制件包含你的瓦片地图和其他预制件。

于 2019-05-07T14:14:55.953 回答