如何在 Unity C# 中为多个游戏对象移动多线程
How to make Multi-threading for multiple gameobjects moves in Unity C#
我现在有问题。我正在为炸弹人游戏创建一个遗传编程 AI。
我的问题与线程相关;我想同时执行我的基因组。
这是一个例子:
我有人口
Genome[] population = //5 genomes for example
每个基因组都有一个动作或动作
上, 左, 右, 下, 炸弹
它产生随机移动:
基因组 1
右,炸弹,左,上,右...
基因组 2
左,左,右,左,炸弹...
等...
这些动作或动作一直有效,直到玩家还活着。我想使用线程在我的播放器 (AI) 中应用这些移动。
我试过这个:
for(Genome g in population){
Thread thread = new Thread(g.run);
thread.Start();
}
在 运行() 方法中,它会生成随机移动并将其应用于作为 AI 的游戏对象。比如UP然后上去。我使用协程来执行动作,因为这些动作有动画。
这个游戏是实时的,每帧都会触发动作。
是否可以在单独的线程中同时制作我所有的基因组 运行?可能在游戏对象的另一个实例中。我不想让我的 AI 被这些动作弄糊涂。
我有一个可能的解决方案,但我不知道如何实施它。
每个基因组都有关于游戏、敌人、炸弹等的相同信息。
但是他们的动作是不同的,例如:
5台电脑,游戏环境相同,敌人相同
但是,每台电脑被不同的AI(基因组)玩不同的走法,会得到不同的结果。在第一个基因组中,他在游戏早期 3 秒后死亡,另一个基因组在 5 秒后死亡。然后,另一个还活着;类似的东西。我不知道是否可行,但你能就我的情况给我一些建议吗?
提前谢谢你。
我已经成功地为循环内的每个基因组创建了一个线程,并且它可以工作。
foreach(Genome g in population)
{
GP_Agent gp_agent = new GP_Agent();
//passing the callback method, when the process is done then invoke the callback
ThreadStart thread = delegate{
gp_agent.next_move(g, callback);
};
thread.Invoke();
}
public void callback(String move){
//apply the result move from the genome
Debug.Log(genome.id + " = " +move);
}
作为此代码的结果。我同时得到了所有基因组的动作
1 = UP
2 = 向下
3 = 左
当我将这些动作应用到游戏对象时。 AI 很困惑,因为这些动作同时应用,这就是我想要的
我现在有问题。我正在为炸弹人游戏创建一个遗传编程 AI。
我的问题与线程相关;我想同时执行我的基因组。
这是一个例子:
我有人口
Genome[] population = //5 genomes for example
每个基因组都有一个动作或动作 上, 左, 右, 下, 炸弹
它产生随机移动:
基因组 1 右,炸弹,左,上,右...
基因组 2 左,左,右,左,炸弹...
等...
这些动作或动作一直有效,直到玩家还活着。我想使用线程在我的播放器 (AI) 中应用这些移动。
我试过这个:
for(Genome g in population){
Thread thread = new Thread(g.run);
thread.Start();
}
在 运行() 方法中,它会生成随机移动并将其应用于作为 AI 的游戏对象。比如UP然后上去。我使用协程来执行动作,因为这些动作有动画。
这个游戏是实时的,每帧都会触发动作。
是否可以在单独的线程中同时制作我所有的基因组 运行?可能在游戏对象的另一个实例中。我不想让我的 AI 被这些动作弄糊涂。
我有一个可能的解决方案,但我不知道如何实施它。
每个基因组都有关于游戏、敌人、炸弹等的相同信息。 但是他们的动作是不同的,例如:
5台电脑,游戏环境相同,敌人相同
但是,每台电脑被不同的AI(基因组)玩不同的走法,会得到不同的结果。在第一个基因组中,他在游戏早期 3 秒后死亡,另一个基因组在 5 秒后死亡。然后,另一个还活着;类似的东西。我不知道是否可行,但你能就我的情况给我一些建议吗?
提前谢谢你。
我已经成功地为循环内的每个基因组创建了一个线程,并且它可以工作。
foreach(Genome g in population)
{
GP_Agent gp_agent = new GP_Agent();
//passing the callback method, when the process is done then invoke the callback
ThreadStart thread = delegate{
gp_agent.next_move(g, callback);
};
thread.Invoke();
}
public void callback(String move){
//apply the result move from the genome
Debug.Log(genome.id + " = " +move);
}
作为此代码的结果。我同时得到了所有基因组的动作
1 = UP
2 = 向下
3 = 左
当我将这些动作应用到游戏对象时。 AI 很困惑,因为这些动作同时应用,这就是我想要的