Unity-定时开机

您能帮我进行定时通电吗?

这是我的代码

public int jumpTrig = 0;
public int speed = 0;
public int health = 0;

public float duration = 0;
public float timer = 0;
void OnTriggerEnter2D(Collider2D coli)
{
    if (coli.gameObject.tag == "Player")

    {
        coli.gameObject.getcomponent<PlayerMove>().jumpForce += jumpTrig;
        coli.gameObject.getcomponent<PlayerMove>().speed += speed;
        coli.gameObject.getcomponent<Health>().health += health;

        Destroy(this.gameObject);
    }
}
q382206646 回答:Unity-定时开机

我实际上不推荐在这里Update 中使用计时器,因为它妨碍了您至少已经停用相应的GameObject Corotuine 也是如此。

在两种情况下,您都无法DestroySetActive(false)的PowerUp项困扰我。


但是您可以使用Invoke

如果对象被销毁,它仍然会破坏,但是它可以在无效的GameObject上运行!

因此,请先禁用它,然后Destroy

更多点:

  • 通常,您应该尽可能少地使用GetComponent,因为它非常昂贵。而是存储引用并重复使用。

  • 您应该使用CompareTag而不是直接使用==CompareTag的速度(略有提高),但更重要的一点是:如果提供的Tag例如拼写错误/不存在。 ==隐藏了这样的“错误”,而仅仅失败了,这会花费您一些开发时间和神经;)

  • 请注意,我还会给您的字段起更好的名字

所以您的代码可能看起来像

public int jumpBonus = 0;
public int speedBonus = 0;
public int healthBonus = 0;

public float duration = 0;

private PlayerMove playerMove;
private Health playerHealth;

private void OnTriggerEnter2D(Collider2D coli)
{
    if (!coli.CompareTag("Player")) return;

    playerMove = coli.gameObject.GetComponent<PlayerMove>();
    playerHealth = coli.gameObject.GetComponent<Health>();

    playerMove.jumpForce += jumpBonus;
    playerMove.speed += speedBonus;
    playerHealth.health += healthBonus;

    gameObject.SetActive(false);

    // Calls ResetEffect after "duration" seconds even if gameObject is inactive
    Invoke(nameof(ResetEffect),duration);
}

private void ResetEffect()
{
    playerMove.jumpForce -= jumpBonus;
    playerMove.speed -= speedBonus;
    playerHealth.health -= healthBonus;

    Destroy(gameObject);
}
,

您可以使用Update和DeltaTime来执行单个计时器,以在所需时间的浮动范围内工作。

public float powerTime = 0.0f
private bool poweredUp = false;

void OnTriggerEnter2D(Collider2D coli)
{
    if (coli.gameObject.tag == "Player")

    {
        powerTime = 10.0f;
    }

}

Update()
{ 
    powerTime -= Time.deltaTime;

    if (powerTime > 0.0f && !poweredUp)
    {
        poweredUp = true;
        doPowerUp();
    }
    else if (poweredUp)
    {
        doPowerEnd()
    }

void doPowerUp()
{
    coli.gameObject.GetComponent<PlayerMove>().jumpForce += jumpTrig;
    coli.gameObject.GetComponent<PlayerMove>().speed += speed;
    coli.gameObject.GetComponent<Health>().health += health;


}

void doPowerEnd()
{
    poweredUp = false;
    Destroy(this.gameObject);
//reset to your normal values.
}
本文链接:https://www.f2er.com/3137087.html

大家都在问