我正在尝试在Unity中制作TCG(交易卡游戏)作为大学作业。我有一些可编写脚本的对象来创建不同类型的卡。问题是我有600多张卡片,所以最好有一个脚本为每张卡片创建卡片资产并设置其参数(加载图像,文本)。
有什么办法可以做到这一点?重要的是,脚本只能运行一次,而不是每次打开编辑器或启动游戏的新实例时都运行。
答案 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
预处理程序。这些脚本会自动从任何版本中排除。