PlayerMove에 모든 속성이 뭉쳐있고 자식 게임 오브젝트로 붙어있는 객체들이 그걸 직접 수정하게 만든 극한의 스파게티코드라 어디서부터 물어봐야할지 감이 안온다..
플래이어 본체에 cooltime, curCooltime, 스킬가능여부, 스킬시도여부 등등 필요한 모든 속성을 집어넣고,
그것을 자식 오브젝트로 달아놓은 FSM객체에서 직접 플래이어 본체의 속성에 접근해서 수정하는 상황임
그래서 스킬을 추가하려면, 플래이어 본체에 스킬에 대한 속성을 추가하고, FSM 행동에 대한 스크립트를 새로운 클래스로 만들어야함.
이런 상황에서 스킬 슬롯을 만들어서 사용자가 스킬의 위치를 자유롭게 변경이 가능하도록 기능을 추가하고 싶음
어떻게든 구현하고자 하면 될 것 같긴 한데, 스킬 하나 추가하려면 여러 군데를 수정해야 될 것 같아서 심적으로 섣불리 손이 가질 않는 상황인데 어떻게 하지?
일단 스킬의 본질부터 명확히 하셈. 그다음에는 게임의 요구사항에 따라 스킬 구현방식은 다르게 감
스킬의 본질이라는게 스킬이 플래이어 위치, 스프라이트, 이펙트, 버프 등 어디까지 영향을 끼치는지에 대한 이야기 맞지?
너가 만드는 게임에서 스킬이 뭔지를 모르는데, 난 모르지 근데 보통 던파같은 액션게임에서의 스킬이라고 한다면 스킬은 발동조건(if문),발동시 수행되어야 할 액션들(함수들), 이라고 할 수 있겠지. FSM으로 따지면 발동조건은 상태전이고, 액션들은 그 상태안에서 수행되는 함수들인거고. 걷기도 스킬일 수 있지. 발동조건이 방향키, 액션들은 좌표이동 + 걷기애니메이션재생 거너의 화염방사기는, 발동조건:W키 + 스킬슬롯1번쿨타임 0일때, 액션은 다른키입력 막기+화염방사애니+히트박스 온 일거고
그래서 보통 일반공격도 스킬로 구현되는 경우가 많음. 쿨타임같은 조건이 없는 스킬인거지 대기, 이동, 점프, 사망 같은 상태는 하드코딩 하는경우도 많고, 근데 뮤겐의 cns 스크립트 보면 거의 모든 상태가 다 그냥 스크립트로 구현되어 있음 한번 보는걸 추천. 방법은 무궁무진함
나도 일반 공격 스킬로 구현했슴. 그저 쿨타임 짧고 코스트 없는 스킬인
바리공주 스크립트는 봤어도 무겐은 생각 못햇내, ㄳㄳ
애초에 초기 설계부터 스킬를 고려하지 않았으면 뜯어고쳐야지
계획하기 어려워서 일단 구현부터 했는데, 아직도 감이 안옴
플레이어에 모놀리식으로 프로퍼티 때려박지 말고 컴포지션으로 스킬관련 프로퍼티는 분리하셈 구현도 그렇고. FSM은 뭐 흔하게 쓰는 그런 거 같은데 그냥 갖다버리는 걸 추천함 - dc App
FSM을 버리는거는 나중에 좋은 방안 생각나면 고려해볼게. 근데 단순히 프로퍼티만 지닌 객체를 추가하는 것은 구조적으로 더 괜찮을까? 본체, 조작 객체(FSM)에서 프로퍼티 객체가 추가되어, 기존의 조작 객체가 프로퍼티 객체의 프로퍼티에 접근해서 조작하는 걸 생각하고있는데
오브젝트가 캐릭터 변수를 직접 건드린다고해도 딱히 잘못된건 아님 캡슐화만해두면 문제없지 보통 raw 변수는 프라이빗으로 잠궈두고 SetHealth(float NewHealth) 이런식으로 타고 들어갈거아냐 그럼 Setter함수의 Usage 뷰어만 보면 어디서 들어오는지는 다 디버깅이 가능하고 델리게이트 하나 만들어두면 UI도 지가 알아서 참조해서 업데이트함
모든건 오브젝트 스스로 한다 디펜던시가 한쪽으로만 흐르게 만든다가 내가 선호하는 방식인데 캐릭터는 상황에 맞춰서 연기만 할뿐 스킬이 뭔지 몰라도 됌 왜냐면 스킬 스스로 알아서 이펙트 뿌리고 대미지 구현하고 캐릭터 스탯에 영향을 주는 버프같은경우도 자기가 알아서함 스탯효과같은것도 캐릭터에 배열하나 만들고 구조체로 던져주면 몇개가 중첩되던 상관없이 공격을 하면 알아서 나가는 방식임
이렇게 하는 이유는 스케일러블임 스킬위치 바꾸는것도 그렇고 스킬이 10개든 100개든 얼마든지 만들어도 부담이 없지 이걸 캐릭터나 스킬매니저안에 다 구현한다고 생각하면 뭐 하나바꿀때마다 수천줄을 뜯어봐야됌 물론 극한의 최적화만 생각한다면 매니저도 필요없이 1개파일에 다 때려박는게 더 좋음
프로퍼티를 막 쓰면 추적이 가능해도 뭔가 커플링이 되서 안 좋을 것 같음. 근데 막상 더 좋은 방안은 생각이 안나내
새로운 스킬 추가와 FSM이 엮여있는 게 비효율적인 것 같아 둘은 서로 영향받지 않도록 만들 수 있지 않나? 스킬 슬롯 위치 수정도 UI 관리자가 해야할 일 같은데 서로의 변화에 영향 받지 않고 자기 일만 수행할 수 있도록 만드는 게 좋을듯..
엘소드마냥 스킬마다 정해진 움직임을 하는 것이 아니라 FSM을 분리시키는 것은 쉽지 않을 것같아. 그래도 한번 생각해볼게