我正在开发一种平台游戏,其中的主要机制之一是,当您从底部击中敌人(或按照代码中实际实施的方式用您的顶部击中敌人)时,他们会失去健康。显然,在奔跑时,玩家角色和敌人角色确实会发生冲突,因为它们相互影响。但是,我用来获取效果的OnCollisionEnter2D倾向于不同意,因为当我使用它们时没有任何效果发生。这是它的当前代码:
void OnCollisionEnter2D(Collision collision)
{
if (collision.collider.gameObject.layer == 10)
{
print("yeet"); //debug text
if (hitEnemy == true)
collision.collider.gameObject.GetComponent<EnemyMove01>().health -= 1;
else
health -= 1;
}
}
我尝试过:
在“碰撞”中添加和删除“ .collider”。行。
在同一行中添加和删除“ .gameObject”。
同时使用图层和标签进行检查。
同时使用了层名称和层号进行检查。
为“健康-= 1”删除外部it语句execpt中的所有内容,并使用调试文本查看问题是否与hitEnemy的工作方式有关(显然没有)。
< / li>同时使用OnCollisionEnter和OnCollisionEnter2D。
检查了对撞机矩阵。
将敌人的类型更改为“静态”。
检查“触发器是否已激活”(当前未激活)。
我将不胜感激。如果您认为有帮助,我也愿意发布任何其他内容(代码的其他部分,BoxCollider2D / RigidBody2D内容)。
更新:我已经编辑了代码并解决了上述问题,但是现在,即使我的角色没有被击中,敌人的角色也会在我运行时立即消失。这是当前代码:
void OnCollisionEnter2D(Collision2D collision)
{
if (collision.collider.gameObject.tag == "Enemies")
{
print("yeet"); //debug text
if (hitEnemy == true)
collision.collider.gameObject.GetComponent<EnemyMove01>().health -= 1;
else
health -= 1;
}
}
由于可能是因为hitEnemy始终为true,所以这是激活代码:
hitEnemy = Physics2D.OverlapCircle(attackpos.position, attackRange, whatisEnemies);
attackRange为0.5,而Attackpos则附加在玩家角色上方的游戏对象上(如果您认为有帮助,可以获取屏幕截图)。 whatisEnemies是设置为“敌人”层的图层蒙版。
更新2:提出第二个问题是因为我忘记了输入敌人的健康信息。糟糕!