我是Unity2D的新手。我正在尝试做城堡防御游戏。当产卵开始继承敌人重叠(他们应该),但当弓箭手的箭碰撞whit敌人它杀死他们所有。我到处寻找这个答案,但没有...我的问题是:有办法一次只击中一个目标吗
箭头脚本:
void Start()
{
target = GameObject.FindGameObjectWithTag("Enemy").GetComponent<Transform>();
}
// Update is called once per frame
void Update()
{
transform.position = Vector2.MoveTowards(transform.position, target.position, speedProjectile * Time.deltaTime);
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.CompareTag("Enemy"))
{
Destroy(gameObject);
}
}
敌人剧本:
void Start()
{
target = GameObject.FindGameObjectWithTag("target3").GetComponent<Transform>();
}
// Update is called once per frame
void Update()
{
transform.position = Vector2.MoveTowards(transform.position, target.position, speed * Time.deltaTime);
}
private void OnTriggerEnter2D(Collider2D col)
{
if (col.gameObject.CompareTag("arrow"))
{
EHealth -= HDamage;
}
if (EHealth <= 0)
{
Destroy(gameObject);
}
4条答案
按热度按时间gt0wga4j1#
你的敌人都会受到伤害,因为摧毁一个
GameObject
并不是立即发生的事情(有很好的理由)。正因为如此,在一个单一的框架中,任何数量的敌人都可以被同一支箭击中。如果你想依靠这些碰撞方法,我建议你控制箭的伤害,而不是敌人的伤害,这样你就可以确保它只击中一个东西:
然后去掉敌人脚本的
OnTriggerEnter2D
,因为箭头处理了所有的事情。我不知道敌人脚本的名字,所以我就叫它EnemyScript
。这也是调用一个你必须创建的DealDamage()
方法(它可能看起来很像你现在在“敌人脚本”中列出的方法)。klr1opcd2#
很难说,根据你所说的信息,所有的实体都是一个实体(所以当你杀死一个敌人时,你杀死的是唯一的敌人,也就是所有的敌人)。你可以让他们彼此独立运行。
8i9zcol23#
也许你可以使用碰撞输入功能来检查子弹是否击中敌人的身体。你可以使用下面的代码...
我希望它对你有用。
gj3fmq9x4#
终于弄明白了。首先脚本是造成伤害的,所以我应该击中目标特定的次数,所以我不能停止箭头的碰撞,而不把它打开。所以我做了一个方法,即在箭头碰撞后被Invoked(InvokeRepeating()),它把一个bool变回false。这个方法(函数)当然应该在Update()中;我不确定我说的是否正确,因为我是一个初学者,但我希望这能帮助一些人。:D和这里的代码:箭头脚本:
敌人剧本:
也要感谢@Foggzie