bool crash = false; // 몸 충돌 데미지 적용 여부
bool attacking = false; // 공격중인지 여부
float attackDelayTime = 0; // 공격대기 시간
WaitForSeconds oneHalfDelay = new WaitForSeconds(1.5f);
WaitForSeconds halfDelay = new WaitForSeconds(0.5f);
BossEnemy bossEnemy;
public GameObject Skill2Projectile;
private void Awake()
{
bossEnemy = GetComponent<BossEnemy>();
}
private void Update()
{
if (attackDelayTime > 0)
{
attackDelayTime -= Time.deltaTime;
}
else
{
attackDelayTime = 0;
if (!attacking)
{
attacking = true;
//UseSkill(Random.Range(1, 4));
}
}
}
private void AttackReayOn()
{
attacking = false;
attackDelayTime = 5.0f;
}
// 적(플레이어) 방향으로 검기 5~7개
public IEnumerator Skill2()
{
for(int i = 0; i < Random.Range(5, 8); i++)
{
GameObject clone = Managers.Pool.Pop(Skill2Projectile, transform).gameObject;
clone.transform.position = transform.position;
clone.GetComponent<ProjectileController>().direction = (bossEnemy.target.transform.position - transform.position).normalized;
// 공격 애니메이션
yield return halfDelay;
}
AttackReayOn();
}
ObjectPool로 검기를 생성하고 전에 만들었던 발사체 컴포넌트를 추가하여 방향을 정해준 다음 캐싱한 변수 halfDelay를 사용하여 처리하였음
public class BossMovement : MonoBehaviour
{
public Rigidbody2D rigid;
private void Awake()
{
rigid = GetComponent<Rigidbody2D>();
}
public void AddForce(Vector3 target, float speed)
{
rigid.velocity = Vector2.zero;
rigid.AddForce(target.normalized * speed, ForceMode2D.Impulse);
}
}
//아래는 BossSkill.cs
// 플레이어를 향해 짧게 3번 돌진
public IEnumerator Skill3()
{
crash = true;
// AddForce 3번
for (int i = 0; i < 3; i++)
{
bossEnemy.movement.AddForce(bossEnemy.target.position - transform.position, 30.0f);
// 공격 애니메이션
yield return halfDelay;
crash = false;
yield return oneHalfDelay;
}
AttackReayOn();
crash = false;
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (!crash) return;
if (collision.CompareTag("Player"))
{
if(collision.TryGetComponent<IDamagable>(out IDamagable damagable))
{
damagable.ApplyDamage(1);
}
}
}
movement(BossMovement)에 AddForce()를 생성하고 거기서 rigidbody의 AddForce를 이용하여 짧은 대쉬를 구현을 하고 구현한 메서드를 이용하여 처리하였음
1. 없음
1. 없음
1. 없음