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

时间: 2024-08-08 13:41:45

Unity炸弹爆炸伤害(群攻伤害)的相关文章

Box2D物理引擎模拟炸弹爆炸效果

今天咱们来模拟炸弹效果.于是问题一来了:"为什么要模仿这么暴力的效果呢?莫非几日不见,Yorhom人品煞变?" 其实玩过愤怒的小鸟的同学都应该对这种效果似曾相识,因为据非官方报道,第二厉害的小鸟--黑色鸟的特技就是自爆.问题二出现了:"那第一厉害的小鸟是哪一种呢?"据Yorhom我本人测试,那只红色大鸟应该是最厉害的,不过貌似没有特技?愤怒的小鸟这种肤浅的游戏,Y某我最擅长了,以后有时间会专门写写这个游戏的攻略.这两种鸟的靓照如下: 敷衍了问问题二的同学,问题三就来

unity学习笔记一 受到伤害时的颜色变化

最近在跟着视频学做,很简单的demo 就是这个了,看过的人都知道,官方的.刚刚四级的我只能找点国内重制的看了 现在想做的效果就是受到伤害时会变红,让后慢慢平滑过渡到白色 在update方法中如下 void Update() { //鼠标左击模拟受到伤害 if( Input.GetMouseButtonDown(0)) { TakeDamage(30f); } //颜色变白 bodyRenderer.material.color =Color.Lerp(bodyRenderer.material.

HDU 1072 Nightmare( 身上带有定时炸弹的他能否在炸弹爆炸之前离开—— BFS+DP思想)

Nightmare Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description Ignatius had a nightmare last night. He found himself in a labyrinth with a time bomb on him. The labyrinth has an exit, Ignatius should get out of the

java小项目之:泡泡堂炸弹人,来互相伤害呀!

Java小项目之:泡泡堂!双人对弈今天给大家分享的java小项目,是披着泡泡堂外衣的炸弹人游戏.炸弹人这种休闲游戏抓住了玩家对互动娱乐的需求,它操作简单,极易上手,趣味十足,能给玩家在短时间内就可获得游戏所带来的互动趣味和成就感.需要素材的可以私信我,这个小游戏是很适合java初学者练手的.功能模块简介: 游戏开始画面 人物移动的控制实现 炸弹的产生及炸弹爆炸的实现 结果的判断实现 计时的实现 两人一起互玩的实现游戏界面展示: 代码展示: 操作介绍:1.先进入游戏画面,用户可以自己选择角色,pl

unity collider rigidbody zz

http://blog.sina.com.cn/s/blog_5b6cb95001017vfr.html 其中最基本的关系: Collider是最基本的触发物理的条件,例如碰撞检测.基本上,没有Collider物理系统基本没有意义(除了重力). Rigidbody是物体的基本物理属性设置,当检测碰撞完之后,就要计算物理效果,而Rigidbody就是提供计算基本参数的玩意. PhysicMaterial则是附加的基本物理参数,是一个物理材质,UNITY3D有自带默认的物理材质的系数(在Edit/P

2014北大研究生推免机试(校内)-垃圾炸弹(基础枚举)

放在这里是因为这个题貌似没有公开评测了....我是在coursera算法公开课内评测成功的,觉得还是有一定纪念意义的,虽然懂了之后只是水题一道,但是这种看似复杂,其实很水的题有时候真是会很影响心情= = Openjudge 原题网址:http://bailian.openjudge.cn/tm201401/B/ 原题: Description 2014 年巴西世界杯(2014 FIFA World Cup)开踢啦!为了方便球迷观看比赛,里约街道上很多路口都放置了的直播大屏幕,但是人群散去后总会在

炸弹时间复位

题目大意: 该题为走迷宫,其条件有如下6个: 1, 迷宫用二维数组来表示: 2, 人走动时不能越界,不能在墙上走: 3, 当走到出口时,若剩余时间恰好为0,则失败: 4, 找到炸弹复位装置,若剩余时间恰好为0,则不能使用: 5, 炸弹复位装置可以使用若干次: 6, 只要走到复位装置所在位置,时间自动复置为6: 其中,数组中,0表示墙,1表示通道,2表示初始位置,3表示出口,4表示炸弹复位装置: 求走出迷宫所需要的最少步数,若不能在炸弹爆炸前走出来,输出-1. 大概思路: 迷宫问题是经典的BFS问

垃圾炸弹(二维前缀和)

题目描述 2014年足球世界杯(2014 FIFA World Cup)开踢啦!为了方便球迷观看比赛,街道上很多路口都放置了的直播大屏幕,但是人群散去后总会在这些路口留下一堆垃圾.为此政府决定动用一种最新发明--"垃圾炸弹".这种"炸弹"利用最先进的量子物理技术,爆炸后产生的冲击波可以完全清除波及范围内的所有垃圾,并且不会产生任何其他不良影响.炸弹爆炸后冲击波是以正方形方式扩散的,炸弹威力(扩散距离)以d给出,表示可以传播d条街道.例如下图是一个d=1的"

Nightmare --- 炸弹时间复位

题目大意: 该题为走迷宫,其条件有如下6个: 1, 迷宫用二维数组来表示: 2, 人走动时不能越界,不能在墙上走: 3, 当走到出口时,若剩余时间恰好为0,则失败: 4, 找到炸弹复位装置,若剩余时间恰好为0,则不能使用: 5, 炸弹复位装置可以使用若干次: 6, 只要走到复位装置所在位置,时间自动复置为6: 其中,数组中,0表示墙,1表示通道,2表示初始位置,3表示出口,4表示炸弹复位装置: 求走出迷宫所需要的最少步数,若不能在炸弹爆炸前走出来,输出-1. 大概思路: 迷宫问题是经典的BFS问