首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >教人工智能去接球?

教人工智能去接球?
EN

Stack Overflow用户
提问于 2014-11-11 13:13:23
回答 2查看 912关注 0票数 1

我有一个游戏,有效地有两个桨在其中,我已经让它的工作设置,以便要么球员或一个人工智能可以控制任何一个桨。然而,我正试图弄清楚如何让我的人工智能真正顺利地跑完球,并抓住它,而不是简单的野蛮-强迫它一个基本的“方向球”=相反方向的人工智能移动。

为了做到这一点,我试图写一些代码,让人工智能预测它将降落在哪里,什么时候球在它的球场或将要出现。进展得不太好。这是我想要实现的目标的示意图:

所以,我一直在研究Unity3D,并想出了如下结论:

代码语言:javascript
复制
Vector3 BallMinder = BallPosition.gameObject.rigidbody.velocity;
float BallX = BallMinder.x;
float BallY = BallMinder.y * Time.deltaTime;
float GroundHitPointX = (BallY + BallX);

Vector3 BallImpactPoint = new Vector3 (GroundHitPointX, 0, 0);
Debug.Log (BallImpactPoint);
Debug.DrawRay (BallImpactPoint, Vector3.up, Color.green);

然而,我觉得我把它简单化了,或者忘记了一些东西。我的计算离得太远了,光线没有出现在它应该出现的地方,如果它真的出现了的话。我犯了什么错?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-11 13:44:29

你必须在每一步对球施加重力,使之看起来很自然,就像这样:

球在你的位置上准备好了

代码语言:javascript
复制
ball.x = 20;
ball.y = 10;
xVelocity = 0; 
yVelocity = 0;
gravity = 0.1;

你把球扔出去

当您将球抛出时,您将xVelocity设置为常量,让yVelocity设为5。

代码语言:javascript
复制
xVelocity = 1;
yVelocity = 5;
ball.x+=xVelocity;
ball.y+=yVelocity; //to start the ball moving

在游戏中,你可以像这样计算球的位置:

代码语言:javascript
复制
tick
{
    if(ball.y > 10)  //if the ball is off the ground (i asume 10 is ground) 
    {
        ball.x+=xVelocity;
        ball.y+=yVelocity;
        yVelocity-=gravity;
    }
}

有了这个,球应该以一个完美的弧线来计算着陆区域,你可以用虚拟数字再次做同样的事情。

代码语言:javascript
复制
while(dummyBall.y > 10)
{
    dummyBall.x+=xVelocity;
    dummyBall.y+=yVelocity;
    yVelocity-=gravity;
}
landingPosX = dummyBall.x;

您可能需要调整数字,但如果我正确地记住了所有内容,它应该会像这样工作。希望这有意义

票数 0
EN

Stack Overflow用户

发布于 2014-11-11 19:39:41

你所需要的就是Kinematics方程。

这些方程很好地描述了弹丸的运动。因此,你可以用它们来预测球会降落在哪里和有什么成分。

这是一个帮助你理解的图表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26865771

复制
相关文章

相似问题

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