【问题标题】:Unity 2D Bounce Back moving object when colliding with another object与另一个物体碰撞时,Unity 2D Bounce Back移动物体
【发布时间】:2015-12-07 18:26:49
【问题描述】:

我有一个对象,在收到其各自的输入后,它会以这种方式移动:

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

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

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

我试过给碰撞的物体一个弹跳材料,但它只是减慢了一点,我猜这是因为加速度给出了恒定的力。

您好。

【问题讨论】:

    标签: unity3d collision


    【解决方案1】:

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

    【讨论】:

    • 是的,实际上我刚刚了解到在 2 个对象之间合并平移和物理并不是一个好主意。
    • 考虑同时使用带有冲动的 addforce 来模拟碰撞时的有趣弹跳
    【解决方案2】:

    你在当前时间传送物体。相反,您应该使用 Rigidbody.addForce 这将在指定方向添加一个力,因此如果您执行相反的方向将“反弹”对象。另一种选择是创建一种物理材料,然后不用理会代码。

    【讨论】:

    • 好吧,我没有 addForce(虽然我试过了),因为我已经在使用翻译,我刚刚了解到在相同的上下文中合并两者并不好/我给了碰撞对象一个 sharedMaterial有弹性,按我想要的方式工作。
    【解决方案3】:

    你没有使用材料,对吧?

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

    2D bouncing formula doesn't work properly

    这个也有固定角度(如Pong),但它使用材质(值:friction: 0, bounciness : 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

    【讨论】:

    • 谢谢,我尝试为对象的 boxCollider2d 提供具有弹性的 sharedMaterial 并且成功了!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 2017-05-09
    • 1970-01-01
    相关资源
    最近更新 更多