Почему гравитационный скрипт тянет объекты так быстро, а затем медленно, а не постоянно - PullRequest
0 голосов
/ 29 марта 2020

Как мне получить постоянную скорость для этого сценария гравитации. Объекты запускаются так быстро, а затем замедляются как вблизи цели. Мне просто нужна постоянная скорость, но я думал, что достигну ее.

private Rigidbody ownBody;
private float maxVelocityOfInfluence = 10.2f;
private float rangeOfInfluence = 20000.0f;
public bool allowRangeGizmo = false;

private void OnEnable()
{
    ownBody = GetComponent<Rigidbody>();
}

private void FixedUpdate()
{
    Collider[] cols = Physics.OverlapSphere(transform.position, rangeOfInfluence);
    List<Rigidbody> rbs = new List<Rigidbody>();

    foreach (Collider c in cols)
    {
        Rigidbody otherBody = c.attachedRigidbody;
        if (otherBody != null && otherBody != ownBody && !rbs.Contains(otherBody) && (otherBody.transform.gameObject.tag == "Enemy1" || otherBody.transform.gameObject.tag == "Enemy2" || otherBody.transform.gameObject.tag == "Enemy3" || otherBody.transform.gameObject.tag == "Enemy4"))
        {
            rbs.Add(otherBody);

            Vector3 offset = transform.position - c.transform.position;
            otherBody.AddForce(offset * ownBody.mass);

            //  Control speed of Enemy
            if (otherBody.velocity.magnitude > maxVelocityOfInfluence)
            {
                otherBody.velocity = otherBody.velocity.normalized * maxVelocityOfInfluence;
            }
        }
    }
}

Может ли быть этот код? Кажется, смещение меняет скорость?

Vector3 offset = transform.position - c.transform.position;
otherBody.AddForce(offset * ownBody.mass);

1 Ответ

1 голос
/ 29 марта 2020

Да, значение смещения тем больше, чем дальше вы, так что добавленная сила будет больше. Вы можете нормализовать вектор смещения, чтобы вместо него был вектор направления (offset.normalized * ownBody.mass).

...