제목 보고 말도 안되는 소리란걸 분명 알았을거다.
그도 그럴게 하스스톤만 해도 한 확장팩에 카드가 100장씩 나오는데 그걸 다 따로 만들어주는게 말이 되냐.
나는 지금 카오스 아카데미에 하스스톤과 슬더슬을 섞은 짬통 게임을 혼자서 개발하고 있음. (엔진은 유니티 2D)
아직 공부하면서 만드는 중이라 구조 설계하는 실력이 많이 미숙해서 다른 사람들은 어떻게 생각하는지 궁금해서 찾아옴.
제목에서 보았듯 카드마다 클래스를 따로 둬야 하냐는게 질문인데, 굉장히 미련한 행동인걸 알지만 이런 상황까지 오게 된 이유는
현재 카드의 기본적인 기능을 수행(뽑힘, 만져짐, 사용됨)하는 Card_Basic 클래스를 만들어 뒀고, 다른 모든 카드들은 이 Card_Basic을 상속받음.
Card_Basic 안에는 아무것도 안하는 Activate() 가상 함수가 있는데, 여기에 카드 사용 시 발생되는 이벤트 코드가 들어감.
따라서 Card_Basic을 상속받으면서 Activate()를 오버라이딩하여 원하는 이벤트를 발생시키는 클래스를 만들 수 있음.
처음엔 비슷한 기능을 하는 카드끼리 모아서 클래스를 만듦. (단순 딜링 카드, 하수인 소환 카드, 드로우 카드...)
그런데 이런 식으로 만드니까 다양한 효과를 조합한 카드를 만들려면 새로운 클래스를 또 만들어줘야됨. (딜링+드로우 클래스, 하수인소환+버프 클래스..)
효과가 많아질수록 다양한 조합이 나올테니 기하급수적으로 클래스가 증가해야할 판.
그렇다고 스크립트를 여러 개 넣으면 꼬일 수도 있고, 이상적인건 다양한 이벤트를 발생시키는 함수들을 이벤트 매니저에 미리 만들어 놓은 다음, 인스펙터를 통해 레고 블록처럼 필요한 이벤트만 뽑아서 딱딱 조립하고 싶은데, 생각보다 너무 어렵다.
카드는 자기가 발생 시킬 이벤트 정보를 이벤트 매니저에 보내기만 하면 이벤트 매니저가 해당 이벤트를 발생시키고, 나는 인스펙터 창에서 이벤트 정보만 명령어처럼 string으로 입력해주는거야. 이러면 코드 하나로 돌려막기 하면서, 나중에 사람 구해서 협업할 때에도 보다 편하게 할 수 있지 않을까 싶어.
혹시 카드게임 만들어본 사람 있으면 어떻게 만들었는지 공유 해줄 수 있으면 고맙겠다.
기능들이 구현된 부모 클래스를 상속 받아서 조합해 만들지 않을까? 아무리 특별한 카드여도 공통적인 기능은 있을테니까
그 CardBasic이 내가 만든 SkillBase랑 같은 역할 같은데.. CardBasic에 메서드들을 만들면 될 것 같음 특별한 경우에만 자식 클래스 내부에서 만들고 그 외엔 다 오버라이딩
카드 게임은 아니지만 SkillBase에 스킬 액티베이트, 타이머(이건 참조만), 범위 공격, 단일 공격, 디버프, 버프, 시전 파티클 재생, 적중 시 파티클 재생, 풀링 할당, 인디케이터, 범위 표시 기즈모 등등.. 여러 기본 기능들이 모여있음. 레이저처럼 저 모든 기능과 별개인 경우멘 새로 클래스 파고. 구현 방법 자체는 비슷하지 싶은데
윗댓처럼 카드별로 클래스를 짜지 말고 기능별로 클래스를 짜고 각 카드들이 필요한 기능을 가지고 있는 식으로 짜면 될거임
카드를 통으로 클레스를 만드는게 아니라 카드 효과를 따로 클레스로 만들어서 카드에 배열로 저장하면 여러효과 만들 수 있음. 근데 이러면 결국 틀에 박힌 카드효과만 나오고 좀 특별한 효과들 여러게 추가하다보면 카드마다 하나하나 클레스로 만드는것과 별 다를게 없다는 문제에 도달함
저도 그걸 우려해서 아주 기본적인 기능들만 만들어두고 어지간한 건 클래스 새로 만들려고 함..
+
비밀번호에 오타가 났는지 글 수정이 안되어서 여기다 올립니다. 클래스가 많아지는게 꺼려져서 다른 방법을 찾아보려 했는데, 결국 클래스가 많아 지는건 어쩔 수 없네요. 답도 안나오면서 머리만 아프게 고민하지 말고 하던 대로 해야겠습니다. 다만 새로운 효과를 가진 카드가 그렇게 많진 않을거라서, 기본적으로 기능 단위 클래스 생성 후 조합하여 사용하는 식으로 해보겠습니다. 모두들 답변해주셔서 감사합니다.
카드 클래스 쪼개지말고 모든걸 시스템화해난 상속 비추한다아래 구조를 끝까지 가져가면 나중에 후회 안함그리고 카드와 카드 정의를 구분해놓기 바람카드_정의 {태그[]효과[]추가로필요한거[]}카드 {카드_정의 data;...} - dc App
댓글 줄바꿈 없어지는거 킹받네 알아서 줄바꿈해서 보셈 - dc App
상속을 비추하는 이유를 자세히 알 수 있을까여?
카드 내부시스템으로 들어있는건 얼마든지 수정해도 되지만 상속한 뒤에 부모 수정하는순간 자식 수만큼 고통이 곱해져서 닥쳐온다.. - dc App
음 그런 놈은 따로 빼서 구현하는게 맞는듯
슬더스랑 비슷한 게임 "로라라라:선택의 탑"이라는거 만들었음. 정확히 말하면 카드게임은 아니지만, 본문에 언급된거랑 같은 이슈를 공유하고있음. 나는 모든 유물, 효과, 스킬을 전부 다른 클래스로 만들었고, 클래스 갯수 1000개 가까이 됨. 모바일 게임인데도 구형폰에서 CPU쪽은 최적화 문제 없이 잘 돌아감. 마이크로 최적화를 위해 sealed 문구나 하나 붙입시다.
클래스가 많아지는 것을 두려워하지 마라
나도 비슷한 거 만드는데, 전부 다른 클래스로 나누고 있어!