Unity实现爆炸的伤害值计算

这种方式常用于对战类的游戏,比如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);
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值