群攻伤害指在一定范围内同时对多游戏对象按距离衰减计算伤害。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));
}
}
}
原文:点击打开链接