[Unity3D] 用 C# 代码控制重力方向

在 unity 引擎中, 修改重力方向的方法一般有三种:

1: 在 项目设置 中修改全局重力方向

  

左上角菜单栏 Edit --> Project Settings --> Physucs

 修改 Gravity 中的 X Y Z 的值即可做到控制全局的重力方向, 默认情况下的 Y 轴的值为 -9.81

 

 

2: 通过代码的方式修改全局的重力方向

public class GravityController : MonoBehaviour {

    public bool flag = false; 
    private Vector3 gravity;
 
    void Start() {
        gravity = Physics.gravity;
    }

    void FixedUpdate() {
        Physics.gravity = gravity;
        if (flag) {   // 修改重力方向
            gravity.x = 0;
            gravity.y = 9.81f;
            gravity.z = 0;
        }else{
            gravity.x = 0;
            gravity.y = -9.81f;
            gravity.z = 0;
        }
    }
}

 

3: 修改单个物体的重力方向

这个严格来说的话并不科学, 过随意修改重力方向好像本来就不科学, 但是也就是说我们无法通过直接修改跟重力相关的函数的变量来达到控制重力方向的目的, 但是我们可以通过修改物体的受力方向来模拟物体受到了不同方向的重力的影响,,虽然说起来有点拗口, 不过做起来也是很简单的

首先, 如上图, 我们去把 Gravity 中的 X Y Z 三个方向的重力全部设置为 0 , 然后在你想要修改重力受力方向的物体上加如下程序即可

public class GravityController : MonoBehaviour {

    public bool flag = false;

    void FixedUpdate() {
        if (flag) {
            Rigidbody rigidbody = gameObject.GetComponent<Rigidbody>();
            rigidbody.AddForce(new Vector3(0, 9.81f, 0));
        } else {
            Rigidbody rigidbody = gameObject.GetComponent<Rigidbody>();
            rigidbody.AddForce(new Vector3(0, -9.81f, 0));
        }
    }
}

 

posted @ 2020-07-30 10:51  苍之弦  阅读(5147)  评论(1编辑  收藏  举报