2017-02-06 117 views
-1

雖然這確實涉及Unity,但它實際上更多是一個通用編程問題。有沒有辦法區分列表中的項目?

所以我不能使用元組,我需要返回多個浮點值。這些有點像傷害增益。所以我會讓射手對騎兵造成額外的傷害,這個傷害是x。我的代碼(繁瑣儘管它是)能更好地告訴它:

private List<float> DetermineCounter() 
{ 
    CounterData cd = new CounterData(); 

    List<float> counterList = new List<float>(); 

    if (gameObject.tag == "Hoplite") 
    { 
     float archer = cd.counterArcher = 10.0f; 
     float peltast = cd.counterPeltast =5.0f; 
     float slinger = cd.counterSlinger = 20.0f; 

     List<float> counterData = new List<float>(); 
     counterData.Add(archer); 
     counterData.Add(peltast); 
     counterData.Add(slinger); 

     counterData = counterList; 


    } 

    if (gameObject.tag == "Peltast") 
    { 
     float archer = cd.counterArcher = 5.0f; 
     float slinger = cd.counterSlinger = 5.0f; 

     List<float> counterData = new List<float>(); 
     counterData.Add(archer); 
     counterData.Add(slinger); 

     counterData = counterList; 

    } 

    if (gameObject.tag == "Archer") 
    { 
     float cavalry = cd.counterCavalry = 15.0f; 
     float slinger = cd.counterSlinger = 10.0f; 

     List<float> counterData = new List<float>(); 
     counterData.Add(cavalry); 
     counterData.Add(slinger); 

     counterData = counterList; 

    } 

    if (gameObject.tag == "Cavalry") 
    { 
     float hoplite = cd.counterHoplite = 20.0f; 
     float peltast = cd.counterPeltast = 10.0f; 

     List<float> counterData = new List<float>(); 
     counterData.Add(hoplite); 
     counterData.Add(peltast); 

     counterData = counterList; 

    } 
    return counterList; 

} 

所以它返回2倍或3的值,取決於哪個對象我對劇本上。所以,如果是射手,我已經有腳本了,那麼它會返回值15和10.我的問題是,這些不只是任何值,它們是指具體的東西。 15屬於對騎兵造成的附加傷害因素,這些信息很重要。

因此,當我使用foreach作爲列表時,無法確定每個值對應的內容。我想知道是否有辦法彌補這一點?

+0

一個解決方案是使一個新的類,將保留可能的返回值並返回該類的對象而不是列表。 –

+0

爲什麼不返回一個類型爲Damage的對象或類似的東西? – NicoRiff

+0

出於閒散的好奇心,爲什麼你不能使用元組? – Abion47

回答

1

您可以通過按鍵使用詞典返回的結果和獲得必要的數據是這樣的:

Dictionary<string, float> result = DetermineCounter(); 
float hoplite = result["hoplite"]; 
+0

你是一個救生員,謝謝。 – user3752329

0

我會通過ref參數:

private void DetermineCounter(ref float archer, ref float peltast, ref float slinger, ref float cavalry. ref float hoplat) 
{ 
    if (gameObject.tag == "Hoplite") 
    { 
     archer = 10.0f; 
     peltast = 5.0f; 
     slinger = 20.0f; 
    } 
    else if (gameObject.tag == "Peltast") 
    { 
     archer = 5.0f; 
     slinger = 5.0f; 
    } 
    else if (gameObject.tag == "Archer") 
    { 
     cavalry = 15.0f; 
     slinger = 10.0f; 
    } 
    else if (gameObject.tag == "Cavalry") 
    { 
     hoplite = 20.0f; 
     peltast = 10.0f; 
    } 
} 
相關問題