只需一次即可创建资产的Unity脚本

时间:2018-10-18 07:34:15

标签: c# unity3d

我正在尝试在Unity中制作TCG(交易卡游戏)作为大学作业。我有一些可编写脚本的对象来创建不同类型的卡。问题是我有600多张卡片,所以最好有一个脚本为每张卡片创建卡片资产并设置其参数(加载图像,文本)。

有什么办法可以做到这一点?重要的是,脚本只能运行一次,而不是每次打开编辑器或启动游戏的新实例时都运行。

1 个答案:

答案 0 :(得分:2)

您可以实现仅通过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预处理程序。这些脚本会自动从任何版本中排除。