Как создать объект со сценарием из сцены в редакторе Unity

Сейчас я создаю 2D-игру в Unity и сталкиваюсь с проблемами в дизайне уровней. Я хотел бы создать около 100 уровней, каждый с разными префабами на разных позициях.

Чтобы загрузить нужные уровни, я построил архитектуру с объектами, допускающими скрипты. Тайловые карты используются для обозначения препятствий. Таким образом, для каждого уровня можно иметь около 30 различных позиций плитки. Мне кажется неправильным заполнять эту информацию для каждого объекта сценария отдельно.

Сейчас я ищу способ создать уровень в редакторе и сохранить данные непосредственно в объекте, допускающем скрипт. Чтобы иметь кнопку в редакторе, которая гласит: «Сохранить текущий макет сцены, например, на уровне объекта сценария 3». А также возможность загружать каждый уровень сцены в режиме редактора.


person Reflexed Mo    schedule 07.05.2019    source источник
comment
создать уровень в редакторе и сохранить данные напрямую, разве не для этого предназначена сцена?   -  person Jack Brookes    schedule 07.05.2019


Ответы (2)


Вы создаете свой уровень в префабе и ссылаетесь на этот префаб в своем ScriptableObject. Итак, ваш префаб уровня содержит вашу тайловую карту и другие префабы.

person Raphaël Roux    schedule 07.05.2019

Я бы предложил решения Рафаэля, но в некоторых случаях это может быть сложно, если вы имеете дело с проблемами сборных.

Другой способ добиться этого - создать собственный редактор для итерации вашей сцены и создания этого объекта 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

person Joca    schedule 07.05.2019