Assetの動的削除のやり方
Q&A
Closed
解決したいこと
現在簡単なゲームを作っているのですが、装備アイテムの管理で、
(1)Assetの動的削除
(2)その他の有用なアイテム管理方法
のうちどちらかを発見しなくてはならなくなりました。
まず前提として、私はアイテムを現在ScriptableObjectで管理しています。
やり方としては、Asstesファイルの中に装備アイテムの基本データ(名前、レア度、各種初期値など)を格納したScriptableObjectを作成し、データベースとして同じくScriptableObjectであるItemDataBase内のListに格納しています。
そして、プレイヤーが実際にアイテムを獲得するときは、データベースに登録されてあるアイテムから対応するものをDeepCopyでコピーして別のScriptableObjectとして、今度は所持アイテムとして同じくScriptableObjectであるItemBox内のListに格納しています。
つまり、Asstes内には、基本データとなるScriptableObjectと、それを基にした実際に持っているアイテムのScriptableObjectが存在することになります。
ここで、所持アイテムを売却や処分によって消去したい場合、プレイヤーから見えなくする(ItemBox内のListからRemoveする)だけではなく、Unity内から、つまりAsstes内から削除したいのです。
上記のような場合どのようにすれば、Assetの動的削除を行えるのでしょうか、もしくは、何かほかのいいアイテムの管理の仕方はありますでしょうか?
このコードで新しく獲得する武器のアセットを作っています
public WeponDate CreateWeponAsset(int objectNumber)
{
WeponDate asset = ScriptableObject.CreateInstance<WeponDate>();
string itemName = GetWeponByNumber(objectNumber).GetItemName();
int havingCount = GetWeponByNumber(objectNumber).GetGotCount() + 1;
GetWeponByNumber(objectNumber).SetGotCount(havingCount);
EditorUtility.SetDirty(GetWeponByNumber(objectNumber));
AssetDatabase.CreateAsset(asset, "Assets/HavingWepon/"+itemName+havingCount+".asset");
AssetDatabase.SaveAssets();
return asset;
}
このコードで上で作ったアセットに基本データからデータをコピーしています。
public void WeponGetCount(int objectnumber)
{
WeponDate GotWepons = CreateWeponAsset(objectnumber);
GotWepons.WeponDateDeepCopy(GetWeponByNumber(objectnumber));
equipBox.GetWeponBox().Add(GotWepons);
EditorUtility.SetDirty(equipBox);
EditorUtility.SetDirty(GotWepons);
AssetDatabase.SaveAssets();
}
よろしくお願いします。