如何在Unity3d中为多个行星创建重力

4
我想做的是类似于太阳系的东西,你会被引力吸引到一个行星直到你脱离它的引力,然后一旦你到达另一个行星,你会被它的引力所吸引。
我在网上找到了很多关于如何为单个行星创建引力的条目,但我没有找到适用于多个源的方法。
任何帮助都将非常感激。
我已经查看过的项目主要是针对单个行星引力的。 Unity 3.3,在物体上创建本地引力

http://answers.unity3d.com/questions/13639/how-do-i-make-a-small-planet-with-gravitational-pu.html

http://answers.unity3d.com/questions/701618/how-could-i-simulate-planetary-gravity-that-has-an.html


2
很棒的想法!你能和我们分享一下你在如何为单个星球创建重力方面的发现吗?这可能会帮助我们帮助你! - ʇolɐǝz ǝɥʇ qoq
如果这是合法的,我一定会尝试把那些资源整理成链接列表。 - Benjamin Jameson
1个回答

3

通过在周围物体上添加相对于行星的法向力,可以轻松地完成这项任务。

根据万有引力的物理学原理,您可以计算出引力。然后计算出当前的法向力并添加该力。

void FixedUpdate(){
    // Do the Force calculation (refer universal gravitation for more info)
    // Use numbers to adjust force, distance will be changing over time!
    forceSun = G x (massPlanet x massSun)/d^2;

    // Find the Normal direction
    Vector3 normalDirectionSun = (planet.position - sun.position).normalized;

    // calculate the force on the object from the planet
    Vector3 normalForceSun = normalDirection * forceSun;

    // Calculate for the other systems on your solar system similarly
    // Apply all these forces on current planet's rigidbody

    // Apply the force on the rigid body of the surrounding object/s
    rigidbody.AddForce(normalForceSun);

   // .... add forces of other objects. 
}

使用不同的m1,m2值,您将能够使系统更加真实。例如,使物体向质量较大的行星移动/加速。


@BenjaminJameson 你试过这个吗? - Dinal24
我非常感谢你们的及时回复,我必须说作为一个彻头彻尾的新手,我没有想到会得到这样的帮助。我已经连续工作了几天18个小时,所以没有时间,我会尽快发布我已经找到的所有内容。再次感谢你们,很抱歉我还没有尝试过Dinal24,但我希望最晚明晚能够尝试。 - Benjamin Jameson
有没有可能使重力脚本仅适用于行星本身,而不涉及其他行星体,出于设计原因,我不打算拥有旋转系统,并且我希望能够在游戏中创建和销毁行星,因此我想避免使重力及其效应依赖于周围的其他物体。 - Benjamin Jameson
1
@BenjaminJameson 我认为那样做是不可能的!而且当你谈到设计原因时,你可以轻松地将其附加到系统中的每个对象并将它们保留为预制品。实际上,这将需要一些在Unity中的经验,并使用诸如FindWithTag(“Planet”)之类的方法来获取重力并将其应用于其他游戏对象。此外,如果这个答案对你有用,你可以通过点赞和接受答案来感激我! - Dinal24
2
如果您使用Gravity组件,它可以保持所有活动的Gravities的静态列表(static HashSet<Gravity>),每个实例将使用OnEnable/OnDisable添加/删除自身。这基本上与Dinal24建议的相同,但更安全和灵活,不依赖于对象具有特定标记。 - piojo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接