Unity скрипт для создания ресурсов только один раз - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь сделать TCG (карточную игру) в Unity в качестве университетского задания.У меня есть несколько скриптовых объектов для создания разных типов карт.Проблема в том, что у меня более 600 карт, поэтому было бы неплохо иметь скрипт, который создает ресурс карты для каждой карты и устанавливает их параметры (загрузка изображений, текстов).

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

1 Ответ

0 голосов
/ 18 октября 2018

Вы можете реализовать метод, который вызывается только через определенную кнопку в UnityEditor, которая генерирует все ваши активы, используя атрибут MenuItem :

#if UNITY_EDITOR

    using System.IO;
    using UnityEditor;
    using UnityEngine;

    public static class YourExtensions
    {
        [MenuItem("YourMenu/GenerateAssets")]
        private static void GenerateAssets()
        {
            // TODO Get and parse required information e.g. from Database / Xml or Text file
            // I'ld simply make a new class for that like "CardInformation"

            // List<CardInformation>() cardlist = new List<CardInformation>();


            // Somehow receive your information
            // cardlist.add(new CardInformation(parameters));



            // TODO Generate Scriptableobjects

            // foreach(var cardInfo in cardlist){
                    YourScriptableObjectClass asset = ScriptableObject.CreateInstance<YourScriptableObjectClass > ();

                    string path = AssetDatabase.GetAssetPath (Selection.activeObject);
                    if (path == "") 
                    {
                        path = "Assets";
                    } 
                    else if (Path.GetExtension (path) != "") 
                    {
                        path = path.Replace (Path.GetFileName (AssetDatabase.GetAssetPath (Selection.activeObject)), "");
                    }

                    string assetPathAndName = AssetDatabase.GenerateUniqueAssetPath (path + "/New " + typeof(YourScriptableObjectClass ).ToString() + ".asset");

                    AssetDatabase.CreateAsset (asset, assetPathAndName);

                    AssetDatabase.SaveAssets ();
                    AssetDatabase.Refresh();
                    EditorUtility.FocusProjectWindow ();
                    Selection.activeObject = asset;

                    // TODO here set your passed parameters for this asset
                    // asset.parameter = cardInfo.parameters;
            // end foreach
        }

    }

#endif

Источник для AssetCreation: CreateScriptableObjectAsset

Этот метод никогда не будет вызван, если вы не нажмете кнопку в верхней строке меню редактора Unity.

Примечание: Вы можете пропустить #if UNITY_EDITOR препроцессоры, если вы просто поместите этот скрипт в папку с именем Editor.Эти скрипты автоматически исключаются из любой сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...