CH.개인기록 노트

Unity

Unity 커맨드 스킬 구현

amckdgjs 2024. 4. 25. 11:41

이번에 2D 개인 프로젝트를 진행하면서 제일 중요하고 필수요소였던 파트이다. 닌자 베이스볼에서 필수적인 커맨드 스킬을 구현하고자 했는데..참고할 자료도 별로 없어서 힘들었지만 얼렁뚱땅 구현에 성공했다.

배경 지우면서 조금 바래졌지만 이거 할라고 모작했다.

 스킬을 사용할 때 키보드 오른쪽 화살표와 Z를 눌렀을 때 스킬이 발동되도록 만들고자 했다.

그래서 Queue를 사용해서 만들었다.

public KeyCode skillKey = KeyCode.Z; // 스킬을 발동할 키 설정
public KeyCode directionKey = KeyCode.RightArrow; // 스킬을 발동할 방향키 설정

private Queue<KeyCode> skillInputQueue = new Queue<KeyCode>(); // 스킬 입력을 위한 큐
private Animator animator;
public GameObject attackParticle;
private Player player; 
public AudioSource audiosource;
private void Start()
{
    player = GetComponent<Player>();
    animator = GetComponent<Animator>();
}

private void Update()
{
    
    if (Input.GetKeyDown(skillKey) && Input.GetKey(directionKey))
    {
        skillInputQueue.Enqueue(skillKey);
        skillInputQueue.Enqueue(directionKey);
    }

    
    CheckAndActiveSkill();
}

일단 public으로 스킬을 발동할 키 입력값들을 선언하고 Queue에 <KeyCode>로 만들었다.입력받은 두 개의 값을 넣어야 하기 때문에 <KeyCode>로 선언했다.

이후 Update에서 플레이어의 입력이 z와 방향키가 둘 다 true일때 CheckAndActiveSkill함수로 넘어간다.

void CheckAndActiveSkill()
{
   
    if (skillInputQueue.Count >= 2)
    {
        // 큐에서 스킬 입력 데이터를 꺼내옴
        KeyCode inputSkillKey = skillInputQueue.Dequeue();
        KeyCode inputDirectionKey = skillInputQueue.Dequeue();

        // 스킬 발동 조건 확인
        if (inputSkillKey == skillKey && inputDirectionKey == directionKey)
        {
            // 스킬 실행
            ActiveSkill();
        }
    }
}

여기선 Queue에 들어온 입력값이 2개 이상이거나 같으면 Dequeue를 통해 스킬 입력 데이터를 가져온다.이후 입력한 키와 선언한 키 둘 다 같을 때 스킬 실행 함수를 불러온다.

 void ActiveSkill()
 {
     animator.SetBool("isSkill", true);
 }

이렇게 하면 스킬 애니메이션이 재생된다.

피격처리는 애니메이션에 이벤트를 추가하여 데미지를 주고 싶은 프레임에 이벤트를 넣으면 된다.

'Unity' 카테고리의 다른 글

Unity 2D 프로젝트(2주)  (0) 2024.04.25
Unity 코루틴(Coroutine)  (0) 2024.04.01
Unity 게임 오브젝트  (0) 2024.04.01