如何从一组动作中随机选择

时间:2015-12-15 00:00:44

标签: c# unity3d artificial-intelligence unity5

所以我正在制作一个自由漫游并随机移动到随机点的敌人。为此,我计划让它从设置可能的方向中选择它可以像这里一样:enter image description here < / p>

如何从一组可能的行动中随机选择(增加Y,增加X,ETC)

始终感谢反馈;)

4 个答案:

答案 0 :(得分:2)

我愿意:

int actions = Random.Range(0,2);

(最后一个数字没有出现,请注意这里的可能性是给出两个可能的随机结果:“0或1”。 - 如果你想要“0,1或2”放Random.Range(0,3);等等)

有关Random Range

的更多信息

并使用switch statement查看它 - 它会触发按int actions排序的确切操作:)

switch(actions){
case 0:
//do thing1
break;

case 1:
//do thing 2
break;

default:
//do nothing
break;

}

答案 1 :(得分:1)

通用方法是存储函数数组,并使用随机值索引数组以选择要执行的函数。

这样的事情:

Random rand = new Random();
Action[] actions = {
    () => { x += 1; y += 1; },
    () => { x += 1; }
    //...
};
actions[rand.Next(actions.Length)]();
然而,这可能相当繁琐,但有一些优点。例如,可能的操作集可以动态更改。

在这种情况下,如果你只关心从静态集中选择一个随机向量,你真的只需要选择一个随机deltaY和deltaX,其中dX和dY是{-1,0,1}

Random rand = new Random();

int dY = rand.Next(-1, 2);
int dX = rand.Next(-1, 2);

x += dx;
y += dy;

答案 2 :(得分:1)

Random rand = new Random();

int direction;

Vector3[] Directions = { // front, back, left, right and diagonal positions

    new Vector3( 1 , 0 , 0 ),

    new Vector3( -1 , 0 , 0 ),

    new Vector3( 0 , 1 , 0 ),

    new Vector3( 0 , -1 , 0 ),

    new Vector3( 1 , 1 , 0 ),

    new Vector3( -1 , -1 , 0 ),

    new Vector3( 1 , -1 , 0 ),

    new Vector3( -1 , 1 , 0 )

}

public Vector3 ChooseRandome(){

   direction = rand.Next( Directions.length ); // Random number with directions.length as max possible number

   return Directions[randomIndex]; // plug random number in and return index.

}

答案 3 :(得分:0)

您要做的是创建一个随机数生成器,生成1到8的随机数,每个数字代表一个方向。它是这样的:

name

如果我将一种语言与c#混淆,我感到非常抱歉,因为我暂时没有团结一致:)