Unity炸弹爆炸伤害(群攻伤害)

  群攻伤害指在一定范围内同时对多游戏对象按距离衰减计算伤害。Unity对此有相关的接口,可以很方便的实现这个功能。

  Collider[] Physics.OverlapSphere ( Vector3 position, float radius,int layerMask ) ;

   Vector3 position:爆炸目标点

   float radius:爆炸半径

   int layerMask:影响层(指的是对某一层进行爆炸计算)

 

  rigidbody.AddExplosionForce(power, explosionPos, radius, 3.0F);//对刚体施加爆炸力,物理的视觉效果,具体我就不介绍了

 

  这个函数的返回值是Collider[],意指获取position为中心,radius为半径,layerMask层中的碰撞体集合。获取这个数组之后,就可以进行伤害计算了



public interface Life
{
    void Death();
    void HPManager(float life);
    bool IsAP();

}

public class ObjectWeapon 
{
    private float range;//爆炸范围

    public float Range
    {
        get { return range; }
        set { range = value; }
    }
    private float power;//力量

    public float Power
    {
        get { return power; }
        set { power = value; }
    }
    private float damage;//伤害值

    public float Damage
    {
        get { return damage; }
        set { damage = value; }
    }
    private bool isAP;//是否穿甲

    public bool IsAP
    {
        get { return isAP; }
        set { isAP = value; }
    }
}

爆炸伤害类

using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {

    public void Bomb(ObjectWeapon weap,Vector3 point,int layer)
    {
        Collider[] others = Physics.OverlapSphere(point, weap.Range, layer);

        Rigidbody other;
        //这里new一个继承了这个接口的敌人,不然会报错
        Life life;
        for (int i = 0; i < others.Length ; i++)
        {
            if((other =others [i].GetComponent <Rigidbody >()))
            {
                other.AddExplosionForce(weap.Power, point, weap.Range, 10);
            }

            life.HPManager(weap.Damage * 
                (1 - Vector3.Distance(others[i].transform.position, point) / weap.Range));
        }
    }

}



原文:点击打开链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值