我有一个游戏,有效地有两个桨在其中,我已经让它的工作设置,以便要么球员或一个人工智能可以控制任何一个桨。然而,我正试图弄清楚如何让我的人工智能真正顺利地跑完球,并抓住它,而不是简单的野蛮-强迫它一个基本的“方向球”=相反方向的人工智能移动。
为了做到这一点,我试图写一些代码,让人工智能预测它将降落在哪里,什么时候球在它的球场或将要出现。进展得不太好。这是我想要实现的目标的示意图:

所以,我一直在研究Unity3D,并想出了如下结论:
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);然而,我觉得我把它简单化了,或者忘记了一些东西。我的计算离得太远了,光线没有出现在它应该出现的地方,如果它真的出现了的话。我犯了什么错?
发布于 2014-11-11 13:44:29
你必须在每一步对球施加重力,使之看起来很自然,就像这样:
球在你的位置上准备好了
ball.x = 20;
ball.y = 10;
xVelocity = 0;
yVelocity = 0;
gravity = 0.1;你把球扔出去
当您将球抛出时,您将xVelocity设置为常量,让yVelocity设为5。
xVelocity = 1;
yVelocity = 5;
ball.x+=xVelocity;
ball.y+=yVelocity; //to start the ball moving在游戏中,你可以像这样计算球的位置:
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;
}
}有了这个,球应该以一个完美的弧线来计算着陆区域,你可以用虚拟数字再次做同样的事情。
while(dummyBall.y > 10)
{
dummyBall.x+=xVelocity;
dummyBall.y+=yVelocity;
yVelocity-=gravity;
}
landingPosX = dummyBall.x;您可能需要调整数字,但如果我正确地记住了所有内容,它应该会像这样工作。希望这有意义
发布于 2014-11-11 19:39:41
你所需要的就是Kinematics方程。

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

https://stackoverflow.com/questions/26865771
复制相似问题