1. 程式人生 > >(官網)虛幻3--HUD技術指南

(官網)虛幻3--HUD技術指南

bsh rem https gre 默認 slider 對話 復制 類定義

HUD技術指南


  • HUD技術指南
    • 概述
    • HUD類型
      • 畫布HUD
      • Scaleform GFx HUD
    • HUD類
      • HUD屬性
      • HUD函數
    • MobileHUD
      • MobileHUD屬性
      • MobileHUD函數
    • UDKHUD
      • UDKHUD屬性
      • UDKHUD 函數
    • Texture Atlas(貼圖組合)圖標坐標

概述


平視顯示儀(HUD)用於玩家玩遊戲的過程中向玩家快速並方便地傳遞遊戲狀態信息。HUD可以包括很多信息片段,比如玩家的當前生命值、他們所持或擁有的武器或物品、顯示其他玩家或物品位置的世界地圖、玩家的分數等。這些信息是通過在世界的頂部描畫的圖形和文本來傳遞的。

有些遊戲的HUDs比其他遊戲更加復雜。對於大部分FPS遊戲來說,它們的HUD是非常簡單的。這意味向玩家傳達一些一看就能明白的信息,並且不妨礙玩家看到世界地圖。這是很重要的,因為第一人稱射擊遊戲的節奏非常快,瞬息間就是生死之別。對於角色扮演遊戲,HUD可能會更加復雜,它此時不僅僅是HUD,更像是一個用戶界面。

事實上,用戶界面和HUD兩者之間的界限已經變得非常地模糊,更多的取決於您個人舉得HUD應該具有哪些功能而判定,但是這已經超出了本文的討論範圍。本文是一個創建HUD的指南,並且詳細介紹了虛幻引擎3中創建HUD的可用功能。

HUD類型


在虛幻引擎3中有兩種基本類型的HUDs,它們是:

  • Canvas(畫布) - 使用Canvas類來描畫HUD圖形。
  • Scaleform GFx - 使用Scaleform GFx集成來顯示HUD圖形和菜單。

這兩種類型的HUDs相互之間並不排斥。如果適合您的需要,您可以同時使用二者。

畫布HUD

Canvas類提供了向屏幕上描畫圖形和文本所需的所有工具。在使用虛幻引擎制作的很多遊戲中都是用了這個方法,並且對於大多數遊戲來說這是一個可行的解決方案。這個方法沒有提供非常好的輸入處理或動畫,這使得它不適合創建菜單或復雜的用戶界面。

關於使用Canvas類創建HUD的更多信息,請參照畫布技術指南。

Scaleform GFx HUD

虛幻引擎3中集成的Scaleform GFx也適合於創建遊戲中的HUDs、菜單及用戶界面。隨之而來的是在Flash中設置頁面的性能消耗,但是這使得設計人員可以自己設計界面而不需要完全地依賴程序原來程序中進行布局。

關於使用 Scaleform GFx創建HUD的更多信息,請參照 Scaleform技術指南。

HUD類


HUD負責決定將向屏幕上描畫的內容及所有獲取及處理要顯示的信息的邏輯。每個玩家有它自己的HUD類實例(HUD類的子類的實例),該實例是在遊戲視口初始化時創建的。創建玩家的HUD實例的整個過程如下所示:

技術分享

每次更新,玩家的HUD執行它的 PostRender() 事件,該事件將啟動重新渲染HUD的內容到屏幕上的過程。=PostRender()= 事件反過來調用主描畫函數 DrawHUD() 。每次更新的事件調用序列如下所示:

技術分享

然後 DrawHUD() 函數可以調用其它的更加專用的描畫函數來往屏幕上描畫獨立的HUD元素。比如,可能有一個僅負責描畫世界地圖的函數 DrawMinimap() ,還有一些其它的描畫玩家或點數的函數。

HUD屬性

Debug(調試)

  • bShowDebugInfo(是否顯示調試信息) - 如果該項為TRUE,那麽當前的ViewTarget(查看目標)的調試屬性將會顯示在屏幕上。
  • DebugDisplay(調試顯示) - 該項是字符串數組,當 bShowDebugInfo 為TRUE時,它指出了顯示當前的ViewTarget對象的哪些調試信息。基本的引擎類型包括"人工智能"、"物理"、"武器"、"網絡"、"相機"和"碰撞"。

Display(顯示)

  • Canvas(畫布) - 用於描畫HUD到其上面的Canvas對象。*註意:* 每一幀都會賦予一個新的畫布,僅從HUD::PostRender()事件中向畫布上進行描畫。請參照畫布技術指南獲得關於使用Canvas類的更多信息。
  • PlayerOwner(玩家擁有者) - 引用擁有那個HUD的PlayerController(玩家控制器),比如本地PlayerController。
  • PostRenderedActors(後期渲染的對象) - 一個對象數組,它們需要調用它們的 NativePostRenderFor() PostRenderFor() 函數來描畫HUD層。
  • WhiteColor/GreenColor/RedColor(白色/綠色/紅色) - 預制的白色、綠色和紅色變量。
  • bShowHUD(是否顯示HUD) - 如果該項為TRUE,則HUD可見。
  • bShowScores(是否顯示分數) - 如果該項為TRUE,那麽記分板可見。
  • bShowBadConnectionAlert(是否顯示壞的連接警告) - 如果該項為TRUE,那麽將會在HUD上顯示壞的連接的指示標記。這是根據延遲和包丟失在native代碼中設置的。
  • RenderDelta(渲染器時間間隔) - 自從上一次更新所過去的時間量,以秒為單位。
  • LastHUDRenderTime(上一次HUD渲染時間) - 存放了當計算 RenderDelta 時所使用的上一次渲染時間。

消息

  • ConsoleMessages(控制臺消息) - 要顯示的消息的數組。
  • ConsoleColor(控制臺消息顏色) - 當顯示控制臺消息時所使用的顏色。
  • ConsoleMessageCount(控制臺消息數量) - ConsoleMessages數組中可以保持的控制臺消息的最大數量。
  • ConsoleFontSize(控制臺消息的字體大小) -
  • MessageFontOffset(消息字體偏移量) - 當決定使用哪個字體時應用到LocalMessages(本地消息)上的FontSize(字體大小)的偏移量。
  • MaxHUDAreaMessageCount(最大HUD區域消息數量) - 要顯示的LocalMessages(本地消息)的最大數量。
  • LocalMessages(本地消息) - 要顯示的LocalMessages (本地消息)的數組。
  • ConsoleMessagePos[X/Y](控制臺消息位置[X/Y]) - 在屏幕上顯示控制臺消息的水平和垂直位置。
  • KismetTextInfo(Kismet文本信息) - 要顯示的Kismet DrawText(描畫文本)信息的數組。
  • bMessageBeep(消息Beep音) - 如果為TRUE,那麽當顯示任何新的控制臺消息時都會發出嘟嘟的聲音。

Viewport(視口)

  • HUDCanvasScale(HUD畫布比例) - 在[0,1]範圍內所使用的屏幕空間的量(針對TV)。
  • Size[X/Y] - 視口水平方向和垂直方向上的尺寸,以像素為單位。。。
  • Center[X/Y](中心[X/Y]) - 視口的水平方向和垂直方向的中心。
  • Ratio[X/Y](比率[X/Y]) - 當前視口的水平方向及垂直方向的尺寸和原始分辨率1024x768的比率值。

HUD函數

Debug(調試)

  • ShowDebug [DebugType] - 切換顯示玩家的當前 ViewTarget(視圖目標)的屬性。
    • DebugType(調試類型) - 要顯示或隱藏的屬性。基本引擎所支持的值,包括"人工智能"、"物理"、"武器"、"網絡"、"相機"和"碰撞"。
  • ShowDisplayDebug [DebugType] - 決定當前是否設置顯示指定的調試信息,比如它在 DebugDisplay 數組中。
    • DebugType(調試類型) - 要選中的屬性。基本引擎所支持的值,包括"人工智能"、"物理"、"武器"、"網絡"、"相機"和"碰撞"。
  • ShowDebugInfo [out_YL] [out_YPos] - HUD基本調試信息渲染的入口點。通過 "showdebug" 控制臺命令來激活及控制。可以重載它來基於每個遊戲顯示自定義的調試信息。
    • out_YL - 當前字體的高度。
    • out_YPos -畫布上的垂直位置。=out_YPos += out_YL= 給出了描畫下一行調試信息的文本的位置。
  • DrawRoute [Target] - 描畫ViewTargets的調試信息,ViewTargets是相對於它們當前路徑的機器人。
    • Target - 引用Pawn (機器人),以便描畫它的路徑信息。

Display(顯示)

  • ToggleHUD - 它是切換HUD可見性的可執行函數,通過 bShowHUD 變量實現。
  • ShowHUD - 通過調用 ToggleHUD() 函數來切換HUD可見性的可執行函數。
  • ShowScores - 通過調用 SetShowScores() 函數來切換遊戲中積分板的可見性的可執行函數。
  • SetShowScores [bNewValue] - 設置遊戲中記分板的可見性的函數,通過 bShowScores 變量實現。
    • bNewValue - bShowScores 變量的新值。
  • DisplayBadConnectionAlert(顯示不良連接的警告) - 用於顯示不良連接警告信息的函數基類。子類需要重載這個函數。

Drawing(描畫)

  • PreCalcValues - 計算並分配Size[X/Y]、Center[X/Y]和Ratio[X/Y]的值。
  • PostRender - HUD的主要描畫函數。引擎在每幀中都會調用它。
  • DrawHUD - 主要的遊戲HUD描畫函數。在任何消息之前進行調用。子類應該重載這個函數來處理針對特定遊戲的HUD描畫。
  • Draw2DLine [X1] [Y1] [X2] [Y2] [LineColor] - 在屏幕的2D空間中描畫一條直線。
    • [X/Y]1 - 描畫直線開始處的水平和垂直位置,以像素為單位。
    • [X/Y]2 - 描畫直線結束處的水平和垂直位置,以像素為單位。
    • LineColor - 描畫直線時所使用的顏色。
  • Draw3DLine [Start] [End] [LineColor] - 在屏幕的3D空間中描畫一條直線。
    • Start - 一個向量,在世界空間中指出了直線的起始點。
    • End - 一個向量,在世界空間中指出了直線的結束點。
    • LineColor - 描畫直線時所使用的顏色。
  • DrawText [Text] [Position] [TextFont] [FontScale] [TextColor] - 向屏幕描畫一個文本字符串。
    • Text - 要描畫到屏幕上的字符串。
    • Position - 一個二維向量,指出了在屏幕上描畫文本的水平位置(X)和垂直位置(Y)。
    • TextFont - 描畫文本所使用的字體。
    • FontScale - 一個二維向量,指出了文本在水平(X方向)和垂直方向的縮放比例。
    • TextColor - 向屏幕上描畫文本時所使用的顏色。
  • DrawActorOverlays [Viewpoint] [ViewRotation] - Native函數。為這真描畫的actors描畫覆蓋層,並把acotors本身添加到PostRenderedActors 數組中。
    • Viewpoint - 玩家相機的當前位置。
    • ViewRotation - 玩家相機的當前旋轉值。
  • AddPostRenderedActor [A] - 添加一個Actor到 PostRenderedActors 列表中。
    • A - 引用指向那個要添加到數組中的Actor。
  • RemovePostRenderedActor [A] - 從 PostRenderedActors 列表中刪除一個Actor。
    • A - 引用那個要從數組中刪除的Actor。
  • GetFontSizeIndex [FontSize] - 返回和給定字體尺寸相對應的字體。
    • FontSize - 字體的尺寸,以便用於獲得那個字體。

一般

  • PlayerOwnerDied - 它是一個函數存根,當 HUD的 PlayerOwner 死亡時調用它。子類需要重載這個類。
  • OnLostFocusPause [bEnable] - 由於主窗口的聚焦丟失而暫停或取消暫停遊戲。
    • bEnable - 如果為TRUE,啟用暫停狀態。否則,禁用暫停狀態。

消息

  • ClearMessage [M] - 清除給定的LocalMessage(本地消息)。
    • M - 引用要清除的HUDLocalizedMessage 。
  • Message [PRI] [Msg] [MsgType] [LifeTime] - 用於添加新的控制臺消息的封裝函數。調用 AddConsoleMessage()
    • PRI - 引用發送消息的玩家的PlayerReplicationInfo 。
    • Msg - 消息的文本。
    • MsgType - 消息類型,也就是‘Say(對話)‘, ‘TeamSay(團隊對話)‘等.
    • LifeTime - 可選。顯示消息所持續的時間,以秒為單位。
  • AddConsoleMessage [M] [InMessageClass] [PRI] [LifeTime] - 添加一個新的要顯示的ConsoleMessage 。
    • M - 消息的文本。
    • InMessageClass - 新消息的類(LocalMessage或其子類)。
    • PRI - 引用指向和消息相關聯的玩家的PlayerReplicationInfo。
    • LifeTime - 可選。顯示消息所持續的時間,以秒為單位。
  • DisplayConsoleMessages - 把尚未描畫的ConsoleMessages描畫到屏幕上。
  • LocalizedMessage [InMessageClass] [RelatedPRI_1] [RelatedPRI_2] [CriticalString] [Switch] [Position] [LifeTime] [FontSize] [DrawColor] [OptionalObject] - 添加要顯示的新的LocalMessage的封裝函數。調用 AddLocalizedMessage()=。同時,如果消息類的 =bIsSpecial 屬性是 FALSE,那麽則把消息添加為控制臺消息。
    • InMessageClass - 新消息的類(LocalMessage或其子類)。
    • RelatedPRI_1 - 引用和消息相關聯的玩家的第一個PlayerReplicationInfo。這個消息類定義了如何使用PRI(玩家復制信息)。
    • RelatedPRI_2 - 引用和消息相關聯的玩家的第二個PlayerReplicationInfo。這個消息類定義了如何使用PRI(玩家復制信息)。
    • CriticalString - 消息的文本。
    • Switch - 消息開關。消息了類決定了如何使用開關。
    • Position - 消息在屏幕上的垂直位置。
    • LifeTime - 消息顯示的持續時間量,以秒為單位。
    • FontSize - 顯示消息所使用的字體大小。使得該字體大小偏移 MessageFontOffset 的量,並得到的值傳給 GetFontSizeIndex() 函數來獲得顯示那個消息所使用的字體。
    • DrawColor -顯示消息時所使用的顏色。
    • OptionalObject - 可選。. 到和消息相連的對象的引用。這個消息類定義了如何使用那個對象。
  • AddLocalizedMessage [Index] [InMessageClass] [CriticalString] [Switch] [Position] [LifeTime] [FontSize] [DrawColor] [MessageCount] [OptionalObject] - 添加一個真正的消息到 LocalMessages 數組。
    • Index - LocalMessages 數組中用於放置新的消息的索引。
    • InMessageClass - 新消息的類(LocalMessage或其子類)。
    • CriticalString - 消息的文本。
    • Switch - 消息開關。消息了類決定了如何使用開關。
    • Position - 消息在屏幕上的垂直位置。
    • LifeTime - 消息顯示的持續時間量,以秒為單位。
    • FontSize - 顯示消息所使用的字體大小。使得該字體大小偏移 MessageFontOffset 的量,並得到的值傳給 GetFontSizeIndex() 函數來獲得顯示那個消息所使用的字體。
    • DrawColor -顯示消息時所使用的顏色。
    • MessageCount - 可選。當前 LocalMessages 數組中消息的數量。
    • OptionalObject - 可選。. 到和消息相連的對象的引用。這個消息類定義了如何使用那個對象。
  • GetScreenCoords [PosY] [ScreenX] [ScreenY] [InMessage] - 計算在屏幕上描畫LocalMessage的位置。
    • PosY - 消息的垂直位置。
    • ScreenX - 輸出。輸出水平位置,以像素為單位。
    • ScreenY - 輸出。輸出垂直位置,以像素為單位。
    • InMessage - 輸出。為其獲取屏幕位置的消息。
  • DrawMessage [i] [PosY] [DX] [DY] - 執行設置來顯示一個LocalMessage,並調用 DrawMessageText() 來顯示那個消息。
    • i - 要顯示的消息的 LocalMessages 數組中的索引值。
    • PosY - 消息在屏幕上的垂直位置。
    • DX - 輸出。輸出消息的文本的寬度。
    • DY - 輸出。輸出消息的文本的高度。
  • DrawMessageText [LocalMessage] [ScreenX] [ScreenY] - 描畫LocalMessage 的文本到屏幕上。
    • LocalMessage - 要顯示其文本的LocalMessage。
    • ScreenX - 在屏幕上描畫消息文本的水平位置,以像素為單位。
    • ScreenY - 在屏幕上描畫消息文本的垂直位置,以像素為單位。
  • DisplayLocalMessages - 執行LocalMessages的布局然後進行顯示。
  • DisplayKismetMessages - 顯示所有未定的Kismet DrawText(描畫文本)消息。

MobileHUD


MobileHUD類繼承於基類HUD ,並且添加了一些新功能,以滿足在移動設備上顯示HUD所需的額外要求,比如觸摸控制。如果您的遊戲是針對移動設備部署的,那麽您的HUD應該繼承MobileHUD類或者MobileHUD類的子類。

MobileHUD屬性

Controls(控制)

  • JoystickBackground - The texture containing the graphic for the background of the joystick elements.
  • JoystickBackgroundUVs - 這個TextureUVs(貼圖UVs) 指出了 JoystickBackground 貼圖中圖像的坐標。
  • JoystickHat - 這個貼圖包含了實際的遊戲控制桿元素的圖像。
  • JoystickHatUVs -這個TextureUVs(貼圖UVs) 指出了 JoystickHat 貼圖中圖像的坐標。
  • ButtonImages - 這是個貼圖數組,包含了屏幕上按鈕的圖形。
  • ButtonUVs -這是個TextureUVs(貼圖UVs)數組指出了 ButtonImages 中貼圖的坐標。
  • ButtonFont - 描畫屏幕上按鈕的標簽所使用的文字。
  • ButtonCaptionColor - 當描畫屏幕上按鈕的標簽時所使用的顏色。
  • TrackballBackground - 這個貼圖包含了跟蹤球元素的背景圖像。
  • TrackballBackgroundUVs - 這個TextureUVs(貼圖UVs)指出了 TrackballBackground 貼圖中圖像的坐標。
  • TrackballTouchIndicator - 這個貼圖包含了跟蹤球觸摸指示器的背景圖像。
  • TrackballTouchIndicatorUVs - 這個TextureUVs(貼圖UVs)指出了 TrackballTouchIndicator 貼圖中圖像的坐標。
  • SliderImages - 一個貼圖數組,包含了屏幕上滑動條的圖像。
  • SliderUVs - 這個TextureUVs(貼圖UVs)數組指出了 SliderImages 貼圖中圖像的坐標。

Debug(調試)

  • bDebugTouches - 如果為真,則顯示關於觸摸的調試信息。
  • bDebugZones - 如果為TRUE,將會顯示關於各種移動設備輸入區域的相關調試信息。
  • bDebugZonePresses - 如果為TRUE,僅當按下時顯示關於各種移動設備輸入區域的相關調試信息。

一般

  • bShowGameHUD - 如果該項為TRUE,那麽將顯示標準的遊戲 HUD。這為了支持完全地隱藏HUD並仍然支持ShowHUD命令所提供的。
  • bShowMobileHUD - 如果這項為TRUE,將顯示移動設備HUD (也就是輸入區域等)。
  • bForceMobileHUD - 如果該項為 TURE,那麽即使在非移動平臺上也顯示HUD。

傾斜

  • bShowMobileTilt - 如果這項為TRUE,那麽將會顯示設備傾斜。
  • MobileTilt[X/Y] - 用於顯示設備傾斜的水平位置和垂直位置。
  • MobileTiltSize - 顯示設備傾斜的尺寸。

MobileHUD函數

Drawing(描畫)

  • ShowMobileHUD - 返回是否顯示移動設備HUD。
  • RenderMobileMenu - 移動設備HUD菜單描畫函數。當完成移動設備HUD描畫後 PostRender() 調用該函數。

Zones(區域)

  • DrawInputZoneOverlays - 主要的移動設備HUD描畫函數,在其他對象上描畫輸入區域。當完成主要的HUD描畫後, PostRender() 調用該函數。
  • DrawMobileZone_Button [Zone] - 為給定的輸入區域描畫一個按鈕。
    • Zone - 為其描畫按鈕的移動設備輸入區域。
  • DrawMobileZone_Joystick [Zone] - 為給定的輸入區域描畫一個控制桿。
    • Zone - 用於描畫控制桿的移動設備輸入區域。
  • DrawMobileZone_Trackball [Zone] - 為給定區域描畫一個跟蹤球。
    • Zone - 為其描畫跟蹤球的移動設備輸入區域。
  • DrawMobileZone_Slider [Zone] - 為給定區域描畫一個滑動條。
    • Zone - 為其描畫滑動條的移動設備輸入區域。
  • DrawMobileTilt [MobileInput] - 使用給定MobilePlayerInput的傾斜信息描畫設備傾斜。
    • MobileInput - 將要顯示的提供傾斜信息的MobilePlayerInput (移動設備玩家輸入)。

UDKHUD


UDKHUD是派生層次最高的HUD類,它仍然包含native功能。

UDKHUD屬性

  • GlowFonts - 這種字體用於描畫具有閃光或光溢出效果的脈沖字體。數組中的 [0]元素存放著閃光的字體。[1]元素存放著描畫正常文本的字體。
  • PulseDuration - 文本產生閃光脈沖的時間長度。
  • PulseSplit - 當達到這個時間時脈沖將會從淡出效果變為淡入效果。
  • PulseMultiplier - 文本產生脈沖效果現象的程度 - 註意這個值將會和 1.0相加。(所以 PulseMultipler= 0.5 = 1.5)
  • TextRenderInfo - FontRenderInfo結構體存放了在字體渲染中使用的信息。這應該在HUD子類的默認屬性中進行設置,並把它傳入給任何需要它的 Canvas.DrawText() 函數。
  • ConsoleIconFont - 用於特定遊戲機平臺的字體。
  • BindTextFont - 當這些字體沒有在ConsoleIconFont中通過按鈕表示時,這種字體用於顯示輸入綁定。

UDKHUD 函數

  • DrawGlowText [Text] [X] [Y] [MaxHeightInPixels] [PulseTime] [bRightJustified] - 描畫具有閃光或光溢出效果的脈沖字體。
    • Text - 要顯示的文本字符串。
    • [X/Y] - 用於在屏幕上描畫文本的水平位置和垂直位置。
    • MaxHeightInPixels - 可選的。文本的最大高度。
    • PulseTime - 可選的。一次字體閃光所占用的時間。
    • bRightJustified - 可選的。如果該項為TRUE,那麽文本將會對齊到畫布的當前的剪切區域的右側邊緣處。
  • TranslateBindToFont [InBindStr] [DrawFont] [OutBindStr] - 把其中具有潛在漏掉的順序數據轉換為應該顯示的字體和字符串。
    • InBindStr - 包含漏掉數據的字符串。
    • DrawFont - 輸出. 輸出用於描畫字符串的字體;是ConsoleIconFont 或BindTextFont。
    • OutBindStr - 輸出。輸出剝離了漏掉數據的字符串。
  • DisplayHit [HitDir] [Damage] [damageType] - 顯示一個碰撞效果,展示傷害來源的方向。
    • HitDir - 指出了傷害來源方向的向量。
    • Damage - 所施加的傷害量。
    • damageType -傷害的類型。

Texture Atlas(貼圖組合)圖標坐標


在HUD中使用的圖形(圖標、圖片等)通常是作為一個貼圖組合的一部分來存儲的。這意味著多個圖標或圖片存儲在一個單獨的貼圖中,然後描畫那個貼圖的一個特定部分來顯示任何特定的圖標。

技術分享

貼圖組合中的獨立圖標是通過使用坐標來訪問的。虛幻引擎3中使用的標準方法是指出開始對貼圖進行采樣的位置的左上角像素的水平位置和垂直位置,及要采樣的長度和寬度(通常通過 U and V=來指定。) 這些坐標通常存儲在結構體中,也就是 =MobileHUD.TextureUVs UIRoot.TextureCoordinates 中。

技術分享

(官網)虛幻3--HUD技術指南