大家好,我在与OnTriggerEnter2D集成时遇到问题。
玩家有2条子弹,每当玩家的子弹击中敌人时,其分数便会增加100,但由于某些原因,如果有两名玩家的子弹击中敌人,分数将增加200。两颗子弹同时发射,并位于玩家枪支的两侧。因此,它只能将分数提高100,而不是200。
这是我的代码:
<td>
其他信息:
我的玩家子弹和敌人都装有Box Collider和RigidBody2D。它们都选中了isTrigger选项。
答案 0 :(得分:2)
如果您希望它只运行一次,您可以在得分的第一次增加后(也就是第一次碰撞后)ignore collision,如下所示:
void OnTriggerEnter2D(Collider2D col)
{
if(col.tag == "PlayerBullet")
{
this.score += 100;
Physics2D.IgnoreCollision(col, GetComponent<Collider2D>())
}
}
请注意:在此之后,PlayerBullet
和Enemy
之间的所有冲突都将被忽略。
答案 1 :(得分:0)
如果我理解正确,则玩家有两把枪,我认为它们是同时发射的。
在这种情况下,我们可以使用condition-condition语句使它更漂亮。
我要离开下面的代码块。
if (Input.GetMouseButtonDown(0) && Input.GetMouseButtonDown(1))
{
Debug.Log("Fire Metod(Score)");
}
else
{
if (Input.GetMouseButtonDown(0))
{
Debug.Log("Fire Metod(Score)");
}
if (Input.GetMouseButtonDown(1))
{
Debug.Log("Fire Metod(Score)");
}
}
答案 2 :(得分:0)
通常您可以设置一个 flag 来告诉游戏仅增加一次。标志只是一个布尔值,并且可以在类的范围内私有。有点像:
if(canHit)
{
canHit = false;
//add score
canHit = true;
}
该基本公式应该可以为您带来所需的结果。
答案 3 :(得分:0)
我将我的评论升级为答案,因为阅读完您的问题和评论回复后,我认为您需要一个非代码答案。
您希望两个对象一起工作,并在它们与另一个对象碰撞时算作一个“命中”。在我看来,这是一种情况,您应该将这些对象放置在另一个对象中,我们称其为“射击”对象,并且您应该基于该对象进行碰撞。这样,如果两个子弹都只击中一个“子弹”,那么它将按原样计入代码,并且听起来像您期望的那样它将更多地实现。