《Minecraft腳本引擎指南:從入門到抬棺送走》:【第一章】Hello System!

大家好,我是你們的兔頭老鴿乾山瑤,我又來啦(`?ω?′)
本指南基礎(chǔ)更新頻率為周更(時間有空余的時候可能會一周多更)。
鄙人水平有限,撰寫過程中難免出錯,還望各位不吝斧正,多多包涵。
本章節(jié)所使用的示例源碼評論區(qū)置頂自取。(即便如此,還是希望各位能對照源碼自己手打一遍加深印象=A=)

本章我們將學習如何在行為包中使用腳本引擎并在游戲中輸出Hello World字樣,同時初步了解系統(tǒng)這一對象的使用。

Hello World!
????在本小節(jié)中,我們將實現(xiàn)編程學習中最經(jīng)典的一個例子,在游戲中輸出“Hello World”字樣。
? ? 首先構(gòu)建一個行為包并配置好,接著在行為包根目錄下新建一個名為scripts的文件夾,并在該文件夾下新建client與server文件夾。

? ??client文件夾,顧名思義,儲存了在每個獨立玩家客戶端運行的代碼文件。其代碼可用于控制和用戶的交互(UI),監(jiān)聽處理一些客戶端可用事件以及處理一些對特定玩家的操作。
? ??server文件夾則儲存了服務(wù)端的代碼文件。其代碼用以控制數(shù)據(jù)的操作與存儲,也就是方塊數(shù)據(jù)的獲取與處理、組件的獲取與應(yīng)用、實體的生成及處理、以及服務(wù)端可用事件的監(jiān)聽處理等等。
? ?client及server文件夾下皆可儲存任意數(shù)量的js文件或文件夾,在進入加載了該行為包的存檔時會將這兩個文件夾中的所有js文件應(yīng)用至游戲中,這些腳本將同時且獨立在游戲中發(fā)揮效用。

????接著我們在行為包的manifest.json文件中新增以下紅框中的模塊(module)代碼

????注意該模塊的類型:client_data,該模塊用于告訴游戲:“這個包使用了腳本,進存檔的時候記得把server和client中的所有腳本文件都加載一下”
????接著我們在client文件夾下新建一個js文件,名字無關(guān)緊要,能表達該js文件功能即可,這里我們命名為GuideClientScript,并在其中鍵入以下代碼:

????這里我們在獲取到系統(tǒng)對象后重寫了它的initialize回調(diào)函數(shù),這是系統(tǒng)被注冊后立即執(zhí)行的第一個回調(diào)函數(shù),該函數(shù)將在腳本被加載后立即回調(diào),此時世界和玩家都未加載。
????類似的,系統(tǒng)對象還提供了其他幾種回調(diào)函數(shù):

????接著我們向initialize函數(shù)中鍵入以下代碼:

????對于sendMessage("Hello World!!!")方法,其實是我們這里自行封裝的一個方法,它大概長這個樣子:

????完整的代碼如下:

????上面的代碼實現(xiàn)了在玩家進入世界后在消息欄中輸出“Hello World!!!”字樣
????接著我們在游戲中加載該行為包,并添加至某個存檔,注意需開啟實驗玩法腳本才能起作用。

????進入游戲后即可看到如下消息

????進入游戲后的界面是沒有消息提示的,您需打開消息面板才能看到,應(yīng)該是個特性(老bugjump了),將會在【生命周期】中詳述,To Stay Tuned。
????至此,您經(jīng)歷了一個完整的腳本開發(fā)流程并成功使用腳本在游戲中輸出了一行內(nèi)容為:“Hello World!!!”的文本!

????結(jié)束了?其實我們還可以接著搞點新花樣,server文件夾還沒用呢。
????同樣的,我們在server文件夾下新建一個js文件,名稱無特別要求,這里我們命名為GuideServerScript,并在其中鍵入以下代碼:

? ??大致寫法和client中的代碼類似,這里簡單做了注釋,在游戲中運行效果如下:

? ?? 如果你嘗試將這兩個文件中initialize方法中的內(nèi)容互換,你會發(fā)現(xiàn)他們不起作用了,為什么呢?
????下一章【事件系統(tǒng)】里或許有你要的答案。

你知道嗎
獲取到的system對象是可編輯的,您可以將您的自定義函數(shù)或是變量添加至system對象中,并在別處調(diào)用(當然只能在同一js文件中使用):
system.pick = function(){}
system.pick();