현재 코드엔 캐릭터에게 잡기가 없을 경우의 예외처리가 들어가 있다. GrapplingPunch 혹은 Kick을 검사해서 상태 데이터가 없을 경우 잡기가 실행되지 않는다. 실제로 이 게임을 만들 때 가장 많이 참고했던 스트리트 파이터2에는 잡기가 없는 캐릭터가 있으며, 당시엔 모든 잡기 대응 애니메이션을 만들기 힘들거라 생각해서 몇몇 캐릭터는 Punch나 Kick중 하나를 생략하고 만들 생각이었다.
하지만 이제 그 코드는 필요없게 됐다. 실제로 잡기 대응애니메이션을 만드는 작업이 힘들기는 했다. 하지만 이런 페어 애니메이션은 게임 장르를 막론하고 쉽게 볼 수 있는 것이 아니다 보니, 재미있는 볼거리를 준다는 점에서 무리해서라도 넣는 편이 좋다고 생각됐다. 결과적으로 고생 중이다. 하지만 보람은 있다.
아이시는 정규캐릭터 외 히든 캐릭터이다. 하지만 유저에게나 히든이지, 개발자 입장에선 기존 캐릭터와 똑같은 작업이다. 다만 보너스 캐릭터인만큼 스토리는 없으니, 추후엔 일이 적어지긴 할 것이다.
9.18
유니티에 띄우긴 띄웠는데, 가슴의 리본이 자꾸 파묻힌다.
여차저차 삽질끝에 다이나믹 본까지 세팅완료. 캐릭터 추가는 쉽지 않지만 여기까지 진행되면 이제부턴 애니메이션에 집중할 수 있다.
요래 저래 기본 이동은 완료. 공격을 위해선 얼음을 써야 하는데, 이 부분에 대해선 고민이 좀 필요하다.
9.21
고민 결과 일반 공격은 그냥 일반적인 공격으로 하기로 결정.
맨손격투를 하니 장르가 바뀐 것 같은 느낌.
난 춤은 전혀 모른다. 이런 동작을 Flare라고 한다는 사실도 처음 알았다. 하지만 어쩐지 격겜에서 이 킥을 차는 캐릭터가 꼭 하나씩은 있다. (어려워!)
9.22
맨손을 쓰다보니 팔이 짧다 보니 기본기가 그리 좋지 않아 타이밍을 조금씩 땡겼다.전반적인 딜레이는 스피드 캐릭터인 그레텔과 비슷하지만, 타점은 조금 더 빠르다. 이러면 너무 좋아지니 대신 데미지를 조금 적게 책정할 예정. 그레텔도 조정되어야 하지만, 얘는 더 약할 것이다.
9.23
게임에서 돋보이는 것은 화려한 애니메이션이지만, 사실 애니메이션 제작의 대부분은 그렇지 않은 것들로 이루어진다. 데미지 애니메이션을 만들어 보자.
난 수정작업을 지극히 싫어하는 편이다. 대부분의 경우 들인 시간에 비해 티가 잘 안난다. 어차피 마감 근처가 되면 확인없이 때려박을 리소스. 없는 실력으로 백 번 수정해봤자 뭐 더 나은게 나오겠는가? 차라리 다시 할 일이다. 근본이 잘못된 건 어차피 뭘 해도 안된다. 그런 의미에서 아이시의 머리는 근본이 잘못되어 있었다. 실수였다. 작업할 땐 왜 생각이 안났을까. 포니테일말고 옆으로 묶어야지…모델링은 그렇다쳐도 리깅할 때까지 생각이 안나다니. 이제라도 교정을 해보자.
일단 커브 모델링을 끝내고
모델링을 굳힌 후 매핑을 하고..
본을 심자. 다이나믹 본을 사용할 것이므로 크게 중요한 것은 아니나, 본은 항상 Z축이 바깥을 향해주도록 하는 편이다. 커스텀 본이 공통된 규칙을 가지고 있다면 이를 수동으로 움직일 때 항상 x축을 중심으로 움직이면 모든 본이 펼쳐지는 효과를 얻을 수 있으므로.
생각보다 셰이더 개발이 길어서 글을 새로 팠다. 겉보기엔 단순한 셰이더지만 생각보다 많은 노력이 들어갔다. 그런데 여기까지 개발 후 드는 생각이… 이럴거면 그냥 애디티브 셰이더로 만들면 되지 않나?
라고 생각했지만, 울퉁불퉁한 지형에서는 데칼처럼 붙으니까… 효과가 있긴 있다. 이런 지형이 몇 개 안된다는 것이 문제이긴 하지만… 어쨌거나 이제 배경셰이더에 모두 이걸 붙이자.
color = MelaArea(IN.positionWS.xz, IN.uv.xy, color);
함수화를 해두었기 때문에 마지막 줄에 이처럼 붙여두면 된다. 이번에 새로 알게 된 사실이 여러가지 있는데, 이처럼 여러 배경 셰이더에 같은 기능을 붙일 경우, 글로벌 변수를 사용하면 편하다는 사실이다. Shader.SetGlobalxxx로 변경할 수 있다. 두번째로 이런 글로벌 변수는 함수내에 선언할 수 있다. 함수패키지를 포함시키기만 해두기만 하면 된다.
미러전에서 2개의 영역이 켜질 수 있음을 대비해야 한다.
하지만 초록색이 영 예쁘지가 않아서…그냥 2개가 활성화되어 있을 경우는 특별히 구분하지 않기로 하자.
멜라는 마법사이기 때문에 스킬도 마법의 비중이 높을 예정이다. 그리고 마법은 곧 이펙트이기 때문에 이펙트 작업의 양이 많을 것으로 생각된다. 수수한 옷차림 속에 숨긴 실력자라는 설정이므로 마법은 화려해야 한다.뜻대로 될지는 해봐야 알겠다. 기획부터 해보자
네모난 장풍(Shot) : → A or B, 마법사니까 장풍은 쏴야겠고
공중에서 장풍(ShotAir) : (공중에서) → A or B, 이걸 고우키처럼 공중에서도 쏜다.
죽음의 키스(Kiss) : → K, 상대에게 독이 든 키스를 한다. 라운드가 끝날 때까지 지속데미지
지뢰매설(Mine) : ↑ K, 시간차로 폭발하는 지뢰를 설치하고 상대의 뒤로 가서 발로 공격한다. 역가드
돌격가르기(Slash): ← A or B, 흔한 3연타 돌격기
빛 기둥(Beam) : ↓→B, 초필. 양쪽으로 퍼지는 파워게이저
멜라의 영역(MelaArea) : ↓→K, 초필2. 데미지가 1.5배 되는 필드를 펼친다.
공중대시(RushAir) : (공중에서) →→, 말그대로 공중대시
장풍은 기존의 스킬을 답습한다. 별로 어렵지 않다.
공중장풍은 손볼 게 조금 있긴 했지만 크게 어렵지 않게 구현할 수 있었다. 그런데 공중스킬이 있는 애들은 캔슬 때문에 여러가지 이지선다가 된다. 예상치도 못했던 강점이 생겼다.
공중대시는 크게 메리트가 있다기보단 멜라라는 캐릭터의 상징적인 기술에 가깝다. 어쨌거나 끝판왕이고 처음보는 자에게 위압감을 전달해 주기 위한 기술. 예외처리등이 어려울 줄 알았는데, 의외로 싱겁게 끝났다.
9.2
며칠간 감기때문에 골골거렸다. 다시 시작해 보자.
키스의 설정은 독을 주입하는 것이다. 이를 위해 피부 색이 변해야 한다. 이를 위해 해주어야 할 일이 꽤 있는데,
피부 셰이더의 녹색표현
그리고 셰이더 드라이버가 이를 인지하도록 설정
HP게이지 셰이더의 녹색표현
독 애니메이션 이벤트
실질적인 데미지 처리
하나하나 구현해보자.
먼저 피부가 녹색으로 변할 수 있도록 셰이더를 개조.
독 데미지. 녹색이 너무 강해서 조금 줄였다. 몇가지 예외상황을 처리하고… HP바가 녹색으로 변하는 처리는 취소하고… 의외로 쉽게 완료.
지뢰 깔기…는 실제로 해보니 역가드가 많이 헛갈린다. 공격 성공확률이 높으니 실패 리스크를 늘리자.
9.4
Slash공격은 콤보형이라 막히면 반격맞는다.
대신 성공하면 확정 2타
9.5
빛기둥을 구현하는 도중 문제가 생겼다. 그럴 확률은 적겠지만, 만약 빛기둥을 뚫고 무언가의 공격이 들어온다면 멜라의 스테이트가 데미지로 변하게 된다.
이렇게 되면 공격정보가 스테이트에 묶여있는 현재 구조에선 공격정보가 초기화되며 파워가 0으로 변하게 된다. 타격은 발사체가 일으키지만 정보는 본체에서 얻어오는 기형적인 구조. 이를 해결하기 위해선 발사체 코드 전체를 리팩토링하는 수밖에 없다. 지금까지는 히트 구조체와 이펙트용 구조체를 반반 섞어서 혼종으로 사용하고 있었는데, 이를 발사체 구조체로 일원화하고, 생성 시 모든 정보를 넘겨주는 쪽으로 변경했다. 생각해보면 당연한 일인데 왜 이렇게 하지 않았을까.(…라지만 여전히 스테이트는 구조체레벨이 아니라 개별변수기반으로 관리되고 있다. 다음엔 이렇게 하지 말아야지…)
어쨌거나 너무 늦지 않게 끝나서 다행이다. 힘든 작업이었지만 편히 잠들 수 있겠다!
9.6
이제 마지막 스킬만을 남겨두고 있다. 멜라의 영역은 돔형의 영역을 설정한다. 일단 보기 좋으려고 돔형을 택하긴 했는데, 제작하다 보니 고민이 많다. 일단 캐릭터가 영역내에 속해있는지 알기가 힘들다. 둘째, 셰이더를 만들기가 까다롭다. 뭐 셰이더야 시간을 들이면 완성은 된다지만, 첫번째 이유 때문에 만들어놓은 결과물이 그렇게 좋은 결과물일 것이라 단정짓기가 힘들다. 초안대로 배경셰이더를 개조해보기로 할까
초안은 배경 셰이더를 반전시켜 사용하는 것이었는데, 포토샵에서 대충 합성해봐도 이건 쓸만한 게 못될 것 같다.어두운 배경의 경우 너무 밝게 표현된다.
흑백은 어떨까…분위기가 괜찮기는 한데, 티가 잘 안난다. 고민이 좀 더 필요하다.
고민 끝에 다시 돔형으로… 그런데 예상치 못한 문제가… ZTest를 안하니 뒷배경이 뚫린다. 그렇다고 ZTest를 하자니 캐릭터가 짤린다.
이를 제어할 수는 있다… 있긴 한데, 영 내키지가 않는 작업. 이를 위해선 셰이더 드로우 순서를 정렬해주어야 하는데, 오파쿠 스러운 놈을 AlphaTest보다 나중에 그리는 것이 영 마음에 들지 않는다.
그래서 적용해 본 배경 선긋기. 이건 퀄리티가 영…
9.7
돔형의 영역은 또한 Transparent머티리얼과도 충돌을 일으킨다. 그렇다면 이걸 또 Transparent로 처리해야 하는데, 이렇게 되면 일이 너무 커진다. 차라리 큐제어를 제외하고 배경을 흑백처리 해보는 게 어떨까.
…? 뭐지 난 이런 처리를 한 적이 없는데…꽤 멋진 연출이 됐다. 아웃라인의 ZTest를 Always로 해놓았기 때문에 발생하는 버그이다. 언젠가 사용할 일이 있을지도.
이렇게 초안이 완성되었다. 구형의 마스크는 Distance보단 Dot으로 구하는 것이 성능상 잇점이 있다. 어차피 셰이더에서 정확한 거리를 잴 일이 많지 않으므로 정규화된 숫자로 계산을 하는 편이 빠르다.
구현을 하다보니 HP바와 또 충돌한다. 그러다보니 표현이 자유로운 건 바닥 뿐이다. 이 방법이 최선이려나.
데미지 애니메이션 작업기간이다. 데미지 애니메이션은 점차 증가해서 지금은 공격보다 더 많은 분량을 차지한다.
캐릭터가 추가될 때마다 이에 대응되는 잡기 애니메이션의 갯수 또한 늘어나기 때문에, 이후로는 정말로 큰 부담이 된다. 배틀퀸의 캐릭터를 더 이상 늘릴 계획이 없는 이유이기도 하다.
오로라의 발목잡기 스킬의 충돌영역이 제대로 지정되지 않은 상태였다. 히트가 일어나야 다음 스킬로 연계할 수 있는데, 이 판정이 취약한 문제가 있었다… 지금까지 왜 몰랐었지…!
멜라의 대기자세가 발을 모으고 있는 형태라 오로라는 더 많은 거리를 전진해야 히트할 수 있다. 판정은 실제 자세에 기반해서 일어난다. 즉, 달래나 리그레이처럼 대기자세가 한 쪽 발을 앞으로 내밀고 있는 경우라면 더 쉽게 잡을 수 있다. 멜라는 이때문에 판정면에서 조금 유리한데, 이 때문에 잘 잡히지 않는 현상이 있었다.
8.26
아휴..안끝나는 세컨더리 애니메이션. 저렇게 뚫린 부분은 다이나믹본이 제대로 처리하지 못하기 때문에, 수동으로 잡아주어야 한다.
본래 세컨더리 애니메이션은 본 애니메이션이 끝난다음 작업하는 것이 원칙이다. 실제 작업할 때와 게임에 넣었을 때의 느낌이 다르기 때문에, 확정되기 전까진 모든 작업이 재작업이 될 수 있기 때문이다. 하지만 잡히기 모션같은 경우는 모든 애니메이션이 확정된 상태이기 때문에 작업을 해도 상관이 없다. 그런데 이 모션이 워낙 많다보니 작업이 지루하다. 매우 지루하다… 이런 걸 기계한테 맡길 수 있으면 좋으련만.
8.28
승리포즈. “에이씨, 더럽게…”
잡기1번.
잡기 2번.밟자.
8.30
캐릭터 선택, 인트로…이렇게 해서 기본모션은 완료.하지만 멜라는 마법사이기 때문에 이펙트 작업이 많을 것으로 예상된다.
드디어 끝판왕까지 왔다. Idle은 닐리와 좀 비슷한 감이 있는데, 예쁜 것 같으므로 그냥 진행하기로 하자.
8.17
아내는 끝판왕치곤 멜라가 수수한 모습이라고 했다. 사실 멜라의 수수함은 의도한 것이다. 그녀는 신에게 도전하기 위해 힘이 필요했고, 이를 얻기 위해 모두를 속이는 전략을 취한다. 그리고 아들은 얘는 왜 면봉을 들고 있냐고 했다. 그러게 말이다.
8.19
멜라는 컨셉을 확실히 하지 않은 채 작업에 진입했다. 이럴 경우 대부분의 작업은 삽질이 되기에 먼저 생각을 정리하는 편이 좋다. 일단은 마법사이니 지팡이로 마법을 사용하는 건 알겠는데, 일반 공격은 어떻게 처리할까? 불이나 전기를 쓰기엔 일반공격에 이펙트가 붙어서 너무 OP같아 보인다. 끝판왕이니 어느 정도 강인함은 표현되어야 하나, 닐리가 그랬듯, 일반 공격은 물리력이면 좋겠다.
그래서 지팡이의 구슬이 여러형태로 변하는 방식으로 디자인하도록 하자. 일반 공격은 언월도나 창처럼 사용하고 방어시엔 사용자를 감싸는 포스필드를 생성한다. 그렇다면 구슬의 셰이더가 별도로 처리되어야 한다. 본도 새로이 필요하다. 일이 꽤 복잡하지만, 하나하나 처리하다보면 결국 끝난다. 커피를 마신 후 차근차근 진행해 보자.
중요한 건 게임이니 자세한 비주얼은 게임에 적용한 후에 살펴보기로 하고, 블렌더에서는 컨트롤러를 통한 작동여부만 판단하면 된다. 간단하게 머티리얼을 만들고, 드라이버를 연결하고, 컨트롤러를 만들어 붙인다.
지금 와서 생각해보건데, 셰이더 드라이버를 공용으로 쓸 게 아니라 캐릭터마다 다르게 주는 편이 좋지 않았을까 싶기도 하다.
이제 애니메이션과 조합하면 이렇게 된다.
광선검도 미리 만들어놓자.
유니티에서 셰이더를 만들고,
마법쓸 때 보석이 빛나야 하니 보석 셰이더도 필요하다. 하지만 기본적으로 보석상태에서 빛나야 하는 것이고, 이미시브가 그렇게 무겁지는 않으니 맷캡에 추가 셰이더코드를 붙이자.
해서 비로소 완성된 작업. 워낙 순식간인데다 방어할 때 빼곤 사용하지 않지만, 이렇게 각잡고 만들어 두지 않으면 작업기간 내내 거슬린다. 결과적으로 이러한 기분은 작업을 하기 싫게 만들기 때문에, 충분히 시간을 들여 원하는 퀄리티를 얻는 편이 장기적으로 좋다.
FlipKick은 3지선다의 애니메이션이므로 체인으로 연결되는 3개의 애니메이션이 필요하다. 플립킥 자체는 점프공격이므로 서서 막아야 하고, 나머지는 모두 상단,하단이라 그냥 앉아서 막으면 안전하다.
사실 이 기술은 프리오리를 만들 때부터 고민해왔던 기술이다. 이 기술이 어울릴만하려면 양손에 비교적 가벼운 무기를 들고 있어야 하는데, 원래 그레텔에게 주려고 했으나 다리가 짧아서(!) 그렇게 효율적이지 않았다. 프리오리와 도레미는 무기때문에 탈락, 벨과 비네트는 어쩐지 컨셉과 어울리지 않는 것 같고… 여름이를 제작할 때쯤엔 그냥 존재 자체를 잊고 있었다. 지금이라도 생각나서 다행이랄까.
A로 연결되는 꿀밤때리기.
이제 절반 완료.
제노사이드 캇타!
8.12
스킬을 처음 구현하면 엉망진창이다. 절대로 한 번에 제대로 나오는 적이 없다. 캐릭터는 제 멋대로 움직이고, 이펙트는 엉뚱한 곳에서 터지며, 콘솔창은 툭하면 에러를 뱉는다. 이를 원하는 모양새가 되도록 다듬고 다듬으면 마침내 제대로 된 결과물이 나오는데, 이게 참 재미있다.
공중잡기. 나뭇잎 마을의 연화. 원래 기획은 이게 아니었지만, 빵을 사러 가는 길에 문득 생각났다. 순전히 우연으로부터 괜찮은 결과를 얻는 걸 세렌디피티 효과라고 한다. 난 이 말을 참 좋아하는 편이다.
이제 초필 제작. 앨리스는 이제 촉수에게 잡혀야 한다. 이거 오로라에게 적용하면 키가 맞으려나…
8.14
초필에서 사용할 차원의 원은 단순히 셰이더의 파라메터를 0에서 1로 바꾸는 것만으로는 충분하지 않다. 생성과 소멸이 모두 필요하고, 심지어 애니메이션까지 제어된다. 기존의 스크립트를 개조하는 것이 좋겠다.
아휴.. 무슨 발사체가 FSM이 이래 복잡해.
그리고 새로운 애니메이션들을 익스포트해주고, 이펙트를 등록해주고, 애니메이션 이벤트를 심고, 스크립트에 초필을 등록하고…
페어 애니메이션도 어려운데, 이건 무려 3개의 리그가 합을 맞춰 재생해야 한다. 난이도가 꽤 높았던 작업. 하지만 결국 완성!