《精通unreal引擎技術(shù) 第一卷——unreal engine 3.0關(guān)卡設(shè)計藝術(shù)》 內(nèi)容試讀之:
可視化腳本設(shè)計系統(tǒng)--kismet
書籍介紹:unreal引擎是全球領(lǐng)先的游戲開發(fā)商和引擎研發(fā)商epic games的一款核心產(chǎn)品。作為一款成熟的商業(yè)引擎,unreal引擎以其出色表現(xiàn)和強(qiáng)大的功能征服著游戲開發(fā)業(yè),成為全球一流游戲公司購買引擎的首選產(chǎn)品。本書全面介紹了unreal引擎在動畫、材質(zhì)、特效、可以化腳本編輯,實時演算方面的強(qiáng)大功能,并對使用unreal引擎制作游戲的方法與技巧進(jìn)行了詳細(xì)闡述。
本書完整介紹了關(guān)卡設(shè)計及制作的全過程,內(nèi)容全面、結(jié)構(gòu)清晰,可作為游戲開發(fā)愛好者進(jìn)行關(guān)卡設(shè)計的指導(dǎo)用書,也可供游戲卡關(guān)設(shè)計師、游戲美術(shù)師及游戲開發(fā)人員參考。 本文節(jié)選自書中“第九章-kismet介紹”(可視化腳本設(shè)計系統(tǒng)) 的一小部分。
◆◆◆kismet總覽
簡單來講,kismet是一個可視化腳本設(shè)計系統(tǒng),允許用戶快速簡便地創(chuàng)設(shè)復(fù)雜的腳本序列,而無需具有豐富的編程知識。然而,這番簡述并未闡明kismet對gameplay的重要性。事實上,在gameplay中任何的有趣事物都會多多少少地用到kismet,從為玩家打開一扇門的簡單任務(wù),到玩家在關(guān)卡的某一關(guān)鍵位置手持某一特殊物體時,調(diào)入一個錯綜復(fù)雜的事件系統(tǒng),都能見到它的身影。
kismet:巨大網(wǎng)絡(luò)組合圖
kismet是以多個模塊的網(wǎng)絡(luò)組合形式出現(xiàn),這些模塊被稱為序列對象(sequnce objects),它們之間以連線連接(如圖1.1所示)。各序列對象都實現(xiàn)一個特定功能,而它們之間的連線用于在序列對象間的信息傳輸。雖然這些網(wǎng)絡(luò)看上去可能會非常復(fù)雜,但只要明確自己的創(chuàng)作意圖,您就會很快發(fā)現(xiàn)創(chuàng)建這樣的網(wǎng)絡(luò)可以是一件輕而易舉的工作。
圖1.1——這個簡單kismet序列會在玩家接觸到觸發(fā)器時傳送他們。
上圖所示序列可表述為:
當(dāng)玩家接觸 “trigger_0”時,將玩家傳送至“teleporter_0”。
kismet是關(guān)卡交互的中樞,因為它為藝術(shù)類工作者(非編程類工作人員)提供了創(chuàng)建復(fù)雜腳本的方法,以實現(xiàn)他們所設(shè)計的關(guān)卡。本章的目的是使您快速了解kismet的工作方法,并協(xié)助您生成一系列基于gameplay的序列。跟著我們的進(jìn)度,您完成的指南將越來越復(fù)雜,由這個過程您將領(lǐng)略到如何創(chuàng)建涵蓋極其簡單至有適當(dāng)復(fù)雜度的序列。
◆◆◆kismet入門
現(xiàn)在您已經(jīng)了解了kismet的基本情況,就讓我們來簡單看一下它在unrealed中的位置,同時快速了解一下它的界面(如圖1.2所示)。
通常是通過點擊位于工具欄中間的“打開kismet”按鈕來進(jìn)入。您也可以從ui編輯器系統(tǒng)內(nèi)部進(jìn)入kismet,我們將在ui章節(jié)中討論此ui編輯器系統(tǒng)。
圖1.2——1)菜單欄2) 工具欄 3) 主序列窗口 4) 屬性窗口 5) 序列瀏覽器窗口
至此,您已初步了解的kismet的情況,以及它的位置和外觀,就讓我們動手來創(chuàng)建一個實際的kismet序列吧!在第一篇指南中,您將使用kismet創(chuàng)建一個簡單的光源開關(guān)。
◆◆◆使用kismet觸發(fā)光源
1. 打開unrealed,并打開本章文件中dm-ch_09_klightsound_start.ut3地圖文件。這是一個簡單的平臺關(guān)卡,僅有一個可供瀏覽的昏暗光源(如圖1.3所示)。我們將建立一個系統(tǒng),通過它能夠打開第二個光源并最后播放一個聲音。
圖1.3——lightsound demo關(guān)卡看起來就是一個空曠的平臺。
2. 在透視視口中,在關(guān)卡主平臺的一個拐角附近右擊,從關(guān)聯(lián)菜單中選擇add actor > add trigger。
立即打開此新建的actor的屬性窗口(雙擊或按f4鍵)。在advanced(進(jìn)階)類別中,設(shè)置bhidden(隱藏)屬性為否(取消對此復(fù)選框的勾選)。如此一來我們在測試此關(guān)卡時就能看到觸發(fā)器了。 (如圖1.4所示)
圖1.4——在此,您可以看到觸發(fā)器已置于關(guān)卡的一角。
3. 我們現(xiàn)在需要一個可觸發(fā)的光源,可以按下列步驟來創(chuàng)建:
a. 在unrealed主菜單欄中,選擇view > browser windows > actor classes。
b. 在actor類瀏覽器內(nèi),展開light > point light并選中pointlighttoggleable(可開關(guān)點光源)。(如圖1.5所示)
圖1.5——展開相關(guān)類以顯示pointlighttoggleable(可開關(guān)點光源)。
c. 在透視視口中,在關(guān)卡中觸發(fā)器的相反方向角落右擊,并選擇add pointlighttoggleable(添加可開關(guān)點光源)。
d. 使用平移控件將光源從關(guān)卡的底面向上移動。(如圖1.6所示)
圖1.6——將光源放置于觸發(fā)器的對面角落。
e. 打開光源的屬性窗口,并在light類別下,展開lightcomponent(光源組件),取消勾選benabled(開啟)屬性。這將使光源在關(guān)卡啟動時關(guān)閉。
4. 點擊打開kismet按鈕 以打開kismet編輯器。現(xiàn)在我們來創(chuàng)建一個簡單的序列,使玩家在接觸到觸發(fā)器時打開和關(guān)閉光源。
5. 我們從得知玩家何時接觸觸發(fā)器的事件開始。在透視視口中,選擇觸發(fā)器actor。然后在kismet窗口中右擊sequence(序列)窗口中的空白區(qū)域,并從關(guān)聯(lián)菜單選擇new event using trigger_1 > touch。由此我們新建了一個touch(接觸)事件,使我們可以在玩家進(jìn)入觸發(fā)器接觸半徑時發(fā)起某些動作。 (如圖1.7所示)
圖1.7——已新建了touch(接觸)事件。
6. 現(xiàn)在我們需要在觸發(fā)器被接觸時建立一個發(fā)生動作。在sequence(序列)窗口的空白區(qū)域、touch(接觸)事件的右方某處,右擊并選擇new action > toggle > toggle。您可以通過按下ctrl鍵拖動toggle(開關(guān))序列對象對其重新定位,正如在材質(zhì)編輯器中對象的移動方法一樣。(如圖1.8所示)
圖1.8——將toggle(開關(guān))動作序列對象置于touch(接觸)對象的右方。
7. 僅僅創(chuàng)建一個toggle(開關(guān))序列對象是不夠的。我們需要通知kismet所接觸的確切對象。要實現(xiàn)這個目標(biāo),請按照下列步驟:
a. 在透視視口中,選擇之前創(chuàng)建的pointlighttoggleable(可開關(guān)點光源)。
b. 回到kismet窗口,右擊toggle(開關(guān))對象之下的sequence(序列)窗口空白區(qū)域,并選擇new object var using pointlighttoggleable_1。由此創(chuàng)建了一個直接綁定至關(guān)卡中pointlighttoggleable actor(可開關(guān)點光源actor)的變量。 (如圖1.9所示)
圖1.9——現(xiàn)在已經(jīng)為新建的對象變量指定了pointlighttogglable actor(可開關(guān)點光源actor)。
c. 在toggle(開關(guān))對象上,可以看到在“target(目標(biāo))”字樣下面有一個粉色的輸入小方塊。從該輸入端拖出一條連線將其連至pointlighttoggleable_1。觸發(fā)器對象現(xiàn)在已經(jīng)與光源連接,并能夠進(jìn)行打開與關(guān)閉動作了。 (如圖1.10所示)
圖1.10——在將新建對象變量連接至toggle(開關(guān))的target(目標(biāo))輸入端的情況下,kismet可利用toggle(開關(guān))來控制pointlighttoggleable_1了。
8. 最后一步是將我們的touch(接觸)事件連接至toggle(開關(guān))動作,該動作將在玩家進(jìn)入到觸發(fā)器范圍時通知kismet,并觸發(fā)光源狀態(tài)。
從touch(接觸)對象的touched(已接觸)輸出端拖出一條連線,連接至toggle(開關(guān))對象的turn on(打開)輸入端。(如圖1.11所示)
圖1.11——將兩個序列對象連接在一起之后,玩家在接觸到觸發(fā)器時kismet就“懂得”了要“觸發(fā)”toggle(開關(guān))序列對象。
9.點擊bulid all button 按鈕, 重建光照,保存關(guān)卡,并測試關(guān)卡中的新建觸發(fā)器。您既可以向關(guān)卡中加入一個playerstart actor,或者右擊地面,選擇play from here(從此播放)。
開始時關(guān)卡中的光照將會很昏暗。當(dāng)您的游戲人物走進(jìn)觸發(fā)器范圍時,光源就會打開了。然而,此時的光源僅僅是打開了一次并無限期保持打開狀態(tài)。在下一篇指南中,我們將改變touch(接觸)事件,使其可以多次開關(guān),并對序列進(jìn)行重新安排以便在玩家不再接觸觸發(fā)器時關(guān)閉光源。我們也會來學(xué)習(xí)一下在觸發(fā)器被接觸和“未接觸”時發(fā)出的觸發(fā)音效。 |