如果您获得了球运动的方向(例如度数),您可以添加一个特定的角度,并使用该角度来确定需要施加的力。
我假设球/球员没有脊状身体,如果有,那么你可以直接抓住方向。另外,由于您使用圆圈来描述生成的形状,我将假设您在 2D 中工作。
Vector3 lastPosition;
void Update()
{
//launch the ball before updating the last position
lastPosition = transform.position;
}
Vector3 launchDirection()
{
Vector3 ballDirection = transform.position - lastPosition;
float angle = Mathf.Atan2(ballDirection.x, ballDirection.y) * Mathf.Rad2Deg;
//the direction should be perpendicular to direction of movement
float angle += 90;
return new Vector2(Mathf.Cos(angle), Mathf.Sin(angle));
}
我还没有统一运行代码,但它看起来应该可以工作。基本上要获取存储最后一个位置的方向,并将其与当前方向进行比较以计算出增量(如果您使用脊状体四处移动,然后从中获取方向),然后使用 atan2 来获取角度。为了使发射方向垂直于球,我添加了 90 度(您可能需要 -90,具体取决于您需要从哪一侧发射圆圈)。现在我们有了您希望球射出的角度,将其与 Sin 和 Cos 一起使用以获得角度的 XY。
你有它可以让你获得垂直于运动的方向,你使用 3 维它基本上是相同的数学,只是输入了一些数字来填充返回值。
哦,如果您的对象始终面向运动方向transform.right 也可以:P