碰撞时自动攻击

时间:2015-04-30 15:00:50

标签: unity3d

对于侧面滚动游戏,我需要攻击与我的玩家范围发生碰撞的敌人,这是我的方式:

void OnCollisionStay2D(Collision2D coll) {
        Enemy target = coll.gameObject.GetComponent <Enemy> ();
        if (target != null) {
            moving = false;
            anim.SetBool ("attack", true);
            target.Damage (damageValue);
        }
    }

问题在于我在每一帧都会造成damageValue点伤害,所以我想加一个冷却时间,如下:

void OnCollisionStay2D(Collision2D coll) {
        Enemy target = coll.gameObject.GetComponent <Enemy> ();
        if (target != null && time.time > nextFire) {
            moving = false;
            anim.SetBool ("attack", true);
            target.Damage (damageValue);
            nextFire = Time.time + 1;//I set the cooldown to 1 second
        }
    }

问题在于播放器正在攻击一次,而且再一次,我在OnCollisionStay方法结束时尝试调试.Log(Time.time),并且调试垃圾邮件在Time.time之前停止&GT; nextFire;

我在方法的开头尝试了Debug.Log,看起来OnCollisionStay在调试冻结后不再被调用,这在第一次攻击后大约1s - time.deltaTime发生。

所以我不知道怎么做,基本上这里是一维横向滚动,你可以从右到左,这应该很简单,但我不明白。

1 个答案:

答案 0 :(得分:0)

您可以考虑为武器创建一个射击率,以便一次可以更改为一个子弹或连续射击。你可以控制它。也喜欢光线投射而不是碰撞。有一个2D平台游戏教程,但我非常喜欢Brackeys的那个。

YouTube Playlist