【问题标题】:Auto attacking on collision碰撞自动攻击
【发布时间】:2015-07-10 08:35:54
【问题描述】:

对于横向滚动游戏,我需要攻击与我的玩家范围相撞的敌人,这是我的做法:

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 之前停止> nextFire;

我尝试在方法开始时进行 Debug.Log,并且在此调试冻结后似乎不再调用 OnCollisionStay,这发生在第一次攻击后的 1s - time.deltaTime 左右。

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

【问题讨论】:

    标签: unity3d


    【解决方案1】:

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

    YouTube Playlist

    【讨论】:

      猜你喜欢
      • 2021-12-31
      • 1970-01-01
      • 2015-03-03
      • 2023-04-10
      • 1970-01-01
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      相关资源
      最近更新 更多