【发布时间】:2020-10-12 21:10:27
【问题描述】:
我正在尝试为我的 2D 游戏制作攻击机制。它的工作原理如下:如果玩家站在敌人面前并按下空间,敌人就会死亡。为此,我在播放器脚本中写了这个:
void Attack()
{
Collider2D[] hitEnemies = Physics2D.OverlapCircleAll(AttackArea.position, AttackRange, EnemyLayers);
foreach (Collider2D enemy in hitEnemies)
{
enemy.GetComponent<Enemy_1>().Death();
}
}
在敌人的脚本中:
public void Death()
{
Destroy(gameObject);
}
它完美无缺,但我想在游戏中制作另一种类型的敌人,所以我在玩家攻击脚本中为第二个敌人添加了这个(我提到“GunBoi”是第二个敌人脚本的名称,我将第二个函数命名为“Dead()”而不是“Death()”,因为我认为如果它们具有相同的名称,它将无法工作)
Collider2D[] hitEnemies2 = Physics2D.OverlapCircleAll(AttackArea.position, AttackRange, EnemyLayers);
foreach (Collider2D enemy2 in hitEnemies2)
{
enemy2.GetComponent<GunBoi>().Dead();
}
这在第二个敌人脚本中:
public void Dead()
{
Destroy(gameObject);
}
但是每当我尝试攻击第二个敌人时,什么都没有发生。当我尝试攻击第一个敌人时,它确实起作用并且敌人死了。有谁知道为什么会这样?
【问题讨论】:
-
I named the second function "Dead()" instead of "Death()" since I thought it wouldn't work if they had the same name这根本不重要..名称主要是给你的;)只要它们被放置在不同的范围(在你的情况下是不同的类)它们可以有相同的name .. 后来这变成了没有任何名称的编译机器代码;)只是地址 -
既然你的代码完全一样,听起来你应该有一个共同的基类或接口而不是两个完全独立的类......对象有什么不同?他们可能只是缺少对撞机组件吗?
-
我已经检查过了,它们都附有刚体和对撞机。我所说的不同是指他们做完全不同的事情。第一个敌人应该移动,另一个应该留在一个地方并向玩家射击。我还想提一下,我使用了关于 2D 近战格斗的 brackeys 教程来帮助解决一些问题 (youtube.com/…)
-
请确保使用正确的标签。您的代码在
c#...unityscript中是/曾经是一种 JavaScript 风格,类似于 Unity 以前使用的自定义语言,现在早已弃用