추가스킬의 이펙트 제작

8.15

광복절이다. 대한 독립 만세!

닐리의 이펙트 제작과정. (삽질 포함) 이제 타임랩스 안찍어야지… 아휴. 작업내내 웹툰도 보고 서핑도 하고 그래야되는데, 누가 뭐라하는 것도 아니건만 카메라 켜있으니 뭘 못하겠다.

8.16

닐리 윙샷. 뿅뿅-!

불손이 소환. 2타 알찬 구성

attack_collider_01본은 본디 공격범위를 그리기 위한 용도로 생성되었다. 이 본의 위치와 크기에 따라 판정박스가 정해진다. 하지만 이것이 본래의 목적이외에 이펙트의 생성위치, 발사체의 발사위치를 알려주는 정보성 본을 겸직하다가 이번에 추가로 던지기 후의 상대방 위치를 알려주는 일도 겸하게 되었다.

문제는 이 본의 초기값이 깔끔하지가 않다는 데 있었다. 스크립트로 제어하고 있던 위치를 컨버팅하려면 깨끗한 정보가 필요했는데, 이를 위해 에디트 모드의 본정보를 0,0,0으로 바꿔주게 되면 기존에 잡아놨던 본의 애니메이션이 모두 틀어진다는 문제가 있다. 일이 크다. 어떻게 해야 할까….

ChatGPT는 답을 알고 있다.

import bpy

# 원하는 본의 이름
target_bone_name = 'attack_collider_01'

# X, Y 위치 수정 값
x_offset = -0.511749
y_offset = -0.205907

# 모든 액션을 순회
for action in bpy.data.actions:
    # 각 fcurve를 순회 (액션의 키프레임)
    for fcurve in action.fcurves:
        # fcurve가 위치 데이터인지 확인 ('location'을 포함한 경로인지 확인)
        if fcurve.data_path.endswith('location'):
            # 데이터 경로에서 본 이름 추출
            path_elements = fcurve.data_path.split('"')
            if len(path_elements) > 1:  # 본 이름이 포함된 경로인지 확인
                bone_name = path_elements[1]
                if bone_name == target_bone_name:
                    # x 좌표 또는 y 좌표에 해당하는지 확인
                    if fcurve.array_index == 0:  # x 좌표
                        print(f'Updating X location in action "{action.name}" for bone "{target_bone_name}"')
                        for keyframe in fcurve.keyframe_points:
                            keyframe.co[1] += x_offset
                            keyframe.handle_left[1] += x_offset
                            keyframe.handle_right[1] += x_offset
                    elif fcurve.array_index == 1:  # y 좌표
                        print(f'Updating Y location in action "{action.name}" for bone "{target_bone_name}"')
                        for keyframe in fcurve.keyframe_points:
                            keyframe.co[1] += y_offset
                            keyframe.handle_left[1] += y_offset
                            keyframe.handle_right[1] += y_offset

print("Completed updating keyframes.")

아무래도 블렌더 애니메이터라면, 파이썬 기초정도는 익혀두는 편이 좋겠다. 물론 첫단추를 잘 꿰는 것이 더 중요하겠지만.

8.17

이후의 일은 버그잡이다. 테스트를 하며 자잘한 수정사항들을 노션에 적어두었다. 이런 일들은 마음 같아선 바로 처리해버리고 싶지만, 얼마나 걸릴지 모르기 때문에 일단 적어두고 나중에 처리하는 것이다. 원래 하던 일을 벗어나면 안된다. 하지만 자주 벗어난다. 아휴, 급한 성격 좀 고쳐야 된다.

게임은 막타 보정이 들어가 있다. 만약 막타로 10의 데미지가 들어왔으나, 8정도의 HP가 남아있다면 살려준다. 이 때 HP는 1도트도 안보이게 되는데, 이것이 죽었다는 착각을 일으켜서 아직 살았다는 표시를 해줄 필요가 있었다. 그래서 HP가 30% 아래로 내려가면 깜빡이가 표시된다. 당연한 게 이제야 들어갔다.

끝났다… 야호. 모든 일은 언젠가는 결국 끝난다. You win!

추가스킬의 이펙트 제작”의 22개의 생각

  1. 안녕하세요 유튜브에서 보고 이렇게 찾아와 글 남겨 봅니다.
    혹시 지금 제작중이신 게임에 사용된 모델링을 에셋으로 판매하실 계획이나 의향이 없으신가요?

      1. 아쉽네요 만약 판매하신다면 수익과 게임개발에 되게 많은 도움이 될거라 생각해봤습니다.
        추후에라도 재가하여 주시기 바래봅니다.

    1. Oh, thank you so much! I truly appreciate your gesture. While it may seem a bit grand, this is just a personal project, and I would like to see it through on my own until the end.

    1. 트위터 유입이 갑자기 늘었다 싶었더니 여기였구나! 반가운 소식을 전해줘서 고마워. 잘 지내는가!

      1. 그럭저럭 잘 지내고 있어요. 그러고보니 언젠가 물어보려다 생각난김에..
        컨트롤러 아날로그 스틱 입력 받을 때 GetAxisRaw로 받아도 입력값이 정수로 안와서 커맨드 입력이 잘 안되는 문제는 어케 해결하셨나요? ㅠㅜ

      2. 나도 그것때문에 대각선 입력이 안되는 현상이 있었어. 로그찍어보니 대각선땐 xy각각 (0.7, 0.7)을 리턴하더라고. Raw의 반환값이 Float일 줄은! 그래서 그냥 반올림해서 쓰면 됩니다.

  2. Hi, I recommend you to make a page on X (Twitter), the traction that your project is getting on this side of the world is crazy, do not miss this opportunity.

  3. 안녕하세요! 제가 잘못 썼다면 죄송합니다. 저는 한국어를 할 수 없기 때문에 번역기를 사용했습니다. YouTube에서 귀하의 게임을 발견했는데 정말 마음에 듭니다! 캐릭터도 너무 귀엽고 오로라의 포옹, 닐리의 엉덩이 때리기 등 애니메이션도 너무 귀엽습니다! 아직 제작 중인 다른 캐릭터와 이들이 무엇을 할 것인지에 대한 세부 정보를 공개할 수 있나요? 녹색 머리의 메이드나 금발 소녀, 토끼 소녀의 귀엽고 유쾌한 공격 애니메이션도 나올지 궁금해요!

    1. 제 게임에 관심을 가져주셔서 감사합니다. 나오지 않은 캐릭터들의 정보는 아직은 제 머리 속에만 있어요. 이건 팀의 프로젝트가 아니라 그냥 혼자 제작 중인 게임이기 때문에 별도의 문서를 만들지는 않았습니다. (사실, 별로 정해진 것도 없긴 합니다. ㅎㅎ)

      P.S. Hoson님이 댓글에 언급한 블로그는 제 예전 블로그입니다. 개인사정으로 워드프레스로 이주해서 개발을 이어가고 있어요.

      1. 이해합니다. 프로젝트에 행운이 있기를 바랍니다! 다른 캐릭터들도 이렇게 귀엽고 창의적인 공격 애니메이션을 갖게 된다면 이 게임을 꼭 구매하겠습니다!

이즈님에게 덧글 달기 응답 취소