我需要從 CSV 檔案自動創建 X 數量的可撰寫腳本物件,下圖中是手動完成的示例,為此我需要的最小自動化量是名稱/描述/統計修飾符。
下面的 CSVtoSO 類成功創建了一個名稱和描述作為字串傳入的 SO,呼叫的簡單方法在下面的基本 Inventoryitem 類中,我遇到的問題在于我需要公開類 stat是一個列舉,幾乎將其轉換為從 CSV 讀取的字串
我已經將 statsEquippableItem 類放在底部,在這里我認為我需要一個等效的 setter 方法,但幾乎將一個字串作為引數傳遞為我認為不可能的 stats 類,希望我已經很好地解釋了這篇文章,任何提示會很好 !
public enum Stat
{
Mana,
Stamina,
Spirit,
Intellect,
Strength,
Agility
}
此方法存在于 InventoryItem
public void SetDescription(string Description)
{
this.description = Description;
}

using UnityEngine;
using UnityEditor;
using System.IO;
public class CSVToSO
{
private static string EquipCSVLocation = "/Inventories/TestItemCSV.csv";
[MenuItem("Utilities/generate equipment")]
public static void GenerateEquip()
{
string[] allLines = File.ReadAllLines(Application.dataPath EquipCSVLocation);
foreach (string s in allLines)
{
string[] splitData = s.Split(',');
StatsEquipableItem NewItem = ScriptableObject.CreateInstance<StatsEquipableItem>();
NewItem.SetDisplayName(splitData[0]);
NewItem.SetDescription(splitData[1]);
AssetDatabase.CreateAsset(NewItem,$"Assets/Game/EquippableItems/Resources/Rare/{NewItem.GetDisplayName()}.asset");
}
AssetDatabase.SaveAssets();
}
}
StatsEquipableItem 類
using System.Collections.Generic;
using UnityEngine;
public class StatsEquipableItem : EquipableItem, IModifierProvider
{
[SerializeField]
Modifier[] additiveModifiers;
[SerializeField]
Modifier[] percentageModifiers;
[System.Serializable]
struct Modifier
{
public Stat stat;
public float value;
}
public IEnumerable<float> GetAdditiveModifiers(Stat stat)
{
foreach (var modifier in additiveModifiers)
{
if (modifier.stat == stat)
{
yield return modifier.value;
}
}
}
public IEnumerable<float> GetPercentageModifiers(Stat stat)
{
foreach (var modifier in percentageModifiers)
{
if (modifier.stat == stat)
{
yield return modifier.value;
}
}
}
}
uj5u.com熱心網友回復:
我相信您的問題是“如何將字串轉換為列舉值?”。如果是這樣,列舉具有接受字串并嘗試將其轉換為列舉值的Parse和方法。TryParse
if (System.Enum.TryParse(statStringValue, out Stat statValue))
{
Debug.Log($"Converted {statStringValue} to Stat value {statValue}");
}
else
{
Debug.Log($"Unable to convert {statStringValue} to Stat value");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/475312.html
下一篇:獲取具有反射的實體時如何包含值?
