《精通unreal引擎技術 第一卷——unreal engine 3.0關卡設計藝術》 內容試讀之:
可視化腳本設計系統(tǒng)--kismet
書籍介紹:unreal引擎是全球領先的游戲開發(fā)商和引擎研發(fā)商epic games的一款核心產(chǎn)品。作為一款成熟的商業(yè)引擎,unreal引擎以其出色表現(xiàn)和強大的功能征服著游戲開發(fā)業(yè),成為全球一流游戲公司購買引擎的首選產(chǎn)品。本書全面介紹了unreal引擎在動畫、材質、特效、可以化腳本編輯,實時演算方面的強大功能,并對使用unreal引擎制作游戲的方法與技巧進行了詳細闡述。
本書完整介紹了關卡設計及制作的全過程,內容全面、結構清晰,可作為游戲開發(fā)愛好者進行關卡設計的指導用書,也可供游戲卡關設計師、游戲美術師及游戲開發(fā)人員參考。 本文節(jié)選自書中“第九章-kismet介紹”(可視化腳本設計系統(tǒng)) 的一小部分。
◆◆◆kismet總覽
簡單來講,kismet是一個可視化腳本設計系統(tǒng),允許用戶快速簡便地創(chuàng)設復雜的腳本序列,而無需具有豐富的編程知識。然而,這番簡述并未闡明kismet對gameplay的重要性。事實上,在gameplay中任何的有趣事物都會多多少少地用到kismet,從為玩家打開一扇門的簡單任務,到玩家在關卡的某一關鍵位置手持某一特殊物體時,調入一個錯綜復雜的事件系統(tǒng),都能見到它的身影。
kismet:巨大網(wǎng)絡組合圖
kismet是以多個模塊的網(wǎng)絡組合形式出現(xiàn),這些模塊被稱為序列對象(sequnce objects),它們之間以連線連接(如圖1.1所示)。各序列對象都實現(xiàn)一個特定功能,而它們之間的連線用于在序列對象間的信息傳輸。雖然這些網(wǎng)絡看上去可能會非常復雜,但只要明確自己的創(chuàng)作意圖,您就會很快發(fā)現(xiàn)創(chuàng)建這樣的網(wǎng)絡可以是一件輕而易舉的工作。

圖1.1——這個簡單kismet序列會在玩家接觸到觸發(fā)器時傳送他們。
上圖所示序列可表述為:
當玩家接觸 “trigger_0”時,將玩家傳送至“teleporter_0”。
kismet是關卡交互的中樞,因為它為藝術類工作者(非編程類工作人員)提供了創(chuàng)建復雜腳本的方法,以實現(xiàn)他們所設計的關卡。本章的目的是使您快速了解kismet的工作方法,并協(xié)助您生成一系列基于gameplay的序列。跟著我們的進度,您完成的指南將越來越復雜,由這個過程您將領略到如何創(chuàng)建涵蓋極其簡單至有適當復雜度的序列。
◆◆◆kismet入門
現(xiàn)在您已經(jīng)了解了kismet的基本情況,就讓我們來簡單看一下它在unrealed中的位置,同時快速了解一下它的界面(如圖1.2所示)。
通常是通過點擊位于工具欄中間的“打開kismet”按鈕來進入。您也可以從ui編輯器系統(tǒng)內部進入kismet,我們將在ui章節(jié)中討論此ui編輯器系統(tǒng)。

圖1.2——1)菜單欄2) 工具欄 3) 主序列窗口 4) 屬性窗口 5) 序列瀏覽器窗口
至此,您已初步了解的kismet的情況,以及它的位置和外觀,就讓我們動手來創(chuàng)建一個實際的kismet序列吧!在第一篇指南中,您將使用kismet創(chuàng)建一個簡單的光源開關。
◆◆◆使用kismet觸發(fā)光源
1. 打開unrealed,并打開本章文件中dm-ch_09_klightsound_start.ut3地圖文件。這是一個簡單的平臺關卡,僅有一個可供瀏覽的昏暗光源(如圖1.3所示)。我們將建立一個系統(tǒng),通過它能夠打開第二個光源并最后播放一個聲音。

圖1.3——lightsound demo關卡看起來就是一個空曠的平臺。
2. 在透視視口中,在關卡主平臺的一個拐角附近右擊,從關聯(lián)菜單中選擇add actor > add trigger。
立即打開此新建的actor的屬性窗口(雙擊或按f4鍵)。在advanced(進階)類別中,設置bhidden(隱藏)屬性為否(取消對此復選框的勾選)。如此一來我們在測試此關卡時就能看到觸發(fā)器了。 (如圖1.4所示)

圖1.4——在此,您可以看到觸發(fā)器已置于關卡的一角。
3. 我們現(xiàn)在需要一個可觸發(fā)的光源,可以按下列步驟來創(chuàng)建:
a. 在unrealed主菜單欄中,選擇view > browser windows > actor classes。
b. 在actor類瀏覽器內,展開light > point light并選中pointlighttoggleable(可開關點光源)。(如圖1.5所示)

圖1.5——展開相關類以顯示pointlighttoggleable(可開關點光源)。
c. 在透視視口中,在關卡中觸發(fā)器的相反方向角落右擊,并選擇add pointlighttoggleable(添加可開關點光源)。
d. 使用平移控件將光源從關卡的底面向上移動。(如圖1.6所示)

圖1.6——將光源放置于觸發(fā)器的對面角落。
e. 打開光源的屬性窗口,并在light類別下,展開lightcomponent(光源組件),取消勾選benabled(開啟)屬性。這將使光源在關卡啟動時關閉。
4. 點擊打開kismet按鈕 以打開kismet編輯器,F(xiàn)在我們來創(chuàng)建一個簡單的序列,使玩家在接觸到觸發(fā)器時打開和關閉光源。
5. 我們從得知玩家何時接觸觸發(fā)器的事件開始。在透視視口中,選擇觸發(fā)器actor。然后在kismet窗口中右擊sequence(序列)窗口中的空白區(qū)域,并從關聯(lián)菜單選擇new event using trigger_1 > touch。由此我們新建了一個touch(接觸)事件,使我們可以在玩家進入觸發(fā)器接觸半徑時發(fā)起某些動作。 (如圖1.7所示)

圖1.7——已新建了touch(接觸)事件。
6. 現(xiàn)在我們需要在觸發(fā)器被接觸時建立一個發(fā)生動作。在sequence(序列)窗口的空白區(qū)域、touch(接觸)事件的右方某處,右擊并選擇new action > toggle > toggle。您可以通過按下ctrl鍵拖動toggle(開關)序列對象對其重新定位,正如在材質編輯器中對象的移動方法一樣。(如圖1.8所示)

圖1.8——將toggle(開關)動作序列對象置于touch(接觸)對象的右方。
7. 僅僅創(chuàng)建一個toggle(開關)序列對象是不夠的。我們需要通知kismet所接觸的確切對象。要實現(xiàn)這個目標,請按照下列步驟:
a. 在透視視口中,選擇之前創(chuàng)建的pointlighttoggleable(可開關點光源)。
b. 回到kismet窗口,右擊toggle(開關)對象之下的sequence(序列)窗口空白區(qū)域,并選擇new object var using pointlighttoggleable_1。由此創(chuàng)建了一個直接綁定至關卡中pointlighttoggleable actor(可開關點光源actor)的變量。 (如圖1.9所示)

圖1.9——現(xiàn)在已經(jīng)為新建的對象變量指定了pointlighttogglable actor(可開關點光源actor)。
c. 在toggle(開關)對象上,可以看到在“target(目標)”字樣下面有一個粉色的輸入小方塊。從該輸入端拖出一條連線將其連至pointlighttoggleable_1。觸發(fā)器對象現(xiàn)在已經(jīng)與光源連接,并能夠進行打開與關閉動作了。 (如圖1.10所示)

圖1.10——在將新建對象變量連接至toggle(開關)的target(目標)輸入端的情況下,kismet可利用toggle(開關)來控制pointlighttoggleable_1了。
8. 最后一步是將我們的touch(接觸)事件連接至toggle(開關)動作,該動作將在玩家進入到觸發(fā)器范圍時通知kismet,并觸發(fā)光源狀態(tài)。
從touch(接觸)對象的touched(已接觸)輸出端拖出一條連線,連接至toggle(開關)對象的turn on(打開)輸入端。(如圖1.11所示)

圖1.11——將兩個序列對象連接在一起之后,玩家在接觸到觸發(fā)器時kismet就“懂得”了要“觸發(fā)”toggle(開關)序列對象。
9.點擊bulid all button 按鈕, 重建光照,保存關卡,并測試關卡中的新建觸發(fā)器。您既可以向關卡中加入一個playerstart actor,或者右擊地面,選擇play from here(從此播放)。
開始時關卡中的光照將會很昏暗。當您的游戲人物走進觸發(fā)器范圍時,光源就會打開了。然而,此時的光源僅僅是打開了一次并無限期保持打開狀態(tài)。在下一篇指南中,我們將改變touch(接觸)事件,使其可以多次開關,并對序列進行重新安排以便在玩家不再接觸觸發(fā)器時關閉光源。我們也會來學習一下在觸發(fā)器被接觸和“未接觸”時發(fā)出的觸發(fā)音效。 |