diff --git a/Assets/Resources/Units/art_size.csv b/Assets/Resources/Units/art_size.csv index da18bcce..b6ed942b 100644 --- a/Assets/Resources/Units/art_size.csv +++ b/Assets/Resources/Units/art_size.csv @@ -124,5 +124,5 @@ zhaoyun,1,100.4,655.1,199,393.0,192.0,926,590.9,1,, zhoucang,0,173.3,538.3,453,598.0,276.0,856,1091.8,,1.092, zhoutai,0,162.2,609.1,429,599.5,273.0,885,993.6,,1.026, zhugejin,0,160.2,562.8,372,501.0,270.0,870,954.7,,1.08, -zhugeliang,0,140.2,529.3,336,469.0,264.0,886,962.8,,1.18, +zhugeliang,0,143.2,541.6,342,479.0,269.6,904,983.3,,1.18,머리 수동 3.345·1.883 = 부채 바꾸기 전 실측(머리 469·정수리 264 ÷ 눈 140.2) · 깃털부채가 얼굴 옆에 붙어 자동 머리 폭이 부채까지 잼(PD 2026-11-10 「제갈량 부채 = 깃털부채」) zhurong,0,118.6,458.1,261,524.0,258.0,773,758.1,,1.02,눈 수동 실측 2026-11-10(눈 간격·눈 높이): 눈 덩어리 중심 x 524.4 · 642.7(짙은 피부 = 피부 판정 밖) diff --git a/Assets/Resources/Units/zhugeliang/front_action/f000.png b/Assets/Resources/Units/zhugeliang/front_action/f000.png index 1fc0596c..5ecfe146 100644 Binary files a/Assets/Resources/Units/zhugeliang/front_action/f000.png and b/Assets/Resources/Units/zhugeliang/front_action/f000.png differ diff --git a/Assets/Resources/Units/zhugeliang/front_action/f000.png.meta b/Assets/Resources/Units/zhugeliang/front_action/f000.png.meta index 19f20377..8704b640 100644 --- a/Assets/Resources/Units/zhugeliang/front_action/f000.png.meta +++ b/Assets/Resources/Units/zhugeliang/front_action/f000.png.meta @@ -50,7 +50,7 @@ TextureImporter: spriteExtrude: 1 spriteMeshType: 0 alignment: 9 - spritePivot: {x: 0.5, y: 0.02092} + spritePivot: {x: 0.5, y: 0.02047} spritePixelsToUnits: 100 spriteBorder: {x: 0, y: 0, z: 0, w: 0} spriteGenerateFallbackPhysicsShape: 1 diff --git a/Assets/Resources/Units/zhugeliang/front_idle/f000.png b/Assets/Resources/Units/zhugeliang/front_idle/f000.png index 6ec4f543..561a0364 100644 Binary files a/Assets/Resources/Units/zhugeliang/front_idle/f000.png and b/Assets/Resources/Units/zhugeliang/front_idle/f000.png differ diff --git a/Assets/Resources/Units/zhugeliang/front_idle/f000.png.meta b/Assets/Resources/Units/zhugeliang/front_idle/f000.png.meta index c72bd76b..a77c6d05 100644 --- a/Assets/Resources/Units/zhugeliang/front_idle/f000.png.meta +++ b/Assets/Resources/Units/zhugeliang/front_idle/f000.png.meta @@ -50,7 +50,7 @@ TextureImporter: spriteExtrude: 1 spriteMeshType: 0 alignment: 9 - spritePivot: {x: 0.5, y: 0.02092} + spritePivot: {x: 0.5, y: 0.02047} spritePixelsToUnits: 100 spriteBorder: {x: 0, y: 0, z: 0, w: 0} spriteGenerateFallbackPhysicsShape: 1 diff --git a/Assets/Resources/Units/zhugeliang/front_ready/f000.png b/Assets/Resources/Units/zhugeliang/front_ready/f000.png index 7eedc6df..cf19a76e 100644 Binary files a/Assets/Resources/Units/zhugeliang/front_ready/f000.png and b/Assets/Resources/Units/zhugeliang/front_ready/f000.png differ diff --git a/Assets/Resources/Units/zhugeliang/front_ready/f000.png.meta b/Assets/Resources/Units/zhugeliang/front_ready/f000.png.meta index 05d91290..eb562af2 100644 --- a/Assets/Resources/Units/zhugeliang/front_ready/f000.png.meta +++ b/Assets/Resources/Units/zhugeliang/front_ready/f000.png.meta @@ -50,7 +50,7 @@ TextureImporter: spriteExtrude: 1 spriteMeshType: 0 alignment: 9 - spritePivot: {x: 0.5, y: 0.02092} + spritePivot: {x: 0.5, y: 0.02047} spritePixelsToUnits: 100 spriteBorder: {x: 0, y: 0, z: 0, w: 0} spriteGenerateFallbackPhysicsShape: 1 diff --git a/Assets/Resources/Units/zhugeliang/meta.json b/Assets/Resources/Units/zhugeliang/meta.json index fe4ec71d..249b83e0 100644 --- a/Assets/Resources/Units/zhugeliang/meta.json +++ b/Assets/Resources/Units/zhugeliang/meta.json @@ -2,15 +2,15 @@ "fps": 1, "ppu": 100, "frame": [ - 1015, - 956 + 989, + 977 ], "pivot": [ 0.5, - 0.02092 + 0.02047 ], - "charHeightPx": 895, - "bodyHeightPx": 886, + "charHeightPx": 916, + "bodyHeightPx": 904, "clips": [ { "name": "front_idle", diff --git a/Tools/unit_art_size.py b/Tools/unit_art_size.py index c8c4db30..94d88e6b 100644 --- a/Tools/unit_art_size.py +++ b/Tools/unit_art_size.py @@ -16,6 +16,8 @@ 표 = Assets/Resources/Units/art_size.csv(utf-8-sig · SOT) · mounted = 게임 표(영웅·무장·병사)의 병종이 cavalry 면 1(art_types · 표에 없는 아트만 기존 값 · 그것도 없으면 이름에 cavalry 면 1). 눈을 못 찾으면 size_px 를 비워 둔다(게임은 bodyHeightPx 로 대체) · 실행 결과를 --sheet 시트로 눈 위치를 확인할 것. +note 가 「머리 수동 <머리÷눈>·<정수리÷눈>」 으로 시작하면 head_px·crown_px = 그 비율 × 자동 eye_px(소품이 머리 옆에 붙어 +자동 머리 폭이 소품까지 재는 그림 · 예 제갈량 깃털부채 2026-11-10 · 묶음 배율이 바뀌어도 맞도록 비율로 적음). 사용: python -I -B -X utf8 Tools/unit_art_size.py <프로젝트 루트> [--sheet out.png] """ @@ -23,6 +25,7 @@ import csv import glob import json import os +import re import sys import numpy as np @@ -196,6 +199,9 @@ def main(): eye = float(prev['eye_px']) # 자동으로 못 찾는 그림(안대·눈썹과 붙은 눈·짙은 피부) = 표에 적은 수동 실측 값 유지 lock = prev.get('lock', '') hw, cr = head_width(img, eyes) + mh = re.match(r'머리 수동 ([\d.]+)·([\d.]+)', prev.get('note', '')) + if mh and eye > 0: + hw, cr = round(float(mh.group(1)) * eye, 1), round(float(mh.group(2)) * eye, 1) # 눈 높이(발 위 px) = 영웅 목록 카드가 눈 줄을 맞추는 기준(PD 2026-11-10 「전위·태사자처럼 너무 위쪽에 보이는 영웅은 내려」) foot_y = img.height - meta['pivot'][1] * img.height eye_up = round(foot_y - (eyes[0][2] + eyes[1][2]) / 2, 1) if eyes else 0