基于2D矢量的Ai运动

德文齿轮

我正在做基于回合的移动,如果射线被击中,我希望敌人Ai会朝玩家移动。我的光线下降了,但我的动作有麻烦。我首先要做的是确定Ai相对于玩家作为原点的象限,然后我要根据玩家与敌人之间的界限确定x和y分量是什么。

    GameObject player_tran = GameObject.Find ("player");
    if (transform.position.x > player_tran.transform.position.x && transform.position.y < player_tran.transform.position.y) {
        //4th quad if (x is bigger than y) move (left) else move (up)


    } 

    if (transform.position.x < player_tran.transform.position.x && transform.position.y < player_tran.transform.position.y) {
        //3rd quad if (x is bigger than y) move (right) else move (up) 

    } 

    if (transform.position.x < player_tran.transform.position.x && transform.position.y > player_tran.transform.position.y) {
        //2nd quad if (x is bigger than y) move (right) else move (down) 

    } 
    if (transform.position.x > player_tran.transform.position.x && transform.position.y > player_tran.transform.position.y) {
        //1st quad if (x is bigger than y) move (left) else move (down) 

    } 
    else {
    //if they are both equal random moement
    }

`

例如,如果在第一个四边形中且x分量较大,我希望敌人向左移动,否则将向下移动。

编辑:我在这里试图做的是创建一个直角三角形,敌人和玩家之间的距离是斜边。然后,我将x边与y边进行比较,看看哪个更大以决定运动。

狂热

由于在这种情况下这两个维度是可分离的,因此您可以执行此操作。

GameObject player_tran = GameObject.Find ("player");
double dx = 0;
double dy = 0;
if (transform.position.x > player_tran.transform.position.x)
    dx = -1;
} else {
    dx = 1;
}

if (transform.position.y > player_tran.transform.position.y) {
    dy = -1;
} else {
    dy = 1;
}
transform.position += new Vector(dx, dy, 0);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章