転職を繰り返したサラリーマンの多趣味ブログ

30才未経験でSEに転職した人の多趣味ブログ

【Unity】ダメージをくらったら、Spriteを点滅させて無敵時間を作る方法

横スクロールアクションや、シューティングゲームでよくあるあれです。
まずSpriteを点滅させる方法は、SpriteRendererコンポーネントのアルファ値を変化させてやれば、実装できる。そのときのソースコードがこれ。

public SpriteRenderer sp;

// ダメージ判定フラグ
private bool isDamage{get; set;}

void Update() {

    // ダメージを受けている場合、点滅させる
    if(isDamage) {

        float level = Mathf.Abs(Mathf.Sin(Time.time * 10));
        sp.color = new Color(1f, 1f, 1f, level);

    }

}

// トリガー発生時
private void OnTriggerEnter2D(Collider2D collider) {

    StartCoroutine(OnDamage());

}

public IEnumerator OnDamage() {

    yield return new WaitForSeconds(3.0f);
        
    // 通常状態に戻す
    isDamage = false;
    sp.color = new Color(1f, 1f, 1f, 1f);

}

このソースであれば、敵からダメージを受けたら3秒間は点滅する。

あと無敵時間を作るのは簡単で、このダメージ判定フラグを利用する。
OnTriggerEnter2Dメソッド内に、ダメージを受けた際の挙動を実装する場合、ダメージ判定フラグがTrueならば処理をスキップさせてやればいい。

// トリガー発生時
private void OnTriggerEnter2D(Collider2D collider) {

    // ダメージ中は処理スキップ
    if(isDamage) {
        return;
    }

    StartCoroutine(OnDamage());

}