嗨,大家好我和OnTriggerEnter2D有问题。
玩家有2颗子弹,每当玩家子弹击中敌人时,它应该将分数增加100,但由于某种原因,如果两个玩家子弹击中敌人,则将分数增加200。两颗子弹同时射击并且位于球员枪的两侧。所以它应该只将分数增加100而不是200。
这是我的代码:
void OnTriggerEnter2D(Collider2D col)
{
if(col.tag == "PlayerBullet")
{
this.score += 100;
}
}
其他信息:
我的玩家子弹和敌人都附有Box Collider和RigidBody2D。它们都选中了isTrigger选项。
如果你希望它能够在第一次增加分数(也就是第一次碰撞后)之后才能使用ignore collision,就像这样:
void OnTriggerEnter2D(Collider2D col)
{
if(col.tag == "PlayerBullet")
{
this.score += 100;
Physics2D.IgnoreCollision(col, GetComponent<Collider2D>())
}
}
请注意,在此之后,PlayerBullet
和Enemy
之间的所有碰撞都将被忽略。
如果我理解正确,玩家有两把枪,我认为他们同时被解雇了。
在这种情况下,我们可以使用条件条件语句使其更美观。
我将离开下面的代码块。
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)");
}
}
通常你可以设置一个标志来告诉游戏只增加一次。标志只是一个bool值,并且可以在类的范围内是私有的。有点像:
if(canHit)
{
canHit = false;
//add score
canHit = true;
}
那个基本公式应该可以得到你想要的结果。
我正在将我的评论升级为答案,因为在阅读了您的问题和评论回复后,我认为您需要一个非代码答案。
您希望两个对象一起工作,并在与另一个对象发生碰撞时计为一个“命中”。这听起来像是一种情况,你应该将这些对象放在另一个对象中,让我们把它称为“镜头”对象,你应该根据它进行碰撞等等。这样,如果两个子弹只击中一个“击中”命中,那么它将按原样计算,并且听起来它会像你预期的那样实现更多。