gpt4 book ai didi

c# - 敌人对玩家的持续伤害 - Unity 2019.1 Beta

转载 作者:太空宇宙 更新时间:2023-11-03 22:38:14 24 4
gpt4 key购买 nike

基本上我有一个敌人和一个玩家。当敌人或玩家彼此碰撞时,会发生伤害并且玩家受伤导致 HP 损失。但是,一旦接触,只会造成一次伤害。如何确保在整个碰撞过程中不间断地对玩家造成伤害?

我正在设置一个 bool 变量 isTouching 并在接触时将其设置为 true。然后设置一个 while 循环,不断减少玩家的 HP。然后使用 OnCollisionExit 将 isTouching 设置为 false。

private bool isTouching; // determines if the player is 
touching
private void OnCollisionEnter2D(Collision2D collision)
{
isTouching = true;


if (collision.gameObject.tag == "Enemy01")
{
while (isTouching == true)
{
GetComponent<AudioSource>().Play();
HPBAR.PlayHP -= Random.Range(5, 30);
if (HPBAR.PlayHP < 0)// Insures player HP bar doesn't read less
than zero in GUI TXT
{
HPBAR.PlayHP = 0;

}
// Debug.Log("Ouch! " + HPBAR.PlayHP + " Left");
if (HPBAR.PlayHP <= 0 && HPBAR.lives > 0)
{

HPBAR.lives--;
HPBAR.LPfloat--;
p5.transform.position = spawner.transform.position;
HPBAR.PlayHP = Random.Range(100, 150);
// Debug.Log("You're Dead!!! Lives left: " + (HPBAR.lives + 1));

}
else if (HPBAR.PlayHP <= 0 && HPBAR.lives <= 0)
{

SceneManager.LoadScene("DeathScene");

}
}//end of while


} // of player tag check

}// end of collision enter

private void OnCollisionExit2D(Collision2D collision)
{
isTouching = false;
}

while 循环会卡住我的计算机,因此我不建议您在 while 循环的情况下运行它。无论如何,我需要知道的是如何实现我想要做的事情。如何让敌人不断伤害玩家?例如,如果我跳到敌人身上,它会造成一次伤害,然后我就可以骑着他转了一圈。我希望不停地造成伤害,以迫使玩家离开或最终死亡。

最佳答案

OnCollisionEnter2D 旨在仅触发发生相同碰撞的第一帧。

您想使用 OnCollisionStay2D() ,它在每一帧发生碰撞时触发。

此外,摆脱 while 循环。在该方法终止之前,游戏无法更新(包括调用 OnCollisionExit2D)。

private void OnCollisionStay2D(Collision2D collision)
{
if (collision.gameObject.tag == "Enemy01")
{
GetComponent<AudioSource>().Play();

// To take 5 - 30 damage per second:
HPBAR.PlayHP -= Random.Range(5f,30f) * Time.deltaTime;

if (HPBAR.PlayHP < 0)// Insures player HP bar doesn't read less than zero in GUI TXT
{
HPBAR.PlayHP = 0;

}
// Debug.Log("Ouch! " + HPBAR.PlayHP + " Left");
if (HPBAR.PlayHP <= 0 && HPBAR.lives > 0)
{
HPBAR.lives--;
HPBAR.LPfloat--;
p5.transform.position = spawner.transform.position;
HPBAR.PlayHP = Random.Range(100, 150);
// Debug.Log("You're Dead!!! Lives left: " + (HPBAR.lives + 1));

}
else if (HPBAR.PlayHP <= 0 && HPBAR.lives <= 0)
{
SceneManager.LoadScene("DeathScene");
}

} // of player tag check

}// end of collision stay

private void OnCollisionExit2D(Collision2D collision)
{
if (collision.gameObject.tag == "Enemy01")
{
// put "i quit touching the hurty thing" stuff here.
}
}

关于c# - 敌人对玩家的持续伤害 - Unity 2019.1 Beta,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53766829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com