文章目录
在Unity编辑器模式下,根据配置文件动态生成代码可以通过编写自定义编辑器脚本实现。以下是一些场景下的5个简化示例,分别说明如何基于不同的配置数据来生成对应的C#代码:
示例1:基于ScriptableObject的配置生成类
using UnityEngine;
using UnityEditor;
using System.IO;
[CreateAssetMenu(fileName = "NewConfig.asset", menuName = "Configuration/New Config")]
public class ConfigurationSO : ScriptableObject
{
public string[] GameObjectNames;
[MenuItem("Assets/Generate Code From Config")]
static void GenerateCode()
{
var config = Selection.activeObject as ConfigurationSO;
if (config != null)
{
StringBuilder sb = new StringBuilder();
foreach (var name in config.GameObjectNames)
{
sb.AppendLine($"public GameObject {
name};");
}
string className = "GeneratedConfig";
string filePath = Path.Combine(Application.dataPath, $"Scripts/{
className}.cs");
File.WriteAllText(filePath, $@"
using UnityEngine;
public class {
className}
{
{
{
sb.ToString()}
}}
");
AssetDatabase.Refresh();
}
else
{
Debug.LogError("Please select a ConfigurationSO asset.");
}
}
}
这个例子中,我们创建了一个ScriptableObject类型ConfigurationSO
,其中包含一个字符串数组用于存储游戏对象名称。当用户通过菜单命令“Assets/Generate Code From Config”执行时,会根据这些名称动态生成一个新的C#类,该类包含了与配置中每个名称相对应的游戏对象字段。
示例2:预制体路径列表生成加载代码
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
using System.IO;
public class