Dio*_*aak 7 c# performance unity-game-engine
我正在使用Unity制作游戏.我在游戏中有多个动物敌人.
我正在进行游戏中的任务,你必须杀死随机数量的随机动物,我已经拥有了.
我遇到的问题是当你杀死动物时增加任务数量.
我有一个脚本(死)坐在每只动物身上,当动物死亡时,它会在死亡脚本中调用一个公共函数.
从死亡脚本中,它应该在"MissionHolder"脚本中增加一个int值,其中所有动物都有一个int值,当你杀死一只动物时它会增加.
问题是当玩家杀死一只动物时,我不知道哪只动物被杀死了,我做的是这样的:
public string Name;
public MissionHolder missionHolder;
public void Kill()
{
if (name == "Tiger")
{
missionHolder.Tiger += 1;
}
if (name == "Hyena")
{
missionHolder.Hyena += 1;
}
if (name == "Gorilla")
{
missionHolder.Gorilla += 1;
}
if (name == "Giraffe")
{
missionHolder.Giraffe += 1;
}
if (name == "Gazelle")
{
missionHolder.Gazelle += 1;
}
Run Code Online (Sandbox Code Playgroud)
等等
现在我只是在死亡剧本上用它的名字命名每只动物,但这不是很有效.
有谁知道更好的方法吗?
你可以用Dictionary
.将所有动物类型注册为字符串,然后将其Action
用作Start
或Awake
函数中的值.这Action
将包含您在if
语句中当前拥有的所有名称.当你想杀死一只动物时,检查它是否在那里,Dictionary
然后执行Action
.
public string Name;
public MissionHolder missionHolder;
Dictionary<string, Action> animalToAction = new Dictionary<string, Action>();
void Start()
{
//Register and animal type and Action
animalToAction.Add("Tiger", delegate { missionHolder.Tiger += 1; });
animalToAction.Add("Hyena", delegate { missionHolder.Hyena += 1; });
animalToAction.Add("Gorilla", delegate { missionHolder.Gorilla += 1; });
animalToAction.Add("Giraffe", delegate { missionHolder.Giraffe += 1; });
animalToAction.Add("Gazelle", delegate { missionHolder.Gazelle += 1; });
}
Run Code Online (Sandbox Code Playgroud)
你的新杀戮功能:
public void Kill()
{
//If the name exists in the dictionary, execute the corresponding delegate
Action action;
if (animalToAction.TryGetValue(Name, out action))
{
//Execute the approprite code
action();
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用它EventManager
来执行此操作,但这不是必需的.