Unity용 2D 근접 공격 튜토리얼

Unity 엔진은 2D 및 3D 게임을 모두 만들기 위한 광범위한 플랫폼을 제공합니다. 많은 액션 게임의 기본 요소 중 하나는 근접 공격입니다. 2D 환경에서 이러한 공격은 종종 캐릭터가 무기를 휘두르거나 펀치를 던지는 것으로 구성되며 Unity 애니메이션, 물리 및 스크립팅 도구의 조합을 사용하여 수행할 수 있습니다.

전제조건

  • Unity 엔진가 설치 및 설정되었습니다.
  • Unity 인터페이스 및 2D 공간에 대한 기본 지식.

1. 프로젝트 및 장면 설정

  • 새 2D Unity 프로젝트를 만듭니다(아직 하지 않은 경우).
  • 캐릭터 스프라이트를 가져오거나 만듭니다. 장면에 배치합니다.

2. 근접 공격 애니메이션 설정

  • 프로젝트 창에서 마우스 오른쪽 버튼을 클릭하고 "Animator Controller"을 생성합니다. 이름을 "CharacterAnimator"로 지정하세요.
  • 캐릭터를 선택하고 애니메이터를 "Animator" 구성 요소로 드래그하여 이 애니메이터를 캐릭터에 할당합니다.
  • 애니메이션 창을 엽니다. 캐릭터를 선택한 상태에서 "MeleeAttack"이라는 새 애니메이션을 만듭니다.
  • 단순화를 위해 이 공격이 빠른 펀치라고 가정해 보겠습니다. 이 동작을 시뮬레이션하려면 스프라이트에 애니메이션을 적용하세요.

3. 공격 히트박스 생성

  • GameObject를 캐릭터의 자식으로 추가합니다. 이는 공격의 히트박스 역할을 합니다.
  • a "Box Collider 2D"를 빈 GameObject에 연결합니다. 펀치를 치는 동안 캐릭터가 맞을 위치와 일치하도록 크기와 위치를 조정합니다.
  • "Active" 상자를 선택 취소하여 히트박스를 비활성화합니다. 이렇게 하면 공격 애니메이션 중에만 활성화됩니다.

4. 공격 논리 스크립팅

  • 새 스크립트를 만들고 이름을 "MeleeAttack"으로 지정한 다음 그 안에 아래 코드를 붙여넣습니다.

'MeleeAttack.cs'

using UnityEngine;

public class MeleeAttack : MonoBehaviour
{
    private Animator animator;
    private BoxCollider2D hitbox;

    private void Start()
    {
        animator = GetComponent<Animator>();
        hitbox = transform.Find("HitboxGameObjectName").GetComponent<BoxCollider2D>();
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space)) // Attack on Space key press.
        {
            animator.SetTrigger("MeleeAttack");
            Invoke("ActivateHitbox", 0.2f); // Activate hitbox after 0.2 seconds.
            Invoke("DeactivateHitbox", 0.4f); // Deactivate hitbox after 0.4 seconds.
        }
    }

    void ActivateHitbox()
    {
        hitbox.gameObject.SetActive(true);
    }

    void DeactivateHitbox()
    {
        hitbox.gameObject.SetActive(false);
    }
}
  • "MeleeAttack" 스크립트를 주인공에 첨부하세요.
  • 애니메이션에 따라 히트박스 활성화 및 비활성화 타이밍을 조정합니다.
  • Hitbox 충돌체를 Hitbox 변수에 할당합니다.

5. 충돌 처리

  • 적 게임 객체의 태그를 "Enemy"로 변경합니다.
  • 새 스크립트를 만들고 이름을 "Hitbox"로 지정한 다음 그 안에 아래 코드를 붙여넣습니다.

'Hitbox.cs'

using UnityEngine;

public class Hitbox : MonoBehaviour
{
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("Enemy"))
        {
            // Damage or destroy the enemy.
            Destroy(collision.gameObject);
        }
    }
}
  • 히트박스 객체에 "Hitbox" 스크립트를 첨부하세요.

해결해야 할 질문:

  1. 애니메이션 중에 히트박스가 언제 활성화되는지 어떻게 알 수 있나요?: 히트박스는 'MeleeAttack.cs' 스크립트의 'Invoke' 함수에 의해 활성화됩니다. 공격이 착지할 프레임에 따라 타이밍을 조정할 수 있습니다.
  2. 히트박스가 동시에 여러 적과 충돌하면 어떻게 되나요?: 제공된 'Hitbox' 스크립트를 사용하면 히트박스와 충돌하는 "Enemy" 태그가 있는 각 적이 파괴됩니다. 피해나 기타 효과를 관리하려면 스크립트를 조정하세요.
  3. 공격 버튼을 스페이스 키로 변경할 수 있나요?: 예, 'MeleeAttack.cs' 스크립트에서 if ('Input.GetKeyDown(KeyCode.Space)') 줄은 스페이스 키 누름을 확인합니다.. 공격 버튼을 변경하려면 'KeyCode.Space'를 다른 'KeyCode' 값으로 바꾸세요.

결론

이 가이드는 Unity에서 2D 근접 공격을 구현하기 위한 기본 프레임워크를 제공합니다. 음향 효과 추가, 시각적 피드백, 적중 감지 로직 개선 등의 개선 사항을 통해 근접 공격 경험을 더욱 향상시킬 수 있습니다.

추천 기사
Unity용 카운트다운 타이머 튜토리얼
Unity 캡처 스크린샷 튜토리얼
Zone Controller Pro - Unity 에셋 스토어 패키지
Unity에서 새로운 HDRP 급수 시스템을 사용하는 방법
FPC Swimmer - 몰입형 수중 환경을 위한 포괄적인 Unity 에셋
Ultimate Spawner 2.0 - 판도를 바꾸는 자산
Unity용 마우스 보기 스크립트