是否可以在同一个场景中设置两个物体的不同重力?

问题描述 投票:0回答:1

如果Physics.gravity对场景中的所有刚体都有效,它是否有其他方法来设置Ground1和Ground2的不同重力?

unity3d
1个回答
0
投票

没有其他方法可以设置Physics.gravity对不同物体的不同影响。 如果你只是想要非常简单的物理系统,你可以在Unity中推出自己有限的物理系统(如果你疯了,也可以推出一个完整的自定义物理系统)。另外,你也可以为你希望表现不同的物体添加力。

对于你希望以不同方式受到重力影响的物体,你需要在重力方向上施加一个额外的力来增加重力的影响,或者逆着重力的方向来减少重力的影响。 您还需要使用 ForceMode.Acceleration 来确保施力时不考虑质量。

请看。https:/docs.unity3d.comScriptReferenceRigidbody.AddForce.html。

而且。https:/docs.unity3d.comScriptReferenceForceMode.Acceleration.html。


0
投票

是的,我想你可以改变这两个物体的重力比例,比如说2,然后这两个物体的physics.gravity就会变成2*原始physics.gravity。


0
投票

是的!我想你可以改变这两个对象的重力比例,比如说2,然后这两个对象的physics.gravity将是2*原始physics.gravity。

重力默认由场景中的每个Rigidbody处理,但你可以通过以下操作禁用默认的重力。Rigidbody.useGravity = false;

这意味着你可以停用默认的重力,然后以你想要的方式对物体施加一个力(模拟重力)。

RigidBody.AddForce(Vector.down, ForceMode.Acceleration);

记住,你可以简单地乘以 Physics.gravity 由你想要的数字,甚至改变方向做类似。

[RequireComponent(typeof(Rigidbody))]
public class GravityDirectionChanger : MonoBehaviour
{    
    public enum GravityDirection
    {
        Up, Down, Forward, Backward, None
    }
    public static Dictionary<GravityDirection, Vector3> gravityDirectionDict = new Dictionary<GravityDirection, Vector3>
    {
        { GravityDirection.Up, Vector3.up },
        { GravityDirection.Down, Vector3.down },
        { GravityDirection.Forward, Vector3.forward },
        { GravityDirection.Backward, Vector3.forward * -1 },
        { GravityDirection.None, Vector3.zero }
    };

    [SerializeField] private GravityDirection gravityDirection = GravityDirection.None;

    private void FixedUpdate()
    {
        this.GetComponent<Rigidbody>().AddForce(gravityDirectionDict[gravityDirection], ForceMode.Acceleration);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.