/// <summary> /// 총알을 발사하고 /// 설정한다. /// </summary> void FireBullet() { EnemyBullet bullet = GameObject.Instantiate <EnemyBullet>(); Vec2D bulletPoint = gameObject.transform.position; bulletPoint.Y += 8; bullet.transform.position = bulletPoint; DamageSystem damageSystem = bullet.GetComponent <DamageSystem>(); damageSystem.EventGiveDamage += () => GameObject.Destroy(bullet); }
/// <summary> /// 총알을 생성하고 좌표를 위로 조금 올려준다. /// </summary> void FireBullet() { PlayerBullet bullet = GameObject.Instantiate <PlayerBullet>(); Vec2D bulletPoint = gameObject.transform.position; bulletPoint.Y -= 8; bullet.transform.position = bulletPoint; DamageSystem damageSystem = bullet.GetComponent <DamageSystem>(); damageSystem.EventGiveDamage += () => GameObject.Destroy(bullet); GameManager.Instance.IncreaseFireCount(1); }
/// <summary> /// slot에 설정된 적 유닛의 로직을 설정한다. /// 각 컴포넌트에 이벤트를 추가한다. /// </summary> /// <param name="slot">설정할 슬롯</param> /// <param name="score">죽으면 추가할 점수</param> private void SetupEnemy(Slot slot, int score) { BezierCurveMove move = slot.gameObject.GetComponent <BezierCurveMove>(); HealthSystem health = slot.gameObject.GetComponent <HealthSystem>(); DamageSystem damageSystem = slot.gameObject.GetComponent <DamageSystem>(); //damageSystem.EventGiveDamage += () => health.GetDamage(2); // 한번만 작동하게 하는 이벤트 삽입 // 자기 자신에게 데미지 주기 Action selfDamage = null; selfDamage = () => { damageSystem.EventGiveDamage -= selfDamage; health.GetDamage(2); }; damageSystem.EventGiveDamage += selfDamage; // 죽으면 애니메이션 재생하게 하기 health.EventOnDead += () => { slot.gameObject.collider.Enabled = false; move.Enabled = false; AnimationSprite animation = slot.gameObject.GetComponent <AnimationSprite>(); animation.ImageCurrentIndex = 0; animation.ImageChangeInterval = 0.1f; animation.ImageList.Clear(); animation.ImageList.Add(Resources.enemy_die_01); animation.ImageList.Add(Resources.enemy_die_02); animation.ImageList.Add(Resources.enemy_die_03); animation.ImageList.Add(Resources.enemy_die_04); animation.ImageList.Add(Resources.enemy_die_05); // 재생 다하면 오브젝트 삭제 animation.EventPrintedAllImage += () => GameObject.Destroy(slot.gameObject, 0); animation.EventPrintedAllImage += () => slot.gameObject = null; }; // 점수 증가 health.EventOnDead += () => GameManager.Instance.IncreaseScore(score); health.EventOnDead += () => aliveUnits.Remove(slot.gameObject); // 보스몬스터일경우 남은 HP가 1이면 애니메이션 스프라이트 변경 if (slot.gameObject as Enemy03 != null) { health.EventGetDamage += (leftHP) => { if (leftHP == 1) { AnimationSprite animationSprite = slot.gameObject.GetComponent <AnimationSprite>(); if (animationSprite != null) { animationSprite.ImageList.Clear(); animationSprite.ImageList.Add(Resources.Enemy_03_03_01); animationSprite.ImageList.Add(Resources.Enemy_03_03_01); } } else if (leftHP == 2) { AnimationSprite animationSprite = slot.gameObject.GetComponent <AnimationSprite>(); if (animationSprite != null) { animationSprite.ImageList.Clear(); animationSprite.ImageList.Add(Resources.Enemy_03_02_01); animationSprite.ImageList.Add(Resources.Enemy_03_02_01); } } }; } }