教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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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