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

}

  抽象生命體類

public interface Life  {

    void Death();
    void HPManager(float life);//生命數值計算
    bool IsAP();//
}

然后就是炸彈爆炸的函數了,如下:

 

public void Bomb(ObjectWeapon weapon,Vector3 point,int layer)//爆炸函數
    {
        Collider[] others = Physics.OverlapSphere(point, weapon.Range,lay);//獲取所有碰撞體
        Rigidbody other;//剛體,通過添加力實現爆炸的視覺效果
        Life life;//生命體
        for (int i = 0; i < others.Length; i++) { 
            //others[i].

            if ((other=others[i].GetComponent<Rigidbody>())) {//檢測剛體
                other.AddExplosionForce(weapon.Power,point,weapon.Range,10);//這個函數會自動根據距離給剛體衰減的力
            }
            if ((life = others[i].GetComponent<Life>()) != null && (!life.IsAP() || weapon.IsAP))//life.IsAP()意指生命體是否具有‘裝甲’,weapon.IsAP判斷武器是否‘穿甲’
{ //如果裝甲,則需要能夠穿甲的武器才能計算傷害, 
          //通過計算武器的殺傷范圍與
物體和爆炸點的距離來計算傷害,實現距離衰減
 life.HPManager(weapon.Damage * (1-Vector3.Distance(others[i].transform.position, point) / weapon.Range));//根據距離衰減判斷傷害值  
//通過物體到爆炸點的距離與武器爆炸范圍的比值,實現衰減效果
}
}
}

 

代碼很簡單,主要是利用了碰撞檢測,剛體的力,還有距離判斷。

本文地址http://www.cnblogs.com/jqg-aliang/p/4605944.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM