Unity 脚本,仅创建一次资源



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

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

您可以实现一个仅通过 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;
EditorUtility.SetDirty(asset);
// } end foreach
}
}
#endif

AssetCreation 的来源:CreateScriptableObjectAsset

除非您单击 Unity 编辑器顶部菜单栏中的按钮,否则永远不会调用此方法。

注意:如果只是将该脚本放入名为Editor的文件夹中,则可以跳过#if UNITY_EDITOR预处理器。这些脚本会自动从任何生成中排除。

最新更新