스파인2D 정규식을 이용한 이미지 경로 일괄 변경 (Batch change of image paths using Spine2D regular expressions)
대략 하나의 캐릭터 세트 이미지로 스파인 작업을 하다가 스킨을 추가하는 일이 발생하면 사용하면 편리한 정규식을 이용한 이미지 경로 일괄 변경 방법이다. 예를 들어 애니메이션에 사용한 이미지의 경로가 /Images/head 였는데, 스킨 추가에 의해 /Images/Skin1/head 로 변경이 되었을 경우 유용하다.
물론 한땀 한땀 이미지 경로를 바꿔줘도 동작은 한다. 시간이 걸릴 뿐.
범위를 전체프로젝트로 하는 경우는 예를 들어 1번 스킨과 2번 스킨의 뼈대의 구조가 달라지거나(예: 없던 꼬리 추가) 추가되거나 하는 경우이다
아래 이미지 처럼 찾기에다가 (.*)를 입력하고, 첫 번째 발생 체크, 정규식 체크, 범위는 전체 프로젝트를 해도 되고 이미 스킨이 있다면 현재스킨 또는 트리에서 선택한 범위(트리 셀렉션) 을 선택하면 된다. 그리고 경로를 변경할 예정이므로 경로를 선택, 이미지만 변경할 예정이므로 이미지로 사용한 영역, 메쉬(메쉬를 하나도 사용안했으면 선택 안해도 됨)
바꾸기칸에는 1/halfSide/$1 이런식으로 입력하면 원래 /Images/arm_l 이 /Images/1/halfSide/arm_l 이런식으로 일괄변경된다. 참 쉽다. 개꿀.
반대로 1/side/arm_l 을 arm_l 로 되돌리고 싶으면 아래와 같이 찾기에다가 1/side/(.*) 바꾸기에다가 $1 을하면 된다. 자신에게 필요한 상황에 맞게 응용하면 된다.
그리고 스킨 관련 이미지를 추가하고 경로도 똑바로 지정했는데 적용이 안된다면 Spine2D 에디터 트리뷰 하단에 새로고침 버튼을 눌러보자.
참고로 부연 설명 하자면 $1 의 의미는 정규 표현식에서 사용되는 참조(back referency)로써 괄호'()'로 묶인 부분은 캡처 그룹으로 정의되며, 각 캡쳐 그룹은 번호가 매겨지는데 이 번호를 이용해 해당 그룹이 캡처한 텍스트를 나중에 다시 참조할 수 있다. 정규 표현식에서 캡처 그룹의 인덱스는 1부터 시작한다. 예를 들어, 정규 표현식에서 (/Images/)(arm_1) 과 같이 두 개의 캡처 그룹을 사용한다면, /Images/는 $1로 참조되고 arm_1은 $2로 참조된다.
그리고 범위를 현재스킨으로 하는 경우는 뼈대의 구조가 달라지지는 않고 단순히 이미지 갈이만 하는 경우이다 이 경우에는 스킨 플레이스 홀더가 필요하다
트리뷰에서 어태치먼트 필터링을 한 후 어태치먼트들를 모두 선택한 뒤 맨아래 '새로 만들기' '스킨 플레이스 홀더'를 클릭
어태치먼트의 이름은 바꿔도 되고 안바꿔도 된다. 어차피 중요한건 이미지 경로이다. 각 스킨의 어태치먼트 복제, 메쉬 연결됨, 타임라인 상속 이렇게 3개만 체크 후 '확인'버튼 클릭
그렇게 하면 아래 캡쳐 이미지와 같이 '스킨 플레이스홀더'가 생성이 된다
1번 스킨의 어태치먼트들의 이미지 경로는 그대로 두고, 2번 스킨의 어태치먼트들의 이미지 경로만 변경할 예정이므로 2번 스킨을 선택을 한다. 트리에서 선택해도 되고, 스킨뷰에서 선택해도 된다.
폴더의 구조가, images 폴더 안에 각 스킨 폴더 1, 2, 3... 이런식으로 따로 있으므로 2번 스킨의 이미지 경로를 아래 캡쳐이미지와 같이 바꿔준다.
그리고 정규식에 관한 설명창이다.
.* 말고 아래와 같은 방식으로도 사용이 가능하다 (범위는 상황에 맞게 정해야함)
필자의 경험으로는 정규식은 각 스킨마다 크기가 완전히 똑같으며 색상이나 문양만 다른경우에는 유용하지만 헤어스타일처럼 이미지 크기 자체가 달라지는 경우엔 어태치먼트의 경로만 바꾸는 경우에 위치가 조금씩 틀어지는 경우가 있다. 경우가 있는 게 아니라 그냥 틀어진다. 이런 케이스에서는 두가지 파훼법이 있다.
첫 번째 방법으로는 캔버스의 크기를 통일하는 것이다, 즉 이미지를 여백을 추가하여 사이즈를 통일하는 방법이다. 이 방법의 장점은 정규식으로 경로만 바꾸어 주면 쉽게 어태치먼트의 변경이 가능하다는 것이고 단점은 PhotoshopToSpine.jsx 스크립트를 사용해서 이미지를 내보내면 여백을 아예 없게 해서 내보내지는데, 각각의 이미지를 포토샵 등의 툴로 여백을 추가하여 일일이 사이즈를 통일하는 노가다가 필요하다는 것이다. 물론 액션을 사용해서 빠르게 작업할 수는 있지만 어쨌든 갯수가 많아지면 엄청난 노가다를 필요로 하게 된다는 사실에는 변함이 없다.
두 번째 방법은 스킨으로 사용될 이미지들을 폴더를 따로 하려고 PSD파일을 제작할 때 각 스킨별로 따로 제작하지 말고(따로 하더라도 방법이 있긴 하지만 일반론적으로) 하나의 PSD파일로 모든 스킨들을 이름만 다르게(넘버링 등) 제작하고 그냥 통째로 내보내기를 한 후, 스파인2D에서 데이터 불러오기를 한 상태에서(모든 이미지들이 겹쳐진 상태) 기본 default 스킨에 사용할 어태치먼트들만 제외하고 visiable을 끄고 본(bone)을 심은 후, 각각의 파츠마다 스킨을 생성한 후(예: skin-hair-1) 스킨플레이스홀더를 생성해서 해당 어태치먼트를 child로 등록을 한다. 그리고 해당 스킨을 복제 후 다음 스킨의 어태치먼트를 방금 복제한 스킨의 스킨플레이스홀더의 child로 등록을 하면 하나의 slot에 두개의 어태치먼트를 등록하면 두개가 생기는 것과 다르게 마지막에 등록한 어태치먼트만 남게 된다. 이런식으로 모든 파츠의 스킨작업을 하면 위치가 틀어지지 않고 스킨 기능을 깔끔하게 할 수 있다. 이 장황하게 긴 글은 스파인2D 초보라면 잘 안읽혀질 수 있지만, 스킨 관련해서 고민을 꽤 해본 중급 이상이라면 도움이 될 방법이다.
일단 이 두 방법을 떠나서, 메쉬의 모양이 바뀌는 스킨이라면 간편하게 하는 방법은 없으며, 정규식사용은 기본이고 각각 한땀 한땀 일일이 만져줘야 한다.
끗