Unity 如何在 OnTriggerEnter2D 中放置多个 if 语句?



美好的一天,我试图创造一个伤害玩家的敌人,因为这就是敌人所做的。我已经弄清楚了如何做到这一点,唯一的问题是敌人几乎立即杀死了玩家并且太强大了......我试图在敌人再次袭击之前放一些冷却时间,但不幸的是,OnTriggerEnter2D似乎只接受 1 if 语句。


void OnTriggerEnter2D(Collider2D col){
//What iam trying to achieve but this doesn't work
if(Time.time > nextDamageTime) { 
if(col.CompareTag("Player")){
player.curHealth -= 1;
Debug.Log("Enemy damaged player!");
nextDamageTime = Time.time + cooldownTime;
}
}
}

首先是 c#。没有什么可以控制您在方法中打开多少if块。

因此,不,OnTriggerEnter2D内的条件和if块没有限制!


我实际上在您的代码中没有看到直接问题,除了可能:OnTrigggerEntet2D只调用一次,即在触发器进入而不退出的那一刻。因此,如果这已经立即杀死了玩家,那么减少1可能只是一个过高的值。

使用计时器什么都不会发生,因为如前所述,它只被调用一次,所以在计时器尚未完成的情况下,在敌人离开并最终重新进入之前什么都不会发生。


您可能希望使用OnTriggerStay2D只要触发器发生冲突,它就会调用每一帧

float timer;
private void OnTriggerEnter2D (Collider other)
{
// reset the timer so the first hit happens immediately
timer = 0;
}
private void OnTriggerStays2D(Collider other)
{
if(!col.CompareTag("Player")) return;
timer -= Time.deltaTime;
if(timer > 0) return;
timer = cooldownTime;
player.curHealth -= 1;
}

现在,每cooldownTime秒就会降低玩家的生命值1


一般来说,特别是对于多个敌人,我个人宁愿让玩家在最后一次命中后控制计时器,这样玩家本身就有了无敌的时间。敌人可以像往常一样简单地攻击,但玩家自己决定伤害是否算数。

相关内容

  • 没有找到相关文章

最新更新