天天看點

《Unreal Engine 4藍圖可視化程式設計》一1.4 建立第一個藍圖

本節書摘來異步社群《unreal engine 4藍圖可視化程式設計》一書中的第1章,第1.4節,作者: brenden sewell 譯者: 陳東林 責編: 胡俊英,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

現在遊戲世界中放置了一個圓柱體,在當圓柱體被擊中時,我們需要為圓柱體賦上前一節建立的材質。最後一個互動是遊戲邏輯判斷圓柱體被選擇,然後将圓柱體的材質改變為紅色材質。為了建立這一行為并添加到圓柱體上,我們需要建立一個藍圖。建立藍圖的方式有很多種,但是為了簡便,我們可以建立藍圖并直接添加給圓柱體。為此,確定在場景中選中了cylindertarget對象。單擊細節面闆頂端的藍色藍圖/添加腳本(blueprint/add script)按鈕,将可看到路徑選擇視窗。

在這個項目中, 我們把所有的藍圖存放在firstpersonbp檔案夾的子檔案夾blueprints下,因為這個藍圖是為cylindertarget actor建立的,是以檔案名為預設的cylinder- target_blueprint即可,如圖1.13所示。

《Unreal Engine 4藍圖可視化程式設計》一1.4 建立第一個藍圖

現在内容浏覽器(content browser)的firstpersonbp >> blueprints檔案夾中可以看到cylindertarget_blueprint。輕按兩下打開該藍圖的藍圖編輯器,我們将看到圓柱體的視口視圖,如圖1.14所示。我們可以操作actor的一些預設屬性或者增加更多的元件,它們都包括很多自有邏輯使得actor更加複雜。我們将在後續章節中探讨元件(components),現在,我們需要建立一個簡單的藍圖并直接賦給actor。為此,單擊視口标簽旁邊的事件圖表(event graph)标簽。

圖1.14 視口視圖

事件圖表(見圖1.15)看起來應該很熟悉,因為它與我們之前使用的材質編輯器的視覺效果和功能上由很多相似之處。預設情況下,打開事件圖表時會有3個未連接配接也未使用的事件節點。事件(event)指遊戲中的一些動作(action),它作為藍圖做某件事情的觸發器。大多數藍圖遵循如下結構:事件(when)|條件(if)動作(do)。這個可以被文字描述為:當某件事情發生時,檢查x、y、z是否為真,如果為真,完成這一系列的動作。舉個例子,藍圖定義了我是否開槍,流程如下:當(when)扣動扳機,如果(if)子彈已上膛,進行(do)射擊。

在事件圖表中,列出的3個預設事件節點是用的最多的事件觸發器。當玩家(player)第一次開始玩遊戲時觸發事件begin play。當另一個actor開始與藍圖控制的現有actor發生觸碰或重疊時觸發事件actor begin overlap。事件tick在遊戲運作的每一幀觸發與之關聯的動作,幀率決定于電腦的配置,也影響着事件tick觸發動作的頻率。

我們希望每次射彈擊中圓柱體時,都能觸發“改變材質”這一動作。可以使用事件actor begin overlap節點來探測射彈對象與目标的網格是否重疊。我們将通過僅當另一個actor觸發目标actor時檢測來簡化這些。以一個簡潔的頁面開始吧,選中所有的預設事件,單擊鍵盤的[delete]鍵把它們都删除。

《Unreal Engine 4藍圖可視化程式設計》一1.4 建立第一個藍圖

為了建立檢測事件,在圖表空白區域單擊滑鼠右鍵,搜尋框中輸入“hit”,如圖1.16所示。找到事件hit(event hit)節點并選擇,當這個藍圖控制的actor被另一個actor觸發的事件hit。

當在事件圖表中添加了事件hit節點後,會看到事件hit節點上有許多顔色各異的輸出引腳。首先注意到節點右上角的白色類似三角形的引腳,這是執行引腳(execution pin)。它定義了動作序列中下一步要執行的動作。将不同節點的執行引腳連接配接在一起便組成了所有藍圖的基本功能。既然擁有了觸發器,那我們就需要找到一個動作,這個動作可以讓我們能夠改變actor的材質。

《Unreal Engine 4藍圖可視化程式設計》一1.4 建立第一個藍圖

從執行引腳拖出一根引線至節點右端的空白區域,将自動出現一個搜尋視窗,允許我們建立一個節點并将它與執行引腳相連。确認搜尋框内勾選了情境關聯(context sensitive)。這樣将搜尋結果限制在能夠被添加的節點中。在搜尋框内鍵入“set material”,選取set material(staticmeshcomponent)節點。

注意 小貼士  如果在勾選了情境關聯的情況下搜尋不到想查找的節點,可嘗試去勾選重新搜尋。即使這個節點在情境關聯搜尋時查找不到,它仍有可能可以添加到藍圖邏輯當中。

事件hit節點中的動作(action)如圖1.17所示。

《Unreal Engine 4藍圖可視化程式設計》一1.4 建立第一個藍圖

當使用者将set material節點放置到藍圖中後,便會注意到它已經與事件hit節點的執行引腳連接配接。當藍圖的actor被另外的actor擊中時,藍圖現在将會執行set material動作。然而,我們現在還沒有設定響應set material時将要調用的材質。

為了設定将調用的材質,單擊set material節點中的選擇資源(select asset),調出下拉清單,在搜尋框内輸入“red”來搜尋之前建立的targetred材質。查找到該材質後單擊它,将該資源添加到set material節點的材質區域,如圖1.18所示。

我們現在已經做好了改變目标圓柱體顔色的藍圖的準備工作,但是在儲存(save)藍圖之前,還需要編譯一下。編譯是将藍圖語言轉換為告訴計算機該如何操作的機器指令。單擊編輯器工具左上角的編譯(compile)按鈕,然後單擊儲存。

《Unreal Engine 4藍圖可視化程式設計》一1.4 建立第一個藍圖

既然我們已經設定了一個基礎的遊戲互動,運作測試一下,確定結果是否達到預期。關閉藍圖編輯器,在ue編輯器中單擊播放按鈕運作遊戲,嘗試跑動和射擊,與我們之前建立的cylindertarget actor發生碰撞,如圖1.19所示。

《Unreal Engine 4藍圖可視化程式設計》一1.4 建立第一個藍圖

當運作遊戲的時候,會看到目标圓柱體在被子彈擊中時,确實改變了顔色。這是遊戲架構的初始,它可以用于接收敵人對于玩家(player)動作的回報。你或許也會注意到玩家碰到目标圓柱體時,圓柱體也會改變顔色,然而我們希望隻有子彈擊中目标時才改變目标顔色。這些不可預見的結果在遊戲開發過程中很普遍,最好避免的方法就是頻繁地測試我們正在建立的遊戲。

為了修正藍圖中的bug,讓它僅對子彈擊中時做出反應并改變目标顔色,回到cylinder target_blueprint藍圖,繼續檢視事件hit節點。

在事件hit節點上餘下的輸出引腳,它們是存儲着關于事件資料的一些變量。這些資料可以被傳遞到其他節點。引腳的顔色代表着變量的資料類型,藍色引腳傳遞對象(object),例如actor;紅色引腳包含一個布爾型(true/false)變量。

随着接觸更複雜的藍圖,我們将學習更多的引腳類型,但現在,我們隻需要關心藍色的other輸出引腳。它包含其他actor的碰撞觸發事件hit的資料。這個在確定目标圓柱體隻在被子彈擊中時改變顔色很有用,而其他的actor碰到目标時不改變顔色。

為了確定僅對子彈做出響應,斷開事件hit節點與setmaterial節點之間的連接配接(斷開引腳連接配接的方法之一為:按住[alt]鍵,然後滑鼠左鍵單擊連線),從other引腳拖出一根引線到空白區域,在搜尋框内鍵入“projectile”,找到“類型轉換為firstpersonprojectile(cast to firstpersonprojectile)”并選擇,如圖1.20所示。

firstpersonprojectile是ue4引擎的第一人稱模闆中的藍圖,控制着子彈的行為。該節點使用類型轉換來確定:隻有在子彈actor擊中與轉換節點引用的對象相比對的圓柱體時,才将動作附加到節點的執行引腳。

《Unreal Engine 4藍圖可視化程式設計》一1.4 建立第一個藍圖

當節點出現時,可以看到在事件hit的other輸出引腳和轉換節點的object引腳之間有一根藍色的線相連(如果沒有自動連接配接,可以手動連上)。連接配接firstpersonprojectile節點的輸出執行引腳和set material節點的輸入執行引腳,如圖1.21所示。

《Unreal Engine 4藍圖可視化程式設計》一1.4 建立第一個藍圖

現在編譯、儲存,關閉藍圖界面後單擊播放按鈕進行測試。現在你會發現玩家碰到目标圓柱體時不會改變圓柱體顔色,隻有子彈擊中時才可以。

繼續閱讀