【问题标题】:How to create scriptable object from scene in unity editor如何在统一编辑器中从场景创建可编写脚本的对象
【发布时间】:2019-05-07 12:27:39
【问题描述】:

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

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

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

【问题讨论】:

  • “在编辑器中创建关卡并直接保存数据”不就是场景的用途吗?

标签: c# unity3d scriptable


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我会建议 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

    【讨论】:

      猜你喜欢
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-08
      • 1970-01-01
      相关资源
      最近更新 更多