Вернуть true, если объект ближе, чем значение.(Speherasting) в единстве - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть скрипт, например, прикрепленный к огню, и я хочу нанести урон игроку, если он приблизится к значению этого огня.

public float fireDamageRange = 5;
public float fireDamage = 10;

private Vector3 origin;
private Vector3 direction;

void Update(){
    origin = transform.position;
    direction = transform.forward;

    RaycastHit fireHit;
    if (Physics.SphereCast(origin, fireDamageRange, direction, out fireHit) && fireHit.transform.gameObject.layer == LayerMask.NameToLayer("Player") && !makingDamage)
    {
        makingDamage = true;
        MakeDamage(fireHit);
        StartCoroutine(WaitToMakeDamage());
    }
}
IEnumerator WaitToMakeDamage()
{
    yield return new WaitForSecondsRealtime(0.2f);
    makingDamage = false;
}

Скрипт прикреплен кПожар.Это возвращает true, только если Player находится на самом деле fireDamageRange от начала координат, а не если он приближается.Что я делаю не так?

1 Ответ

0 голосов
/ 08 февраля 2019

Просто рассчитайте расстояние между игроком и огнем и проверьте, находится ли оно в диапазоне

Расстояние можно легко рассчитать с помощью Vector3.Distance ()

public float fireDamageRange = 5;
public float fireDamage = 10;
public GameObject player; // the player

private Vector3 origin;
private Vector3 direction;

void Update(){
    float distance = Vector3.Distance(player.transform.position, transform.position);
    if (distance <= fireDamageRange)
    {
        // handle damage to the player
    }
}
...