这种方式常用于对战类的游戏,比如FPS中的手雷,坦克对战的炮弹等。距离爆炸中心越紧,伤害越高。在Unity中,通常以这类爆炸物为中心,计算爆炸范围内部的有效伤害物体,然后进行有关处理。
先给核心的函数:
public static Collider[] OverlapSphere(Vector3 position,
float radius,
int layerMask = AllLayers,
QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);
该函数返回一position为中心,radius为半径的,指定layer类型的GameObject的数组
参数说明:
position
:一般是爆炸体的位置radius
:爆炸半径layerMask
:可以被毁伤的layer- 最后一个默认即可,一般不用。
然后再根据距离中心点的范围,进行比例伤害计算即可。
Collider[] colliders = Physics.OverlapSphere (transform.position, m_ExplosionRadius, m_TankMask);
for (int i = 0 ; i < colliders.Length ; ++i)
{
Rigidbody targetRigidBody = colliders[i].GetComponent<Rigidbody> ();
if (!targetRigidBody)
continue;
// 添加爆炸产生的力
targetRigidBody.AddExplosionForce (m_ExplosionForce, transform.position, m_ExplosionRadius);
TankHealth targetHealth = targetRigidBody.GetComponent<TankHealth> ();
if (!targetHealth)
continue;
float damage = CalculateDamage (targetRigidBody.position);
targetHealth.TakeDamage (damage);
}
补充一个爆炸力的函数,模拟爆照产生的影响:
SWITCH TO MANUAL
public void AddExplosionForce(float explosionForce, // 爆炸力的大小
Vector3 explosionPosition, // 爆炸点的范围
float explosionRadius, // 爆炸半径
float upwardsModifier = 0.0f,
ForceMode mode = ForceMode.Force);