오늘은 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");
}
}
이렇게 설정하고 각각 오브젝트에 스크립트를 넣게되면 완성된다.
