예제 #1
0
    /// <summary>
    /// 目标是否在射程内 (考虑目标体积, 粗略检查)
    /// </summary>
    /// <param name="caster"></param>
    /// <param name="target"></param>
    /// <param name="range"></param>
    /// <returns></returns>
    public static bool TargetIsInRange_SimpleCheck(SpacecraftEntity caster, SpacecraftEntity target, float range)
    {
        float distanceToTarget = Vector3.Distance(caster.GetRootTransform().position, target.GetRootTransform().position);
        float validRange       = range;

        if (target.GetPresentation().GetCapsuleCollider() != null)
        {
            // 粗略计算, 使用目标胶囊体长度的一半加技能射程作为这次判断的有效距离
            // 假设只有一个胶囊体, 也不该有多个
            CapsuleCollider targetCapsule = target.GetPresentation().GetCapsuleCollider();
            validRange += targetCapsule.height / 2;
        }

        return(distanceToTarget < validRange);
    }