이번 글에서는 스킬을 어떻게 구현 한 것을 정리 하였습니다.
일단 전글에서 스킬 UI를 구현 하였습니다. 이번 글은 그 UI를 클릭 하였을 때 스킬이 등록 되는 것 부터
스킬 사용까지 구현을 한 것을 정리 해보겠습니다.
먼저 전 글에서 생성했던 스킬 선택 UI에서 버튼을 추가합니다.
버튼을 추가한후 클릭을 했을때 이벤트와 애니메이션을 추가 하였습니다.
void clickEvent()
{
//여기에 넣을꺼나 전달할거 추가
RectTransform rect;
rect = GetComponent<RectTransform>();
evnetMoveObj.GetComponent<SCUClickEventObj>().startMove(rect.anchoredPosition);
GameManager.Instance.SetPlayerSkill(skillCard);
//닫기
GameObject ui;
ui = GameObject.Find("UI_Canvas");
ui.GetComponent<UIManager>().closeStateCard();
gameObject.SetActive(false);
}

클릭을하면 클릭 안된 UI는 밑으로 내려가고 클릭이 된 UI는 오브젝트 생성 후 오른쪽 끝으로 이동후 사라지도록 만들었습니다.
그리고 왼쪽 아래에 클릭한 스킬이 나오도록 만들었습니다. 왼쪽 아래의 이미지는 UI쪽에
public void SetSkillImg(Sprite Img)
{
SkillImg.sprite = Img;
}
간단하게 구현 해보았습니다
이제 스킬을 구현한것을 설명해보겠습니다.
먼저 스킬 3개를 구현을 하였습니다
첫번째는 검에서 불 이팩트가 나오는 스킬 입니다
이 스킬 같은 경우에는 기본 공격 + 이펙트를 추가한 스킬 입니다
//업데이트
if(Input.GetKeyDown(KeyCode.Q) && !attacking &&
playerState != PlayerState.jump && !jumping && !rolling)
{
if(skill.PlayerSkill == PlayerSkill.Cuting)
{
playerState = PlayerState.skill;
}
}
//--
private void SkillAttack()
{
if (delayStart || skillOn)
return;
if (skill.PlayerSkill == PlayerSkill.Cuting && !skillOn)
{
animator.SetTrigger("Skill");
animator.speed = 0.65f;
skillOn = true;
}
}
여기에서 animator.speed 는 애니메이션 속도를 말하며 1이 정상 속도 입니다.

이렇게 구현을 하였습니다
두번째 스킬은 십자가가 나와 플레이어를 회복 시켜주는 스킬입니다
private void spawnSkill()
{
if (skill.PlayerSkill == PlayerSkill.HolyCross)
{
Vector2 playerPos = transform.position;
playerPos.y += 1.93f;
GameObject clone = Instantiate(TestSkill, playerPos, transform.rotation);
SpawnSkill spawn = clone.GetComponent<SpawnSkill>();
if (spawn != null)
{
spawn.StartSkill(skill);
}
ui.GetComponent<UIManager>().CallDonwSkill(4.0f);
playerState = PlayerState.idle;
animator.SetBool("Move", false);
}
}
스폰 스킬이기 때문에 스폰용 오브젝트를 따로 만들었습니다.
public void StartSkill(PlayerSkillData setData)
{
if (animator == null)
animator = GetComponent<Animator>();
skillData = setData;
switch(skillData.PlayerSkill)
{
case PlayerSkill.HolyCross:
animator.SetTrigger("HolyStart");
StartCoroutine(SkillContinuing());
break;
}
}
private void OnTriggerStay2D(Collider2D other)
{
if (skillData.PlayerSkill == PlayerSkill.HolyCross)
{
if (other.CompareTag("Player"))
{
other.GetComponent<PlayerMove>().Healing(0.5f);
}
}
}
IEnumerator SkillContinuing()
{
yield return new WaitForSeconds(15.0f);
animator.GetComponent<Animator>().SetTrigger("HolyEnd");
SkillEnd();
}
이제 이것을 모두다 오브젝트 생성 및 넣으면 두번째 스킬이 작동이 됩니다
3번재 스킬은 적에게(양쪽에 1개씩 총 2개) 번개를 소환하는 스킬입니다
이 스킬은 주변에 적이 있는지 확인을 해야 하기때문에 레이케스트를 이용하였습니다.
//Player
if (skill.PlayerSkill == PlayerSkill.Thunder)
{
TRay();
for (int i = 0 ; i < ThinderHitList.Count; i++)
{
Vector2 spawnPoint = ThinderHitList[i].transform.position;
spawnPoint.y += 0.67f;
GameObject clone = Instantiate(TestSkill, spawnPoint, transform.rotation);
SpawnSkill spawn = clone.GetComponent<SpawnSkill>();
if (spawn != null)
{
spawn.StartSkill(skill);
}
}
ThinderHitList.Clear();
playerState = PlayerState.idle;
animator.SetBool("Move", false);
}
private void TRay()
{
int monsterLayer = LayerMask.GetMask("Monster");
RaycastHit2D hit1 = Physics2D.Raycast(transform.position, Vector2.left, 4f, monsterLayer);
RaycastHit2D hit2 = Physics2D.Raycast(transform.position, Vector2.right, 4f, monsterLayer);
Debug.DrawRay(transform.position, Vector2.left * 4f, Color.red);
Debug.DrawRay(transform.position, Vector2.right * 4f, Color.red);
if (hit1.collider != null && hit1.collider.CompareTag("Monster"))
ThinderHitList.Add(hit1.collider.gameObject);
if (hit2.collider != null && hit2.collider.CompareTag("Monster"))
ThinderHitList.Add(hit2.collider.gameObject);
}
//스킬 쪽 StartSkill 스위치 문에 추가
case PlayerSkill.Thunder:
animator.SetTrigger("ThunderStart");
gameObject.transform.localScale = new Vector3(2.0f, 2.0f, 2.0f);
gameObject.GetComponent<BoxCollider2D>().size = new Vector2(1.5f , 1.5f);
gameObject.GetComponent<BoxCollider2D>().enabled = false;
break;
이렇게 추가 하면 레이케스트에 몬스터라는 타입의 오브젝트가 충돌했을때 번개가 떨어지는 스킬이 나갑니다.

'유니티 개발 > 사이드 뷰 게임' 카테고리의 다른 글
| Unity 2D 보스 - 기본 움직임 , 기본 공격 (0) | 2025.07.19 |
|---|---|
| Unity 2D 스킬 쿨 타임 (0) | 2025.07.19 |
| Unity 2D 플레이어 스킬 UI 구현 (0) | 2025.07.18 |
| Unity 2D 게임 UI- 아이템 설명 구현 및 상태 창 구현 (0) | 2025.07.18 |
| Unity 2D 게임 아이템 구현 (0) | 2025.07.18 |