我不能让我的玩家团结一致,使用“弹性”物理材料来跳跃相同的高度

问题描述 投票:2回答:2

我有一个带有刚体的GameObject和一个应用了“弹性”物理材质的BoxCollider。我希望对象一直反弹相同的高度,类似于Doodle Jump类型的游戏。我将物理材料的弹性设置为1,根据我看过的几个教程,应该保持球弹跳到相同的高度。我的场景非常基本,并没有太多发生,但我似乎无法让它发挥作用。有什么建议让我的物体反复弹跳相同的高度?

c# android unity3d
2个回答
2
投票

你的球员的bounciness与他击中的表面的弹性结合在一起。在你的球员物理材料中将Bounce Combine设置为Maximum。这样它应该根据文档工作,因为bounciness1意味着没有任何能量损失的弹跳,你现在正在采取最大的1和其他表面最可能小于1的东西。

但是,无论出于什么原因,你的玩家现在每次弹跳都会获得一点高度。我猜这是引擎中的一些舍入错误。你可以尝试摆弄bounciness0.97或类似的东西,它可能会工作。

如果你找不到最佳位置或在所有设备上表现不一样,你可以自己实现弹跳,只要玩家与表面碰撞就反转速度。


0
投票

我知道这个答案是迟到的,但也许我的解决方案会帮助别人。除了解决整个问题的上述解决方案之外,您还可以将其放入脚本中

 void OnCollisionEnter(Collision collision)
    {

        if (collision.gameObject.tag.Equals("ground"))
            rigidbody.velocity = new Vector2(rigidbody.velocity.x, 0); // set y velocity to zero
            rigidbody.AddForce(new Vector2(0, 400)); // some constant force here

        }

    }

如果你只使用上面的答案你会遇到一个问题,当你有两个不同Y位置的球,因为弹跳高度不一样,我的解决办法是将球的速度重置为0并再次将其重新强制为400 (作为我的例子)

© www.soinside.com 2019 - 2024. All rights reserved.