虛幻4藍(lán)圖編譯剖析(二)
2016-10-25 23:10 by 風(fēng)戀殘雪, 50 閱讀, 0 評(píng)論, 收藏, 編輯虛幻4編譯相關(guān)術(shù)語(yǔ)和類圖
虛幻引擎中的藍(lán)圖編譯跟常規(guī)的程序編譯多少是有一些不同的地方,但是基本原理是相通的。我們以普通的類藍(lán)圖為例,一個(gè)類中包含多個(gè)圖,每個(gè)圖中又可以包含一些子圖。一個(gè)圖會(huì)包含很多的節(jié)點(diǎn)(UEdGraphNode),每個(gè)節(jié)點(diǎn)可以包含若干引腳(UEdGraphPin)用來(lái)連接兩個(gè)節(jié)點(diǎn)。節(jié)點(diǎn)又分為執(zhí)行節(jié)點(diǎn)和純節(jié)點(diǎn)(Pure node,上面沒(méi)有執(zhí)行引腳)。還有一個(gè)模式類(UEdGraphSchema)用于驗(yàn)證語(yǔ)法是否正確等。類圖如下所示:
圖(UEdGraph)
虛幻4中許多其它的也是使用圖來(lái)實(shí)現(xiàn)的,所以它也有許多的派生類,比如UAIGraph、UAnimationGraph、UAnimationStateMachineGraph、UMaterialGraph等等。類圖如下所示:
節(jié)點(diǎn)(UEdGraphNode)
一個(gè)有向無(wú)環(huán)圖是由無(wú)數(shù)節(jié)點(diǎn)組成的,這個(gè)節(jié)點(diǎn)就是UEdGraphNode,因?yàn)樯厦嫣岬降膱D中有支持各種功能的圖,所以也就有各種各樣的節(jié)點(diǎn),下面我們只摘取一些節(jié)點(diǎn)類型,由于我們重點(diǎn)是講解藍(lán)圖編譯,所以我們把主要精力放在UK2Node上面,這個(gè)節(jié)點(diǎn)是所有藍(lán)圖節(jié)點(diǎn)的基類。類圖所示:
引腳(UEdGraphPin)
每個(gè)節(jié)點(diǎn)上可以有多個(gè)節(jié)點(diǎn),輸入、輸出節(jié)點(diǎn)以及參數(shù)引腳等等,這些引腳用于記錄跟哪些引腳相連、類型、默認(rèn)值等。
模式(UEdGraphSchema)
用于語(yǔ)法檢查(看兩個(gè)引腳是否可以相連、嘗試連接引腳)等功能,如上面所有因?yàn)橛卸喾N圖所以就需要多種模式。藍(lán)圖使用的是UEdGraphSchema_K2,動(dòng)畫以及UMG會(huì)有自己的Schema。類圖如下所示:
FKismetCompilerContext
真正執(zhí)行編譯工作的類,每編譯一次就會(huì)生成一個(gè)新的實(shí)例,用來(lái)存儲(chǔ)編譯類的引用以及藍(lán)圖等。整個(gè)編譯過(guò)程又分為好多步,是在Compile()函數(shù)里面做的。
FKismetFunctionContext
持有編譯一個(gè)函數(shù)的所有信息,包括指向相關(guān)圖(UEdGraph)的引用、屬性以及生成的函數(shù)等。
FBlueprintCompiledStatement