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