横スクロールアクションや、シューティングゲームでよくあるあれです。
まず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()); }