Ship the WeChat hot-update catalogs and the camp, TideWhale T2, UI atlas, and animation-lab work.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
udx
2026-10-24 18:04:41 +08:00
co-authored by Cursor
parent 6ebc9401ce
commit 45e62132c8
1432 changed files with 2971856 additions and 2798 deletions
+57
View File
@@ -0,0 +1,57 @@
"""Author the animation comparison controls through the project's JSON UI pipeline."""
import json
from pathlib import Path
root=Path(__file__).resolve().parents[1]
nodes=[]
sprites={name:'Assets/Bundles/UI/Texture/Common/'+name+'.png' for name in [
'ui_panel_popup','btn_secondary_normal','btn_secondary_pressed','btn_primary_normal','btn_primary_pressed','btn_primary_disabled','progress_bg','progress_fill']}
def node(name,parent,rect,components):
nodes.append(dict(name=name,parent=parent,active=True,rect=rect,components=components))
def rect(x,y,w,h,anchor=(.5,1),pivot=(.5,1)):
return dict(anchorMin=anchor,anchorMax=anchor,pivot=pivot,anchoredPosition=[x,y],sizeDelta=[w,h])
def text(name,parent,value,x,y,w,h,size=28,color='#33405EFF'):
node(name,parent,rect(x,y,w,h),[dict(type='TextMeshProUGUI',text=value,fontSize=size,alignment='Center',color=color,raycastTarget=False)])
node('UI_CharacterAnimationLab',None,dict(anchorMin=[0,0],anchorMax=[1,1],offsetMin=[0,0],offsetMax=[0,0]),[
dict(type='Canvas',sortingOrder=100),dict(type='CanvasScaler',referenceResolution=[1080,1920],matchWidthOrHeight=.5),dict(type='GraphicRaycaster')])
node('Panel_Header','UI_CharacterAnimationLab',rect(0,-24,1032,188),[dict(type='Image',sprite='ui_panel_popup',imageType='Sliced',raycastTarget=False,color='#FFFFFFFF')])
text('Txt_Title','Panel_Header','角色动画对比',0,-12,960,58,42)
text('Txt_Subtitle','Panel_Header','相同骨架与动作 · 三版同步播放',0,-70,960,40,25)
for i,(label,color) in enumerate([('① Mixamo 网站','#1B8299FF'),('② TokenRig 原始','#B46A2AFF'),('③ 手部约束后','#458533FF')]):
text('Txt_Column'+str(i),'Panel_Header',label,(i-1)*336,-122,330,44,27,color)
node('Panel_Controls','UI_CharacterAnimationLab',rect(0,24,1032,600,(.5,0),(.5,0)),[dict(type='Image',sprite='ui_panel_popup',imageType='Sliced',raycastTarget=True,color='#FFFFFFFF')])
text('Txt_State','Panel_Controls','行走 · 三版同步对比',0,-12,978,46,30)
node('Btn_Seek','Panel_Controls',rect(0,-66,978,32),[dict(type='Image',sprite='progress_bg',imageType='Sliced',raycastTarget=True),
dict(type='MonoBehaviour',typeName='AIGame.Review.AnimationLabSeekBar')])
node('Img_Progress','Btn_Seek',dict(anchorMin=[0,0],anchorMax=[0,1],pivot=[0,.5],anchoredPosition=[0,0],sizeDelta=[2,0]),[
dict(type='Image',sprite='progress_fill',imageType='Sliced',raycastTarget=False)])
text('Txt_Time','Panel_Controls','0.00 / 1.03 秒',0,-104,978,34,23)
rows=[
[('Walk','行走'),('Breathe','呼吸待机'),('Happy','轻松待机')],
[('Play','暂停'),('Previous','上一帧'),('Next','下一帧'),('Restart','重播')],
[('Speed025','0.25×'),('Speed05','0.5×'),('Speed1','1×'),('Speed2','2×'),('Travel','原地循环')],
[('Front','正面'),('Side','侧面'),('Back','背面'),('Material','切灰模')],
[('All','三版并排'),('Focus1','看 ①'),('Focus2','看 ②'),('Focus3','看 ③'),('Detail','全身')]]
events=[]
for row,items in enumerate(rows):
width=(978-(len(items)-1)*12)/len(items)
for col,(key,label) in enumerate(items):
name='Btn_'+key
x=-489+width/2+col*(width+12)
primary=key in ('Play','All')
prefix='btn_primary' if primary else 'btn_secondary'
node(name,'Panel_Controls',rect(x,-148-row*76,width,62),[
dict(type='Image',sprite=prefix+'_normal',imageType='Sliced',raycastTarget=True),
dict(type='Button',transition='SpriteSwap',spritePressed=prefix+'_pressed',onClick='AnimationLab.'+key)])
node('Txt_'+key,name,dict(anchorMin=[0,0],anchorMax=[1,1],offsetMin=[3,1],offsetMax=[-3,-1]),[
dict(type='TextMeshProUGUI',text=label,fontSize=27,alignment='Center',fontStyle='Bold',color='#F6F8FFFF',raycastTarget=False),
dict(type='Outline',effectColor='#102033AA',effectDistance=[1,-1])])
events.append(dict(name='AnimationLab.'+key,node=name))
text('Txt_Help','Panel_Controls','拖动角色旋转 · 滚轮缩放 · 空格播放/暂停',0,-542,978,36,23)
document=dict(schemaVersion=1,prefabName='UI_CharacterAnimationLab',prefabPath='Assets/Bundles/UI/Prefab/UI_CharacterAnimationLab.prefab',
description='独立角色动画观看场景的同步播放、逐帧、进度、视角与放大控制。1080×1920;所有控件由 JSON→Prefab 创建。',
canvas=dict(canvasScaler=dict(referenceResolution=[1080,1920],matchWidthOrHeight=.5)),assets=dict(sprites=sprites),nodes=nodes,
bindings=['Txt_State','Txt_Time','Btn_Seek','Img_Progress']+[e['node'] for e in events],events=events)
path=root/'Doc/UIPrefabCreater/UI_CharacterAnimationLab.json'
path.write_text(json.dumps(document,ensure_ascii=False,indent=2)+'\n',encoding='utf-8')
print(path)