【发布时间】:2021-04-20 04:29:01
【问题描述】:
Unity 按钮只能从检查器中获取一个参数,但我听说您可以使用单个字符串,然后需要将其拆分然后用作多个参数。我该怎么做?
例如,如果我把它放在一个用逗号分隔的字符串中:“John,Attack,1”(这基本上意味着对于名为 John 的角色,它将将该角色的攻击统计更改 +1)。所以它需要角色的名字,统计类型和数量作为参数。
我已经设置了方法,只需要一个示例和说明如何完成这样的事情。
编辑:根据 TEEBQNE 的建议,我能够让它工作,这就是我所做的。但如果您对代码有更好的方法或改进,请随时分享。
public void ChangeStat(string phrase)
{
string[] words = phrase.Split(',');
//For the 3 parameters need: StringType:cName, EnumType:stat, intType:amount
string cName = words[0];
Stat stat = (Stat)System.Enum.Parse(typeof(Stat), words[1]);
int amount = int.Parse(words[2]);
//if the dictionary contains a valid character name then add the stat level
if (CharacterDatabase.ContainsKey(cName))
{
//Save previous value
int previousValue = CharacterDatabase[cName].Stats[stat];
Debug.Log("Character found!");
//Add the stat by the amount
CharacterDatabase[cName].Stats[stat] += amount;
Debug.Log(CharacterDatabase[cName].CharacterBase.Name + "'s " + stat + " level is now: " + CharacterDatabase[cName].Stats[stat] + "(Before: " + previousValue + " )");
return;
}
//Else the character name was not valid in the dictionary DB
else
{
Debug.Log("Character NOT found!");
return;
}
}
【问题讨论】:
-
string.Split?您可以将回调包装在 lambda/delegate 中,例如button.onClick.AddListener(() => YourMethod(as, many, parameters, as, you, like));.. 有点不清楚您到底在问什么 -
很抱歉,我不确定如何描述它。 TEEBQNE 提供了一个有效的解决方案,我使用他的建议使用我所做的代码更新了我的帖子。希望查看该方法会清除它,我感谢其他建议和方法可以做到这一点。我也会尝试你提到的回调样式
-
你肯定想去委托......基于字符串的东西总是......好吧,在性能、可读性、可维护性方面很糟糕......