首页 > 解决方案 > 统一的 2D 人造重力 (C#)

问题描述

我正在做一个使用 2D 重力的项目。设置是在你发射弹丸的空间中,如果它们离行星足够近,行星的重力会吸引弹丸。射弹在发射时使用对撞机和施加到 Rigidbody2d 的力。

我找到的这张图片很好地解释了它:

在此处输入图像描述

我有一些有效的代码,但并不完美。这有点奇怪,似乎某些部分比其他部分更容易吸引弹丸。有时,当我将弹丸射过物体时,它并没有被物体吸引,而是突然飞驰而过。这是代码:

public class Gravity : MonoBehaviour{

public GameObject planet;
public float maxGravity;
public float maxGravityDist;
public Vector3 force;

public Rigidbody2D rb;

void Update(){
    
    float dist = Vector2.Distance(planet.transform.position, transform.position);
    Vector3 v = planet.transform.position - transform.position;

    force = v.normalized * (1.0f - dist / maxGravityDist) * maxGravity;
    rb.AddForce(v.normalized * (1.0f - dist / maxGravityDist) * maxGravity);
}
}

标签: c#unity3dgravity

解决方案


推荐阅读