캐릭터 다섯 명으로 — KARTORY 의 후드 아이 셋을 FPS 몸에 옮기기
같은 세계관을 쓰는 카트 게임 KARTORY 에 있던 캐릭터 셋을 VARENA 로 옮겼다. 이제 입장 화면에서 다섯 명 중에 고른다. 캐릭터 순서와 id 도 KARTORY 와 똑같이 맞춰, 두 게임에서 같은 캐릭터가 같은 자리에 오게 했다.
한 일
새 캐릭터 셋
- 꾹꾹이: 노란 치즈냥 줄무늬 후드, 빨간 목도리와 방울, 줄무늬 꼬리. 1인칭 손은 분홍 젤리 발바닥 앞발
- 바니바니: 연보라 토끼 후드(긴 귀 하나가 살짝 기움), 양갈래 머리, 솜뭉치 꼬리
- 왕눈이: 연두 개구리 후드(위에 동그란 눈 두 개), 노란 우비와 장화, 등에 접어 멘 우산
- 평소 표정은 KARTORY 쪽 캐릭터별 표정을 그대로 가져왔다. 기존 캐릭터인 댕댕이 표정도 함께 맞췄다
- 입장 화면 캐릭터 고르기를 다섯 칸으로 늘렸다
리뷰 반영
- 서버 테스트에서 고른 캐릭터가 제대로 들어갔는지 확인할 때, 기본값(첫 캐릭터)이 아닌 캐릭터로 시험하게 고쳤다. 기본값으로 시험하면 값이 무시돼도 테스트가 통과한다
- 바니바니 귀를 조금 줄이고 이름표를 올렸다. 입장 미리보기는 보이는 메시의 위 끝을 재서 틀을 맞춘다
- 숨쉬기·깜빡임·귀 흔들기 같은 연출을 캐릭터마다 다른 위상으로 돌린다. 같은 시계를 쓰면 화면의 모든 캐릭터가 동시에 눈을 깜빡인다
- 여러 캐릭터가 같이 쓰는 캐시 도형은 캐릭터 하나를 치울 때
dispose되지 않게 표시해 두었다
기술 메모
카트에 앉은 몸에서 서 있는 몸으로
같은 캐릭터라도 두 게임의 조건이 다르다. 옮기면서 바꾼 점은 이렇다.
- 판정 상자: FPS 는 머리 판정이 있어서 모델이 머리 상자를 넘으면 안 된다. 후드를 얼굴보다 크게 만드는 여유를 줄이고, 후드 위 귀·무늬는 같은 각도에 오도록 안쪽으로 당겼다
- 흔들림 기준: 귀·꼬리·양갈래가 카트 속도 대신 걷는 속도에 반응한다
- 표정: VARENA 규칙대로 평소 표정과 맞은 직후 우는 표정만 둔다
- 소품: 서 있는 몸통에 맞춰 다시 놓았다. 목도리·우비 깃은 팀전 스카프보다 조금 작게 해서 팀전에서는 스카프가 덮는다. 우산은 손에 무기를 들어야 하니 늘 등에 멘다
메시 수 줄이기
KARTORY 는 다 만든 뒤 움직이지 않는 부품을 한 메시로 합친다. VARENA 는 거리에 따른 LOD 와 표정 전환을 그룹의 visible 로 켜고 끄기 때문에 통째로 합칠 수가 없다. 그래서 얼굴 조각 묶음만 재질별로 미리 합쳐 메시 수를 기존 캐릭터 수준으로 맞췄다. 작은 장식은 멀어지면 숨기고, 그림자는 얼굴·후드·귀 같은 큰 머리 부품만 드리운다.
캐릭터마다 연출 위상 다르게
연출에 같은 누적 시간을 넘기면 모두가 같은 박자로 움직인다. 리그를 만들 때마다 순번에 어중간한 값(정수배로 겹치지 않는 값)을 곱해 위상을 정하고, 매 프레임 시계에 더하기만 한다. 프레임마다 새 객체를 만들지 않아도 된다.
let rigSerial = 0;
const TIME_PHASE_STEP = 1.37;
class Rig {
private readonly timeOffset = (rigSerial++ * TIME_PHASE_STEP) % 1000;
update(dt: number, clock: number) {
const t = clock + this.timeOffset;
// t 로 숨쉬기·깜빡임·귀 흔들기
}
}