首页 > 解决方案 > 是否可以在同一场景中为 2 个对象设置不同的重力?

问题描述

如果 Physics.gravity 适用于场景中的所有刚体是否有另一种方法来设置 Ground1 和 Ground2 的不同重力?

标签: unity3d

解决方案


是的!

默认情况下,重力由场景中的每个刚体处理,但您可以通过执行禁用默认重力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);
    }
}

推荐阅读