ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 내일배움캠프 61일차 TIL - 최종 프로젝트 개발 진행 6
    TIL/Unity 2024. 7. 12. 23:29

     

    [한 줄 요약]

    스킬 퀵슬롯 기능을 완성하고 스킬에 여러 기능을 추가하였다.


    [학습 내용]

     

    최종 프로젝트 기초 개발


    스킬 퀵슬롯 발전

    마을 씬에서 퀵슬롯 비활성화

    마을 씬에서는 스킬을 사용할 수 없도록 퀵슬롯 버튼을 비활성화하였다.

     

    퀵슬롯 등록 패널 제작

    퀵슬롯에 스킬을 등록하기 위해 어떤 슬롯에 장착할지 물어보는 패널을 추가하였다.

    퀵슬롯 등록용 패널 제작

     

    동일 스킬 수 하나로 제한

    동일한 스킬을 여럿 장착할 수 없도록 제한을 두었다. 이미 장착되어 있는 스킬의 경우 위치를 옮겨주도록 구현하였다.

    중복 장착이 안 되는 모습

     

    퀵슬롯 - 스킬 간 연결

    등록을 구현한 뒤 퀵슬롯을 눌러 스킬이 사용되도록 구현하였다.


    !! 문제 발생 !!

     

    * 내용

    짜놓은 코드 구조 상 스킬 데이터로 스킬 객체를 생성해야 하는 상황이었다. 그런데 스킬 클래스는 추상 클래스로 되어있고, 상황에 맞는 스킬 자식 클래스들의 객체를 생성해야 했다. 어떤 자식 클래스를 생성할지는 이전에 스킬 데이터에 클래스 이름을 넣어놨기 때문에 알 수 있었다. 그런데 클래스 이름으로 객체를 생성하는 법을 알고 있지 않았기 때문에 생성할 수 없었다.

     

    * 탐색

    일단 구글링을 했다. 간단하게 클래스 이름으로 객체 생성하는 법을 검색하자 게시글이 나왔다. 그런데 얼마 전에 면접 준비를 하면서 보았던 reflection이라는 개념이 나왔다. 그래서 다행히 어렵지 않게 이해할 수 있었다.

     

    * 해결

    reflection을 이용하여 런타임 전에 클래스 이름으로 객체를 생성할 수 있었다. 코드는 아래와 같다.

    // 스킬 데이터로 스킬 객체 생성
    public Skill ConvertSkillDataToSkill(SkillData skillData)
    {
        Assembly creator = Assembly.GetExecutingAssembly();
        object skill = creator.CreateInstance(skillData.ClassName);
        return skill as Skill;
    }

     

    퀵슬롯으로 스킬이 잘 생성되는 모습


     

    스킬이 등록되지 않을 경우 비활성화

    이 외에 퀵슬롯에 스킬이 장착되어 있지 않은 경우 버튼 클릭을 비활성화하여 사용할 수 없게 하였다.

     

    스킬 발전

    스킬 사용 모션

    스킬을 시전할 때 공격 중을 나타내는 IsAttacking 함수를 true로 바꿔 공격 모션 애니메이션이 출력되도록 하였다. 그리고 애니메이션 이벤트로 애니메이션이 끝나고 효과가 적용되면 false로 만들어 다시 움직일 수 있게 구현하였다.

    스킬 사용 모션

     

    스킬 사거리 제한

    이전에 스킬 데이터에 넣어둔 스킬 사거리를 활용하여 몬스터와의 거리가 일정 이상 가까워졌을 때만 스킬을 사용할 수 있게 하였다. 버프형 스킬은 스킬 사거리를 따지지 않는다.

    스킬 사거리에 닿자 파이어 익스플로전이 사용된다

     

    쿨타임 구현

    스킬을 사용한 후에 다시 사용할 수 없도록 쿨타임을 구현하였다. 그리고 퀵슬롯에 타이머를 추가하여 시각적으로 플레이어가 남은 재사용 대기시간을 알 수 있도록 하였다.

    쿨타임 구현

     

    버그 수정

    자신에게 공격 스킬 사용 버그

    자신에게 공격 스킬을 사용할 수 있던 버그를 수정하였다.

     

    기타

    9-슬라이스 사용

    패널에 사용할 이미지를 구했으나, 옆으로 늘리자 테두리 선도 같이 늘어나는 현상이 생겼다. 마침 어제 UI 특강을 들었기 때문에 9-슬라이스가 떠올라, 실제로 적용해보았다.

    테두리를 표시해주는 모습

     

    그랬더니 테두리가 늘어나지 않고 자연스럽게 패널이 확장되었다.


    [회고]

    한 주를 돌아보니, 우선 계획했던 것보다는 진도가 빨리 나간 거 같다. 그런데 아직 구현해야 할 것들이 많이 남았기 때문에 방심하면 안 되겠다.

    오늘까지 해서 어느 정도 스킬과 퀵슬롯은 완성되었다. 조금 디테일을 더 하면 될 거 같다.

    주말부터 해서 앞으로 구현해야 할 사항들로는,

    • 스킬리스트 스킬 잠금 기능
    • 몬스터 사망 시 스킬 애니메이션 후처리
    • 스킬에 오브젝트풀을 사용하는 것을 고려

    등이 있다.

    이후에는 스킬을 잠시 접어두고 다른 부분에 집중해야 할 거 같다.