2016-12-15 13 views
0

나는 플레이 블라스트 용 스크립트를 만든다. 사용자 및 장면 이름, fps 및 현재 프레임과 같은 내 비디오 위에 몇 가지 HUD 데이터가 필요합니다 ...마야 HUD 문제

먼저 headsUpDisplay()에 의해 생성 된 HUD를 시도하지만 배경은 없습니다 ... HUD 레이블의 색상이 바뀝니다. 그러나 때때로 그들은 배경없이 읽을 수 없습니다.

cmds.headsUpDisplay('HUDObjectSceneName', label='label TEXT', 
        section=2, block=0, blockSize='large', 
        dfs='large', labelFontSize='large') 

두 번째로 hudButton()으로 생성 된 HUD 버튼을 사용해보세요. 배경에는 배경이 있습니다. 하지만 내 레이블 중 하나는 현재의 시간입니다. headsUpDisplay()에는 라벨 텍스트를 새로 고치고 변경하기위한 '명령'이 있습니다. 그러나 hudButton()에는이 기능이 없습니다.

label = 'FPS: 25 FRAME:' 
cmds.hudButton('HUDHelloButton3', s=9, b=0, vis=1, l=label, 
       bw=blockLen(label), lfs='large') 

cmds.headsUpDisplay('HUDCurentFrame', label=label, 
        section=9, block=0, blockSize='large', dfs='large', 
        labelFontSize='large', atr=True, 
        command=lambda: cmds.currentTime(query=True)) 

hudButton() 버튼의 너비가 수동으로 설정되어 있습니다. 그리고 내가 긴 라벨을 원할 때 나는 라벨 너비를 계산할 필요가있다. 하지만 HUD 글꼴이 고정되어 있지 않고 픽셀 단위로 레이블 너비를 올바르게 계산하는 방법을 모르겠습니다. 몇 가지 실험 후 난 너비를 계산하는이 함수를 만듭니다. 거친 모양이긴하지만 적어도 다음과 같습니다.

def blockLen(label): 
    FONT_WIDTH = 8 
    THIN_WIDTH = 6 
    BLOCK_ADD = 10 
    thin_symbol = ' :,.!i[];:\'"|-' 

    sum = BLOCK_ADD 
    for x in label: 
     sum += THIN_WIDTH if x in thin_symbol else FONT_WIDTH 

    return sum 

배경과 동적 데이터가있는 현재 프레임과 같은 HUD 레이블이 필요합니다. 하지만 나는 그것을 만드는 또 다른 방법을 찾을 수 없습니까?

ps. 시간이 바뀌면 scriptJob()을 사용하여 HUD 버튼 레이블을 변경하려고합니다. 하지만 그 게임 플레이 블라와 함께 작동하지 ...

답변

0

내 문제의 한 부분은 내가하기로했다. 단추를 직접 업데이트하는 방법을 찾지 못했습니다. 나는 레이블없이 headsUpDisplay()을 창조한다 - 그는 새롭게 할 수있다. 그리고 난하지 해결 내 문제의 내 hudButton()

def frame_label(): 
    label = 'FPS: 24  FRAME: %s' % cmds.currentTime(query=True) 
    cmds.hudButton('HUDCurentFrame', e=True, l=label) 

# bottom-right: FPS and current frame info 
cmds.headsUpDisplay('HUDCurentFrameInvisible', label='', 
        section=9, block=1, blockSize='large', dfs='large', 
        labelFontSize='large', command=frame_label, atr=True) 

cmds.hudButton('HUDCurentFrame', s=9, b=0, vis=1, l='', bw=200, lfs='large') 

그러나 두 번째 부분에 텍스트를 변경하라고 강요했다. 나는 픽셀 단위로 텍스트 크기를 계산할 수 없다. 올바른 해결책은 Maya에서 HUD 용 글꼴을 사용하는 것입니다. 그리고 wx 라이브러리를 사용하여 글꼴 이름을 사용하여 텍스트 너비를 계산할 수 있습니다 ...

Maya에서 글꼴 데이터 (이름, 크기 및 장식)를 얻는 방법은 무엇입니까?

0

ViewPort 렌더러를 ViewPort 2.0으로 변경하면 필요한 글꼴 데이터 (이름, 크기 만)를 찾을 수 있지만 실제로는 정확하지 않습니다 (더 많은 해킹이 필요하고 투표가 필요하지 않습니다). 보다와 글꼴의 크기는 (나 디폴트의 렌더링에) 오류를 얻을 것이다 변경 :

# small display ui font size and display ui size 
cmds.displayPref(sfs=9, dfs=10) #font size 
cmds.savePref() 

Failed trying to load font: -*-helvetica-bold-normal-*-9-*-*-*-*-*-iso8859-1 

하기 때문에 사용 된 글꼴헬 베티 대담하고 크기가 상대 금지한다 (당신은 입력하거나 기본을 소유 예 : cmds.optionVar(q="defaultFontSize"))

+0

저는 win과 linux를 스튜디오에서 사용합니다. 난 리눅스 마야에서 다른 글꼴을 사용하여 승리 (그리고 내가 ViewPort 2.0 모든 시간을 사용하는 것 같아요 ... 어떻게 마야 글꼴을 직접 데이터를 얻으려고 찾으십시오. 그리고 난 몰라, 마야의 새 버전에있을 수 있습니다. 다른 글꼴 ... – MaxKu

+0

나는 그들이 두 플랫폼 모두에서 지원되는 선택 글꼴 유형이 될 것 같아요, 나는 그것을 시도도, 나는 일반적인 방법을 의미하지만, 아무것도 .... 그들은 거기에 글꼴 유형, 100 %, 계속하지만 당신은 알아요 이제는 유형과 크기가 –

+0

https://s28.postimg.org/hs8bl85fh/Capture.png – MaxKu

1

criptJobs는 애니메이션 재생 중 실행되지 않습니다. 재생 중에 실제로 허드 (hud)를 업데이트해야하는 경우 표현 내부에서 업데이트를 트리거 할 수 있습니다. 불행히도 멜에서 전화해야합니다. 가능한 한 가볍게두면 애니메이션을 보는 모든 사용자에게 대화식 재생 속도가 느려집니다.

플레이 블라스트 전에 표현식을 동적으로 생성 한 다음 바로 삭제하면 애니메이터를 귀찮게하지 않아도됩니다.

적절한 색상으로 설정된 이미지면을 만들어 HUD 버튼을 사용할 수 있습니다.