Return 如果对象比某个值更近则为真。 (Speherasting) 在 Unity 中

Return true if object is closer than a value. (Speherasting) in Unity

例如,我有一个脚本附加到火上,如果玩家离火的距离小于某个值,我想对他造成伤害。

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;
}

脚本附火。 这只有 returns 如果玩家实际上是 fireDamageRange 远离原点,而不是如果他靠近。我做错了什么?

只需计算玩家与火之间的距离并检查它是否在范围内

可以使用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
    }
}