앨리스의 잡기

2.23

공중에서 점프해서 캐릭터끼리 맞닿을 시에 덜덜거리는 현상이 있다. 이것을 추적하기 위해 코드를 살피던 중, 충돌코드에서 유니티가 기본적으로 제공중인 Intersect()를 쓰는 코드를 발견했다. 오래 전에 이것이 다리의 충돌검사를 제대로 하지 못한데다, 불필요한 연산이 들어가 있어서 직접제작한 걸로 바꿨는데 공교롭게도 이것이 캐릭터를 뛰어넘을 때 도움이 되고 있었다. 연산을 제대로 하니 다리 충돌이 걸려 캐릭터를 못뛰어넘는다.

이론적으로 접근하자면 물론 충돌 박스가 작게 수정되는 것이 맞다.그런데, 가만… 충돌에 한해서 다리를 빼는 것이 더 괜찮은 플레이경험을 제공한다면, 그 쪽이 낫지 않을까?

foreach (BoxCollider2D player1Collider in player1FSM.bodyColliders)
{
if(player1Collider.name.Contains("leg")) continue;

foreach (BoxCollider2D player2Collider in player2FSM.bodyColliders)
{
if(player2Collider.name.Contains("leg")) continue;

이제 뛰어넘을 수 있다.

앨리스는 늘 그래왔다. 언제나 첫작업으로 쓰였기 때문에 많은 시행착오를 거쳐 완성하곤 했다. 이번에도 그러고 있다. 잡기 첫모션 제작 중. 오늘은 여기까지

2.24

잡기 1번은 완료. 방향키+강펀치로 발동한다. 어느 쪽으로 집어던질 지 결정할 수 있다.

2번의 구상은 좀 복잡하다. 한 팔로 멱살을 끌어당긴 후, 균형을 잃은 상대의 등 혹은 뒤통수를 돌아서 발로 차서 넘어뜨리고 등을 찌른다. 복잡하다! 구상대로 잘 될까… 이 작업만 며칠 걸릴 지도 모르겠다.

타이밍은 대충 이렇다. 이제 디테일 파보자….지만 오늘은 여기까지인가.

2.25

오늘의 깨달음. FK-IK를 오가는 애니메이션을 할 때엔 겹키를 주는 것보단, 그냥 해당키에서 각각 FK/IK스위치를 한 번씩 해주는 것이 더 효과적이다. 이렇게 되면 각각의 컨트롤러가 알맞게 보간되어 알아서 부드러운 애니메이션이 된다. 맥스-바이패드의 Plant Key를 사용하던 버릇 때문에 지금까지 겹키를 주는 방식을 택하고 있었는데 블렌더에서는 그럴 필요가 없을 듯? 확실히 적응하니 더 편하다.

..지만 그렇다고 하더라도 점프직후의 까치발을 위해선 겹키를 주어야 한다. 음.. 뭐 그렇다고 해도 이 정도면 품이 많이 드는 것이 아니라 괜찮다.

캐릭터 2명은 뷰포트에서는 꽤 느려서 풀 프레임으로 재생할 수가 없다. 때문에 솔리드 모드에서 전체 모션을 확인해야 한다. 오늘은 여기까지.

2.26

칼로 등을 찌르는 모션을 구현하기 위해서는 몇 가지 단계가 필요하다. 애초에 염두에 두긴 했으나 생각보다 더 귀찮은 작업인 것 같다. 먼저, 피격자가 등을 차인 후 앞으로 쓰러지는 모션은 분리해 제작되어야 한다. 이는 몇몇 기술이 머리를 쳐서 바닥에 처박힐 때 공용으로 사용될 것이다. (KOF의 료가 사용하는 수박깨기처럼) 그렇다면 필연적으로 일어나는 모션이 추가된다. 이를 DamageSlam, GetUpSlam으로 제작한다.

그 후엔 앨리스의 잡기 피격 모션으로 복사해서 이식해서 다른 모션과 이어지도록 제작해야 한다. 발차기 이후의 스테이트를 따로 쓸 수도 있겠으나, 그 어떤 게임적 요인으로 인해 위치가 정확하지 않을 가능성이 있다.

또한 화면 끝에서 기술을 사용할 경우, 발차기를 하는 순간에 필요한 거리만큼 밖으로 빼내주어야 한다. 잡기 세트 모션중에는 충돌체크를 하지 않기 때문에, 수동으로 밀어주어야 하는 것이다. 이 때 밀어주는 거리는 어느 정도 정형화되는 편이 좋다. 안그러면 위치가 튈테니까.

마지막으로 모든 세트 모션이 끝난 후, 제자리에 다시 독립된 개체로 누워있을 수 있도록 피격자의 위치를 교정해주어야 한다. 하지만 이 때까지도 피격자는 Caught모션일 것이다. 잡기는 타격자가 먼저 활동이 가능해지기 때문에 충돌 무시 플래그를 피격자에게 심어놨는지, 타격자에게 심어놨는지 조사해 봐야한다. 이것이 피격자라면 타격자로 바꾸자. 또한 스테이트에서 길이를 15프레임 정도 길게 설정해서 누워있는 대기시간을 주어야 한다. 현재 이것을 Length를 강제로 교정하는 식으로 처리해 놨는데 AdditionalLength같은 식으로 변경하는 쪽이 좋아보인다.

오늘의 깨달음. 차일드를 자주 바꾸는 본은 traj보단 그냥 부모없음.으로 설정하는 편이 애니메이션하기에 더 편하다. 주로 대각선 애니메이션을 할 때!

먼저 DamageSlam, GetUpSlam을 제작

피격자의 애니메이션 제작 중. 애니메이션 자체는 내일 마무리할 수 있을 것 같다.z

2.27

좌우를 와리가리하는 애니메이션을 제작하다보니 머리카락 앤젤링의 코드에 문제가 있는 것을 발견했다. 해당코드는 뷰에 따른 UV를 위아래로 움직이기 위해 바이탄젠트를 쓰고 있는데 좌우가 반전되면 방향도 바뀌는 문제가 있는 것이다. 게임은 로컬 스케일의 X값을 사용해서 캐릭터를 반전하고 있으니 이를 알아내어 곱하면 될 것이다. 이를 위해 챗GPT에게 의뢰하니, unity_ObjectToWorld라는 행렬을 이용하면 된다고 한다.

| r11  r12  r13  tx |
| r21 r22 r23 ty |
| r31 r32 r33 tz |
| 0 0 0 1 |

행렬의 대각선값(r11,r22,r33)은 스케일이다. 나머지는 회전값, 오른쪽 3열은 이동값을 기록한다. 따라서 [0].x를 쓰면 될 줄 알았는데…정작 해보니 변화가 없다…? 생각해 보니 그건 어디까지나 메쉬 오브젝트의 행렬이지, 게임오브젝트와는 관련이 없는 것도 같다. 그럼 수동으로 해 줄수밖에… CPU가 수고 좀 하자.

스케일팩터를 추가하고 방향이 변할 때마다 바꿔주어야 한다.

마참내! 앨리스의 잡기 완료. 코드를 또 한 번 신나게 리팩토링했다.
FSM코드만 1000줄이 넘어가지만 아직까지는 알아볼만 하다.

이제 닐리의 잡기로 넘어가자.

앨리스의 잡기”의 12개의 생각

  1. 오옷 안그래도 고수신데 날이갈수록 업그레이드 되시는군요. 전 저번주에 결국 다이소를 때려치웠습니다. 다이소에 만수르들이 절 너무 힘들게 하네요. 그에 대해 할말은 많지만 입이 아파서 삼키겠습니다. 여기서 하나 교훈을 얻었습죠. 회사 내에서 개발아이디어를 내서 채택되는 것도 좋지만 결국 제것이 아니라는 사실을 말이죠. 얻은 점도 분명 있습니다. 어쨌거나 공업상 이용가능한 디자인과 작품은 다르다는 결론을 얻었습다. 본격적으로 뻥튀기해서 떼돈을 벌고야 말겠다는 야심이 생겼습니다.

    1. 과연 그렇군요. 그것은 분명 좋은 경험이 될 것입니다. 사실 그 어떤 직종이든 내 생각은 내 것이 아니게 됩니다. 그게 싫어서 스스로 사업하면 대체로 망하고요. 이 사실을 뒤늦게나마 깨달았던 저는 그 때부터 월급도둑을 하고 있습니다. 부디 건승하시길 바랍니다.

  2. 흠.. 사실 이미 망해있어서…이리 망하나 저리 망하나 별 표도 안나는 것 같습니다. 하지만 이전에 창업 후 본의아니게 구속되고 폭망하고 난 뒤 부가세랑 못갚은 빚이 남아있어서 당분간 알바를 하긴 해야겠네요. 돈이 없으면 몸으로라도 떼워야하니까….! 다이소 1년 다니는게 목표였는데 채워서 아깝게됐습니다. 하지만 제게도 시간이 얼마 없네요! 하루 20시간은 꼭 쉬어야하니까…!

    1. 손가락이 두꺼워서 타자가 안쳐지는군요. 최소 일년 다녀야 퇴직금이 나올텐데 못채워서 매우 아쉽습니다. 새벽 상하차때 짬순으로 PDA도 찍던데 제가 2짬이라 1짱앞에서 무릎꿇었습니다. 물건 분류하는 티어까지 못찍어봐서 매우 아쉽지만 계속 못찍어볼 것 같아서 그만둔 것도 큽니다. PDA로 상품 받으면 짐나르다 남자 가슴 닿을 일도 없고 여러모로 복잡한 심경으로 퇴사했습니다. 가만히 있는 상품구경하다 자기가 깨뜨려놓고 파손한 상품에 대해서 1, 2천원짜리 상품 뭐 이딴 걸 판매하느냐 본인이 불량한 상품진열에 놀랐으니 피해자라고 주장하는 고객님한테 고객만족 고객감동 실현하려했으나 너무나도 진상이라 빡쳐서 이천원이 돈도 아니면 내고 가시면 되지않느냐 실랑이하다가 사유서 쓴 것도 한몫했습니다만

      1. 사람 상대하는 직업은 여러모로 힘들지요. 어지간한 멘탈 아니면 오래 일하는 것 자체가 불가능하지 않을까요? 다이소 일하시면서 글이 없던 걸 보면 어지간히 힘드셨나 봅니다. 고생하셨어요.!

    2. 그건 그렇고 아버지께 어떻게 말할지 걱정입니다. 놈팽이처럼 살다가 갑자기 대기업 들어갔다며 이제야 사람구실 한다고 좋아하셨는데 말이죠

    1. 여기 방문객 수가 20명도 안돼는데요… 그나마도 절반 정도는 크롤링하러 들어온 중국과 아르헨티나 봇들이랍니다.

  3. ChatGPT는 고얀 놈입니다. 3d 관련해서 물어보면 죄다 엉망으로 대답해주는 고얀놈…

    단 한번도 성공한 적이 없는것 같아요.

    1. 셰이더 쪽은 사람이 검색하더라도 정보가 혼파망이라 엉망인 게 당연하다! 라고 생각하고 작업하고 있습니다. 하지만 블렌더 스크립트는 정말 잘 짜줘요. 일관적인 스크립트 스타일을 유지한 블렌더 재단의 공로인 것 같습니다.

댓글 남기기