首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于二维矢量的人工智能运动

基于二维矢量的人工智能运动
EN

Stack Overflow用户
提问于 2015-12-17 06:22:05
回答 2查看 257关注 0票数 2

我做转身的移动,我想敌人艾将移动到球员,如果光线投射被击中。我的光线下降了,但我在运动上遇到了困难。我首先要做的是确定Ai相对于玩家的起源是什么象限,然后我想从玩家和敌人之间的线上确定,如果x和y分量是什么。

代码语言:javascript
运行
复制
    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边,看看哪个更大来决定运动。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-17 07:25:12

在这种情况下,由于这两个维度是可分离的,所以您可以这样做。

代码语言:javascript
运行
复制
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);
票数 0
EN

Stack Overflow用户

发布于 2015-12-17 07:20:17

所以你想让ai在(轴对齐)方向使轴向玩家移动,因为它有更大的绝对位移量(连接垂直)?

代码语言:javascript
运行
复制
//shorter variables for my own sanity
var dx = player.x - ai.x;
var dy = player.y - ai.y;
if(Math.Abs(dx) > Math.Abs(dy){
    //assume that move is previously declared/initialised
    move.x = amount_to_move * Math.Sign(dx);
    move.y = 0;
}else{
    move.y = amount_to_move * Math.Sign(dy)
    move.x = 0;
}
//implementation of amount to move, and not going too far when already very close, left to the reader.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34327889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档