如何让球弹起来

How to make ball bounce

我有一个游戏,你用平台弹球,你必须摧毁所有的盒子,但我的弹球代码不能像我想要的那样工作。

它的工作原理就像一个真正的球弹跳,但我希望球像乒乓球中的球一样弹跳,球不会掉下来直到它接触到墙壁或平台但我的球在现实生活中曲线。

我对曲线的看法就像当你在空中踢球并进入曲线但我希望它无限地沿平线到达墙壁并沿随机方向弹跳。

有人有任何代码想法吗?

Pong/breakout 式物理比您想象的要简单。 这些球没有施加重力,因此您需要做的就是对球施加恒定速度。 当它与一个物体碰撞时,你会翻转它碰撞的轴上的速度。

例如: 球以 60 像素/秒的速度向上移动,以 60fps 的速度以 120 像素/秒的速度水平移动。 每帧垂直添加 (60/60)=1 个像素,水平添加 (120/60)=2 个像素。 它撞到墙上,因此您将水平速度翻转为 -120 像素/秒。 现在它还在上升,但水平方向相反。 如果它碰到天花板,同样的事情,但翻转垂直速度分量。

如果您希望它随机移动:

  • 计算球速度的大小sqrt(vx^2+vy^2)
  • 找出墙面对的角度
  • 在该角度的 180 度范围内随机选择一个角度
  • 使用三角函数计算该角度的 x/y 个分量,然后乘以幅度。

不要 subtract/add 每帧速度的恒定值,因为那样你会应用重力,这不是你要找的东西。

制作一个如下图所示的物理 material 并将其放置在任何可以弹跳的表面上。你的球有一个 Rigidbody 和阻力 0.

就足够了


同时取消选中重力以获得以下结果:


基本原力脚本:

给小球添加Rigidbody后,初始力可以使用如下脚本。显然你需要更高级的算法来进一步开发。

public Vector3 force = new Vector3(80, 40);
void Start() => GetComponent<Rigidbody>().AddForce(force);