Unity 2D 보스 - 기본 움직임 , 기본 공격

2025. 7. 19. 17:41·유니티 개발/사이드 뷰 게임

이번 글에서는 보스의  기본 움직임 , 기본 공격을 구현한것을 정리 해보겠습니다.

 

먼저 보스는 일반 몬스터와 비슷하게 구현 하였지만 보스 맵을 따로 만들 계획이라서 일단 플레이어를

계속 인식하도록 만들었습니다

보스 이미지

//플레이어 지정
public GameObject Player;
private Vector2 distance;

 

먼저 플레이어와 보스간의 거리가 멀다면 보스가 플레이어 쪽으로 움직이게 만들었습니다.

void Update()
{
    float dist = Mathf.Abs(Player.transform.position.x - transform.position.x);  
    PlayerCalculation();
    switch (state)
    {
        case BossState.idle:
            Idle();
            break;
        case BossState.move:
            Move();
            break;
        case BossState.attack:
            Attack();
            break;
    }
}


private void PlayerCalculation()
{
    if(state == BossState.attack ||state == BossState.downAttack)
        return ;


    distance.x = transform.position.x - Player.transform.position.x;

    attackCollider.GetComponent<SpriteRenderer>().enabled = false;
    animator.ResetTrigger("Attack");

    if (distance.x < 0)
        GetComponent<SpriteRenderer>().flipX = true;
    else
        GetComponent<SpriteRenderer>().flipX = false;

    if((distance.x < scanDistance || -distance.x < scanDistance ) && state != BossState.move)
        state = BossState.move;    

}

Mathf.Abs(Player.transform.position.x - transform.position.x)를 이용하여

거리가 멀어지면 move로 이동이 되고 ResetTirger를 이용하여 트리거가 attack 상태가 아닌대도

애니메이션이 attack 으로 넘어가는것을 방지 하였습니다.

private void Move()
{
    if (state != BossState.move)
        return;

    float attackDis = distance.x;
    if (attackDis < 0)
        attackDis = -attackDis;

    if (attackDis <= attackDistance && !delayStart )
    {
        rb.velocity = Vector2.zero;
        animator.SetBool("Walk", false);
        animator.SetTrigger("Attack");
        state = BossState.attack;

        return;
    }

    animator.SetBool("Walk", true);
    Vector2 direction = (Player.transform.position - transform.position).normalized;
    rb.velocity = new Vector2(direction.x * moveSpeed, rb.velocity.y);
}

이 코드는 보스의 움직이게 만들어 주는 코드 입니다.

만약 플레이어야 가까워지면 state 는 attack으로 넘어갑니다.

private void Attack()
{
    if (state != BossState.attack || delayStart)
        return;

    Vector2 offset = GetComponent<SpriteRenderer>().flipX ? rightOffset : leftOffset;
    attackCollider.GetComponent<SpriteRenderer>().enabled = true;
    attackCollider.transform.localPosition = offset;
   
}

추가적으로 보스의 크기가 크기 때문에 공격전에 빨간색 범위표시를 하였습니다

 

'유니티 개발 > 사이드 뷰 게임' 카테고리의 다른 글

Unity 2D 아이템 제작 - 기본 베이스  (0) 2025.07.20
Unity 2D 보스 - 특수 공격  (0) 2025.07.20
Unity 2D 스킬 쿨 타임  (0) 2025.07.19
Unity 2D 스킬 구현  (0) 2025.07.19
Unity 2D 플레이어 스킬 UI 구현  (0) 2025.07.18
'유니티 개발/사이드 뷰 게임' 카테고리의 다른 글
  • Unity 2D 아이템 제작 - 기본 베이스
  • Unity 2D 보스 - 특수 공격
  • Unity 2D 스킬 쿨 타임
  • Unity 2D 스킬 구현
dove-dove
dove-dove
dove-dove 님의 블로그 입니다.
  • dove-dove
    dove-dove 님의 블로그
    dove-dove
  • 전체
    오늘
    어제
    • 분류 전체보기 (38)
      • 유니티 개발 (38)
        • 팀 포트폴리오 - 슈퍼 마리오 (7)
        • 사이드 뷰 게임 (22)
        • 계륵 (8)
        • 깃 주소 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
dove-dove
Unity 2D 보스 - 기본 움직임 , 기본 공격
상단으로

티스토리툴바