教AI接球?

我有一个游戏,里面有效地包含了两个球拍,我已经设置好让玩家或AI可以控制任一球拍。然而,我正在尝试弄清楚如何让我的AI能够平滑地追赶并接住球,而不是简单地通过基本的“球的方向”=AI移动的相反方向来强行实现。

为此,我正在尝试编写一些代码,让AI能够预测球在其场地内或即将进入其场地时会落在哪里。但进展得并不顺利。这是我想实现的效果的示意图:

球的抛物线弧和预测点

所以,我一直在研究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);

然而,我觉得我可能过度简化了或者遗漏了某些东西。我的计算结果偏差很大,而且射线并没有出现在它应该出现的地方,如果它确实出现了的话。我哪里做错了?


回答:

基本上,你需要在每一步对球施加重力,使其看起来自然,类似这样:

球在你的位置准备被抛出

ball.x = 20;ball.y = 10;xVelocity = 0; yVelocity = 0;gravity = 0.1;

你抛出球
当你抛出球时,你将xVelocity设置为一个常数,比如1,将yVelocity设置为5。所以:

xVelocity = 1;yVelocity = 5;ball.x+=xVelocity;ball.y+=yVelocity; //开始球的移动

现在在游戏循环中,你这样计算球的位置:

tick{    if(ball.y > 10)  //如果球在地面上方(假设10是地面)     {        ball.x+=xVelocity;        ball.y+=yVelocity;        yVelocity-=gravity;    }}

这样,球应该会沿着完美的弧线飞行。现在,要计算着陆区,你可以用虚拟数字再次做同样的事情

while(dummyBall.y > 10){    dummyBall.x+=xVelocity;    dummyBall.y+=yVelocity;    yVelocity-=gravity;}landingPosX = dummyBall.x;

你可能需要调整这些数字,但如果我记得没错的话,应该会像这样工作。希望这有意义

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注