TIL(2024,06,14)2D 클리커 만들어 보기(플레이어 및 적 설정)

김보근·2024년 6월 14일

Unity

목록 보기
16/113

오늘은 2D 클리커의 플레이어 및 적을 만들어볼것이다.

플레이어


에셋의 HeroKnight의 sprite를 드래그해서 Player오브젝트에 넣게되면


이렇게 Animator가 생긴다.


공격 애니메이션을 위해서 Attack을 만들어주고


Make transition으로 두개를 이어준후

motion에 attack을 넣고

Loop가 되어있으면 체크를 풀어준다.

그리고 파라미터에 Attack을 추가한다.

적 만들기


적도 hero만들었던것처럼 만들어주고

적부분은 맞는 애니메이션을 하기위해서 HitAnimation을 등록하였다.

그리고 파라미터에 Hit을 추가하고 다음은 스크립트 작업으로 가겠다.

스크립트 작성하기

플레이어 컨트롤

// PlayerController 클래스는 MonoBehaviour를 상속받습니다.
public class PlayerController : MonoBehaviour
{
    // player 객체를 저장할 public 변수입니다.
    public GameObject player;
    
    // Animator 컴포넌트를 저장할 private 변수입니다.
    private Animator playerAnim;

    // Start는 게임 시작 시 호출됩니다.
    void Start()
    {
        // player의 Animator 컴포넌트를 가져와 playerAnim 변수에 할당합니다.
        playerAnim = player.GetComponent<Animator>();
    }

    // Update는 매 프레임마다 호출됩니다.
    void Update()
    {
        // 매 프레임마다 MouseOnClick 메서드를 호출합니다.
        MouseOnClick();
    }

    // 마우스 클릭을 처리하는 private 메서드입니다.
    private void MouseOnClick()
    {
        // 마우스 왼쪽 버튼이 눌렸는지 확인합니다.
        if (Input.GetMouseButtonDown(0))
        {
            // 마우스 위치를 월드 좌표로 변환하여 pos 변수에 저장합니다.
            Vector2 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);

            // pos 위치에서 Z축 방향으로 Raycast를 발사하여 충돌한 객체를 hit 변수에 저장합니다.
            RaycastHit2D hit = Physics2D.Raycast(pos, Vector2.zero);

            // 만약 Raycast가 충돌한 객체가 있고, 그 객체의 태그가 "Enemy"라면
            if (hit.collider != null && hit.collider.tag == "Enemy")
            {
                // 충돌한 객체의 Enemy 컴포넌트를 가져와 enemy 변수에 저장합니다.
                Enemy enemy = hit.collider.GetComponent<Enemy>();
                
                // enemy 컴포넌트가 null이 아니라면
                if (enemy != null)
                {
                    // enemy의 EnenmyOnClick 메서드를 호출합니다.
                    enemy.EnenmyOnClick();

                    // playerAnim의 "Attack" 트리거를 활성화하여 공격 애니메이션을 재생합니다.
                    playerAnim.SetTrigger("Attack");
                }
            }
        }
    }
}

Enemy 적

// Enemy 클래스는 MonoBehaviour를 상속받습니다.
public class Enemy : MonoBehaviour
{
    // Animator 컴포넌트를 저장할 private 변수입니다.
    private Animator anim;

    // Start는 게임 시작 시 호출됩니다.
    void Start()
    {
        // 현재 객체의 Animator 컴포넌트를 가져와 anim 변수에 할당합니다.
        anim = GetComponent<Animator>();
    }

    // EnenmyOnClick 메서드는 외부에서 호출되어 적이 맞았을 때 애니메이션을 재생합니다.
    public void EnenmyOnClick()
    {
        // "Hit" 트리거를 활성화하여 적이 맞았을 때의 애니메이션을 재생합니다.
        anim.SetTrigger("Hit");
    }
}

이렇게 설정하고 각각 오브젝트에 스크립트를 넣게되면 완성된다.

profile
게임개발자꿈나무

0개의 댓글