5.24

먼저 기존의 이펙트를 조금 손보아야 한다. 먼지 이펙트는 지금까지 무언가 2%부족한 느낌이 있어서 바닥과의 연결부가 되는 이펙트를 추가하자. 원래는 캐릭터처럼 뒤쪽에 그림자를 뿌려볼 생각이었는데, 파티클이 머티리얼을 1개밖에 받지 못한다. 그래서 셰이더를 개조해 한 번에 2번을 그릴 수 있는 2pass셰이더로 만들었더니, 이번엔 또 두번째 패스에서 커스텀 데이터를 받지 못한다. 옘병!
별 수 없이 아랫부분에 그림자스러운 그라데이션을 약간 주고, 점프할 때 ‘팟!’하는 느낌의 쇼크이펙트를 추가하자. 이것은 시간으로 따지면 0.2초 정도 되는데, 이 짧은 순간의 유무가 완성도에 상당한 영향을 끼친다.
그리고 이 결론을 얻기까지 저녁 작업 시간을 모두 할애했다….나머지는 내일

스샷찍고 나니 위치가 좀 안맞는다…

이제 먼지는 된 것 같고,

파티클은 좀 더 작은 입자를 추가.
기존 작업 수정은 끝났고, 해야 할 것들에 대해서 정리해 보자.
공용 이펙트:
- Grappling – 잡았을 때.
- DustDamageSlam – 내리꽂기 공격을 당했을 때. (돌이 튀어야 한다.)
- DamagePush – 데미지를 받고 크게 밀릴 때
- Block – 방어했을 때
앨리스 이펙트
- AliceCrouchKickDust – 둥글게 땅을 훑는 스타일의 먼지
- AliceCrouchPunchHeavyDust
- AliceTripleAttack_Dust_01
- AliceTripleAttack_Dust_02 : 01과 같은데 좀 더 길다.
- AliceUpperSlash
- AliceStomp
- AliceBash
그런데 이펙트의 위치를 어떻게 잡을 것인가? 결국은 데이터가 필요하다. 먼저 애니메이션 이벤트리스너에 Effect()를 추가하고, 여기에 데이터문자열을 건네준다. 데이터는 스트링과 구조체의 딕셔너리로 이루어진다.
effectData["SuperAttack"] = new EffectDataStruct{
prefabString = "SuperAttack",
followCharacterDirection = true,
};
effectData["DustLanding"] = new EffectDataStruct{
prefabString = "DustLanding",
};
쓰고 나니 현재 열거형으로 사용하고 있는 State도 딕셔너리로 처리하면 편하지 않았을까. 싶긴 한데, 속도면에선 그냥 열거형에 접근하는 쪽이 아무래도 빠를 것 같다. (업데이트에서 정말 뻔질나게 찾으니까…)

이로서 애니메이션 이벤트에서 이펙트를 부를 수 있게 됐다. 이걸 위해 흩어져 있던 이펙트코드를 한 데 모아 처리하는 정리작업을 병행했다. 그 와중에 버그가 있어 그걸 추적하느라 시간이 좀 더 걸렸다.
5.26
잡기이펙트는 순간 삐죽한 웨이브가 둥글게 회전하는 형태로 만들고 싶다. 이를 구현하려면 먼저 셰이더를 개발해야 한다.

대강 이런 느낌이다. 파티클에 입히자.

적용하기 위해선 코드를 수정해야 한다.

..가 버그를 안내려면 데이터를 등록해야 한다.

…를 정확한 위치에 뿌리려면 본의 위치를 참조해야 하므로 애니메이션을 수정해서 다시 익스포트를 해준다.


이제 적용됐다. 하루가 다 갔다. 아이고.
5.27
글 제목은 ‘앨리스의 이펙트’인데 아직도 공용이펙트만 작업중이다. 그런데 앨리스는 늘 그랬다. 그래서 가장 애정이 가는 캐릭터이기도 하다.
이제 내리 꽂혔을 때의 데미지 이펙트를 만들어보자. 땅이 갈라지며 조금 튀어나오면 좋겠다. 파티클로 사용하기 위해 치즈조각을 하나 모델링하자.

갈라지는 지형은 배경마다 다르다. 이를 위해 바닥과 지층을 구분해 칠할 것이다. 잠깐 나오고 사라질 애니까 텍스처까지는 좀 거하고 버텍스 컬러를 써서 구분하도록 하자.

이제 여기에 사용할 셰이더를 만들어주자. 솔리드 셰이더를 간단하게 축소하면 될 것이다.

여기저기 각이 져서 간단히 NdotL만 해도 예쁘다.

그렇게 완성된 이미지. 이 이펙트는 맞은 직후가 아니라, 맞고 나서 2프레임 후에 출력되어야 하기에 이와 관련된 코드작업을 병행했다. 하지만 새로운 문제가 발견됐다. 프레임이 안맞아! 맞는 순간 1프레임이 먼저 재생된다.
이제 와서 이를 해결하기 위해선 약간의 비효율을 감수해야 한다. 하지만 대충 하자.

먼지와 암석의 색깔등은 스테이지마다 달라야 한다. 이를 위해 데이터 베이스를 구축해야 한다. 원래는 좀 더 후반작업으로 생각하고 있었는데, 셰이더가 많아지면서 더 늦추면 안되겠다는 생각이 들었다.