2012年4月8日 星期日

子原型

目前UDN上還沒有子原型(Sub-Archetype)的說明,因此在此簡單地介紹一下。

子原型指一個繼承另一個原型的原型。原本修改原型的屬性也會跟著修改所有實例的對應屬性,子原型也是一樣。修改母原型的屬性也會反應到子原型身上,當然也會反應到由子原型所建立的實例上。PhysicalMaterial的Parent屬性就有點類似子原型的功能。

使用者介面


其實UE一直都有支援子原型功能,只是沒有寫使用者介面讓開發者可以直接使用。直到2012年2月版的UDK才在內容瀏覽器的內容選單裡增加了建立子原型的選項。

2012年4月7日 星期六

自訂動畫元資料

UE提供讓開發者在動畫上附加額外自訂資料的功能,方法大致如下:
  • 擴充AnimMetaData類別撰寫自訂功能。
  • 開啟AnimSetViewer,找到要加資料的AnimSequence,然後在它的MetaData陣列新增自訂的元資料。

範例


以下程式碼示範如何自訂一個可以提早結束動畫的元資料:

2012年4月1日 星期日

取得socket或bone的位置

UE提供socket功能方便開發者指定一個相對於bone的位置。例如像手上拿著武器的時候,就可以將武器模型附著在人物模型的某個socket上。

而撰寫特效程式時,時常會需要取得骨架上的某個位置。其實可以只用一個name欄位來指定socket或bone,只要骨架上socket和bone的名稱不重覆就不會有問題。

不過UE沒有提供方便的函式直接取得socket或bone的位置,需要自行撰寫一個:

自訂聲音節點

UE的SoundCue提供混音、變調、衰減等多種音效功能,它可以讓開發者自訂節點來擴充新的功能。

聲音節點的基礎類別叫做SoundNode,它有一個陣列存放下一層子節點。多次播放同一個SoundCue並不會產生多份SoundNode來播放,所以像SoundNodeLooping這種需要額外記錄目前播放次數的情況,會把額外資料放在AudioComponent::SoundNodeData裡,它是一個位元陣列,由 AudioComponent::SoundNodeOffsetMap記錄不同SoundNode資料在該位元陣列的起始位置。為了方便寫碼,UE提供以下三個巨集:

自訂動畫節點

UE的動畫樹(AnimTree)提供動畫混合、變形混合、骨架控制三種功能。它可以讓開發者自訂節點來擴充新的功能,在此篇簡單說明一下如何自訂動畫節點。

動畫節點的基礎類別叫做AnimNode,其他的動畫節點都會直接或間接繼承自此類別。它的子類別主要可分為:
  • 代表動畫的葉節點
  • 混合子節點動畫的中間節點
前者通常繼承AnimNodeSequence類別而來
後者通常繼承AnimNodeBlendBase類別(或其子孫)而來

Unreal的繪圖底層界面

UE提供一個跨平台的繪圖底層界面,叫做Render Hardware Interface,簡稱RHI。它是以全域函式的形式給子系統去呼叫,例如RHISetViewport()、RHISetDepthState()、RHISetRenderTarget()等。在RHI.h的#include "RHIMethods.h"那行宣告這些全域函式。

而這些RHI全域函式的定義形式分成StaticRHI和DynamicRHI兩種。差別在於這些函式是轉呼靜態成員函式還是虛擬函式,根據不同平台擇一使用。

Windows DynamicRHI
Mac DynamicRHI
XBox360 StaticRHI
PS3 StaticRHI
PS Vita StaticRHI
WiiU StaticRHI