Unity 2D 与另一个物体碰撞时弹回移动物体

Unity 2D Bounce Back moving object when colliding with another object

我有一个对象,在收到相应的输入后,它会这样移动:

mov = new Vector3((Input.GetAxis("Horizontal") * vel), 0, 0);
transform.position += mov;

但是,我希望它在与物体碰撞后反弹回来。

我已经完成了程序 (OnCollisionEnter2D(Collsion2D col){bla bla...}),但我需要帮助了解碰撞时发生的事情(弹回物体)....

我试过给碰撞的物体一个弹跳material,但它只是减慢了一点,我的猜测是因为由加速度。

你好。

如果您使用 transform.position 移动对象,您所做的基本上是 "teleport",因此它会忽略弹跳 material。如果你想让它反弹,你必须编写物理代码来检测碰撞并改变运动,或者你可以做 addforce 来移动物体,它会检测碰撞并自动做出反应。

您当前正在传送对象。相反,你应该使用 Rigidbody.addForce 这将在指定的方向上添加一个力,因此如果你做相反的方向将 "bounce" 对象。另一种选择是创建一个物理学 material 然后不用理会代码。

您没有使用 materials,对吗?

看看这个post的内容是否对你有帮助,OP正在使用一个使用Raycast的公式,答案指导他使用Raycast with Layers Maks:

这个也是固定角度的(比如Pong),但是它使用material(值:摩擦力: 0, 弹性: 1): https://gamedev.stackexchange.com/questions/70294/get-gameobject-to-bounce-of-colliders

但是如果没有任何意义并且您快要发疯并且可能想从零开始,可以观看这个关于 2D 中的弹跳和滑动的官方视频教程: https://unity3d.com/learn/tutorials/modules/beginner/2d/sliding-bouncing-2d