はじめに
スクリプトからAssemblyDefinitionを生成する機会があったのですがAssemblyDefinitionAsset
はsealed
になっていますしコンストラクタもなくてAssetDatabase.CreateAsset
で生成できませんでした。
AssetDatabase.CreateAsset(new AssemblyDefinitionAsset());
jsonから生成する
幸いAssemblyDefinitionAsset
の中身はjsonなのでFile.WriteAllText
から生成することにしました。
asmdefの中身.json
{
"name": "SampleAssemblyDefinition",
"rootNamespace": "",
"references": [],
"includePlatforms": [],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}
JsonAssemblyDefinition.cs
public class JsonAssemblyDefinition
{
public string name;
public string rootNamespace;
public object[] references;
public object[] includePlatforms;
public object[] excludePlatforms;
public bool allowUnsafeCode;
public bool overrideReferences;
public object[] precompiledReferences;
public bool autoReferenced;
public object[] defineConstraints;
public object[] versionDefines;
public bool noEngineReferences;
}
スクリプトから生成します。
EditorCreateAssemblyDefinition.cs
using System.IO;
using UnityEditor;
using UnityEngine;
public class EditorCreateAssemblyDefinition : Editor
{
[MenuItem("Qiita/CreateAssemblyReference")]
private static void CheckSelectObject()
{
JsonAssemblyDefinition json = new JsonAssemblyDefinition()
{
name = "JsonAssemblyDefinition",
};
string text = JsonUtility.ToJson(json);
string path = Path.Combine(Application.dataPath, "Scenes/EditorCreateAssemblyReference/JsonAssemblyDefinition.asmdef");
File.WriteAllText(path, text);
AssetDatabase.ImportAsset("Assets/Scenes/EditorCreateAssemblyReference/JsonAssemblyDefinition.asmdef", ImportAssetOptions.ForceUpdate);
}
}
無事生成できました。
おわりに
正式にアセットを作成できる方法があるのかもしれませんが、この方法だとほかのクラスのアセットでもスクリプトから作成できると思います。