簡體   English   中英

Unity 如何在 OnTriggerEnter2D 中放置多個 if 語句?

[英]Unity how can I put multiple if statements in OnTriggerEnter2D?

美好的一天,我正在嘗試創建一個對玩家造成傷害的敵人,因為敵人就是這樣做的。 我已經想出了如何做到這一點唯一的問題是敵人幾乎立即殺死玩家並且過於強大......我試圖在敵人再次襲擊之前放置一些冷卻時間但不幸的是, OnTriggerEnter2D似乎只接受1 if 語句。


    void OnTriggerEnter2D(Collider2D col){
        //What iam trying to achieve but this doesn't work
        if(Time.time > nextDamageTime) { 
            if(col.CompareTag("Player")){
                player.curHealth -= 1;
                Debug.Log("Enemy damaged player!");
                nextDamageTime = Time.time + cooldownTime;
            }
        }
    }

首先這是c#。 無論如何,沒有任何東西可以控制您在方法中打開的if塊的數量。

因此,在OnTriggerEnter2D沒有條件和if塊的OnTriggerEnter2D


實際上,我在您的代碼中沒有看到直接問題,除了可能: OnTrigggerEntet2D被調用一次,即在觸發器進入而不退出的那一刻。 因此,如果這已經立即殺死了玩家,那么減少1可能只是一個太高的值。

使用計時器什么也不會發生,因為如上所述它只被調用一次,所以在計時器尚未完成的情況下,直到敵人離開並最終重新進入之前什么都不會發生。


您可能更願意使用OnTriggerStay2D ,只要觸發器發生碰撞,就會在每一幀中調用它。

float timer;

private void OnTriggerEnter2D (Collider other)
{
    // reset the timer so the first hit happens immediately
    timer = 0;
}

private void OnTriggerStays2D(Collider other)
{
    if(!col.CompareTag("Player")) return;

    timer -= Time.deltaTime;

    if(timer > 0) return;

    timer = cooldownTime;
    player.curHealth -= 1;
}

現在每cooldownTime秒都會將玩家的生命值降低1


一般來說,特別是對於多個敵人,我個人更願意讓玩家在最后一次擊中后控制計時器,這樣玩家本身就有一種無敵時間。 敵人可以像往常一樣簡單地攻擊,但玩家自己決定傷害是否重要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM