虽然这确实与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 :(得分:1)
您可以使用Dictionary获取返回的结果,并按键访问必要的数据,如下所示:
Dictionary<string, float> result = DetermineCounter();
float hoplite = result["hoplite"];
答案 1 :(得分: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;
}
}