이번에 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 |