跳轉到內容

Blender 3D: 從新手到高手/迷宮遊戲引擎教程

來自華夏公益教科書,開放的書籍,為開放的世界

本教程旨在以遊戲的形式,對 Blender 遊戲引擎進行中級介紹,它是平臺遊戲:建立與控制的續篇。它需要你熟悉 Blender 的 UI,簡單的命令(比如用AKEY選擇)和基本的建模技能。我們將在 Blender 中建立的遊戲將具有以下特性

  1. 一個由 WASD 鍵控制的主角
  2. 一個沒有牆壁的迷宮表面
  3. 掉出迷宮會死亡
  4. 多個關卡
  5. 動態障礙物
  6. 迷宮中有一個目標,它會把你傳送到下一關

本教程是為 2.44 版本編寫的,並且已在所有更高版本(截至 2008 年 4 月)中測試過



迷宮表面

[編輯 | 編輯原始碼]

現在我們來製作迷宮。當你建立迷宮表面的路徑時,請記住你需要一個起點和一個目標。

選擇面
  1. 清空場景;選擇所有(AKEY),刪除選定專案(XKEYENTER
  2. 進入頂檢視 (NUM7)
  3. 新增網格 (SPACE → 新增 → 網格 → 網格) 具有 X 和 Y 解析度為 16
  4. 將網格縮放 24 倍 (SKEY,輸入 24,ENTER)
  5. 選擇網格後進入編輯模式 (TAB)
  6. 進入面選擇模式 (CTRL+TAB)
  7. 開始選擇面以製作二維迷宮(使用BKEY繪製選擇框)
  8. 選擇面後,複製這些面 (SHIFT+DRMB)
  9. 將這些面移開原始網格 (GKEY 或移動小部件 CTR+ALT+GKEY)
  10. 刪除原始網格
  11. 使用GKEY或在編輯按鈕 (F9) 的“網格”面板中按下“居中”按鈕來居中迷宮


你現在應該有一個二維迷宮。在遊戲引擎中,我們只看到每個面的一個側面,所以這個迷宮從下面看時將不會出現,而從迷宮表面本身看時將明顯是二維的。這是不可取的,因此我們將透過向下擠出迷宮表面來使我們的迷宮三維化。

擠出的迷宮
  1. 進入側檢視 (NUM3)
  2. 選擇所有面 (AKEY)
  3. 向下擠出,-1 個單位 (EKEY區域),按住 CTR 以限制為 1 個單位增量,或者手動輸入值 -1,就像你在開始時縮放網格一樣。
  4. LMB 接受操作,或 RMB 取消面的移動。如果你取消了它,面將會擠出,但只是不會移動。你可以撤銷操作 (CTRL+Z),或刪除你已擠出的頂點/面 (WKEY移除重複)。


你的迷宮現在已經完成了,只缺少一個被困在裡面的人……

擠出鼻子

我們將建立一個非常基本的角色,足以說明本教程中要傳達的概念。你可以根據自己的意願製作一個複雜或基本的角色,但重要的是始終在你的主角上有一個方向指示器,否則玩家可能會感到困惑。所以,我們將使用一個帶有“鼻子”的原始體(即一個從物件中心擠出的面或頂點,以便提供一個旋轉參考點)。在本教程中我將使用一個圓錐體,僅僅因為它們不太容易滾動。

旋轉到角色將移動的方向
  1. 進入頂檢視 (NUM7)
  2. 新增圓錐體 (SPACE網格圓錐體,使用預設值)
  3. 選擇圓錐體並進入編輯模式 (TAB)
  4. 進入面選擇模式 (CTRL+TAB)
  5. 選擇圓錐體側面上的一個面
  6. 將它擠出大約 1/4 個單位或更少 (EKEY)
  7. 合併擠出的面以使鼻子尖銳 (WKEY合併在中心)
  8. 進入物件模式 (TAB)
  9. 旋轉圓錐體,使鼻子與正 Y 軸對齊 (RKEY,與綠色箭頭對齊)


你現在已經有了你的角色(不是那種皮克斯風格的,但目前夠用了)。現在我們只需要給它動力。


注意:從第 8 點到第 9 點,似乎圓錐體應該旋轉,使其“鼻子”與物件模式下的 Y 軸對齊,但在完成此操作後,我發現圓錐體仍然在原始 Y 軸方向(在旋轉之前)移動。為了解決這個問題,我改為在編輯模式下進行“鼻子”與 Y 軸的對齊,這似乎解決了問題。

現在我們將透過使用 WASD 鍵來使角色移動。為了做到這一點,遊戲邏輯需要與 WASD 鍵相關聯。複製螢幕截圖中看到的配置,注意要包括左上角的凸包多面體碰撞,以及按下“L”按鈕,這使得力矩和轉矩相對於該物件而不是全域性的。如果力是全域性的,主角將繼續沿直線移動,即使轉彎也是如此。


  1. 轉到邏輯按鈕(紫色吃豆人圖示或F4
  2. 新增四個感測器、控制器和執行器。
  3. 最大化邏輯視窗 (CTRL+UPKEY)
  4. 複製下面螢幕截圖中看到的配置。

Blender Game logic and Physics in version 2.76 and higher. The "physics" window is to be found by clicking on the last symbol of the properties window (on the right)

(注意:我使用 Actor->Dynamic 進行模擬,因為在 2.49b 中無法同時使用動態和剛體。經過一些測試,它似乎執行正常。)

dLoc/dRot 與 力/轉矩

本教程中的角色邏輯與之前平臺遊戲邏輯非常相似,但不同之處在於它使用力矩和轉矩,而不是分別使用 dLoc 和 dRot。這兩個之間的區別是,力和轉矩在子彈物理引擎中移動和旋轉物件,在過程中應用摩擦和碰撞,而 dLoc 和 dRot 移動和旋轉物件而不考慮任何其他“actor”(計算到物理引擎計算中的物件)。雖然 dLoc 和 dRot 會在大多數迷宮遊戲中起作用,但許多其他情況需要力和轉矩。然而,大多數這些情況發生在更復雜的遊戲中,這些遊戲與動態物件的互動很多。在本教程的後面,我們將向迷宮新增動態物件,使用力的原因將變得清晰。

現在是時候對我們的遊戲進行第一次測試了。

  1. 在迷宮上方新增一個光源 (SPACE),在正面檢視 (NUM1) 中對齊
  2. 按下NUM5進入透視檢視模式,它提供一個真實的檢視,而不是物件隨距離保持相同大小的檢視。確保你在編輯時切換回正投影檢視 (NUM5)
  3. 進入紋理模式 (ALT+ZKEY) -- 按下 ZKEY 切換回實體檢視模式
  4. 切換到頂檢視 (NUM7) 或攝像機檢視(在我們安裝攝像機後) (NUM0)
  5. PKEY 開始遊戲
  6. ESC 退出遊戲測試

如果你收到“沒有攝像機”錯誤,請忽略它。我們稍後會新增攝像機。

如果你的角色根本沒有移動,請確保你在邏輯面板中繪製了執行器之間的連線“線”,以及將“Actor”的“Dynamic”和“Rigid Body”按鈕設定為 True。

你現在應該有一個在迷宮中快速移動的圓錐體。


(新手問題 1:我的圓錐體在我不按 A 或 D 的情況下自行旋轉。它還喜歡在迷宮表面尋找隱藏或不存在的凸起。我該如何解決?)

(NQ1 的答案:如果我理解你的問題。如果我使用扭矩來旋轉,使用力來向前移動,並按下向前,然後轉彎,它就開始失控旋轉。我的解決方案是使用旋轉而不是扭矩。)

新手問題 2:圓錐體直接穿過了迷宮。我該如何讓迷宮阻擋圓錐體?

NQ2 的答案:首先,確保你的圓錐體在遊戲引擎啟動之前沒有完全或部分進入迷宮。其次,選擇你的圓錐體(在我的示例中命名為“主角”,然後回到屬性視窗中的“物理”屬性。如果你沒有看到屬性視窗,請按N 鍵,並在螢幕右側查詢。在“物理型別”下,確保在下拉選單中選擇了“動態”或“剛體”。然後,向下滾動到“碰撞邊界”,並勾選該框。你還可以從“邊界”下拉選單中選擇一個形狀,例如“圓錐體”。

墜落

[edit | edit source]

我們現在將實現“從迷宮中掉落時死亡”功能。為了實現這一點,我們將新增一些內容,讓我們能夠檢查圓錐體是否從迷宮中掉落。最簡單的方法是使用一個包含整個迷宮的“天空穹頂”物件,雖然有一些更優雅的方法可以實現目標,但我們將使用天空穹頂方法,因為它簡單易懂。從現在起,我們需要用啟用的一層和二層(SHIFT+2 鍵)來測試迷宮。

  1. 新增一個新的立方體
  2. 將其調整為巨大比例(S 鍵,只要大到足以包含迷宮及其內部即可)
  3. 可選:將其移動到第二層(M 鍵2 鍵回車鍵


現在你已經有了巨大的立方體,轉到邏輯面板,新增一個感測器、控制器、執行器集,並將它們設定為螢幕截圖所示。

  1. 感測器:觸控,在“屬性”下輸入你的角色名稱(這裡為“主角”)

如果主角(並且只有主角)碰到地面,這將重啟場景。

  1. 控制器:並且
  2. 執行器:場景,重啟
  3. 屬性:物理(左側最後一個圖示),啟用執行器按鈕以及“幽靈”和“不可見”

這將允許動態障礙物(稍後新增)穿過並不會卡在那裡!


Blender death skydome (Game Logic)


如果你現在測試遊戲,你會看到當你從迷宮中掉下來時遊戲會重啟。正如我們之前討論的,遊戲引擎中的面是一面的,所以你應該看不到立方體。


(新手問題 1:當我這樣做時,我的圓錐體一直掉下來。當我將立方體移回第一層時,它工作正常。我是否遺漏了什麼?) (新手說明:好吧,我每次都遇到同樣的問題,只是在第一層,但當我在第一層時,我只是不斷掉下來)

(答案:教程說要建立第二層的立方體,但層級並不重要。確保你在選擇了一層和二層的情況下測試遊戲。還要仔細檢查“天空立方體”的邏輯)

(答案 2:我遇到了同樣的問題。我透過用網格替換立方體解決了這個問題,網格的比例和位置都在迷宮下方。網格具有上面提到的觸控邏輯。)

(答案 3:這裡也是一樣。我以為我會從材質引用中移除“主角”,但這行不通,如果磚塊掉下來碰到立方體,它只會重啟關卡……解決方案:在圓錐體中建立一個屬性,一個名為“isCone”的布林值(=true),然後在立方體中新增一個“碰撞”感測器,它會檢查物件的屬性“isCone”,並將其餘部分保持為所示。)

(答案 4(當塊碰到立方體時重啟):按照圖片所示操作,右鍵單擊圓錐體,轉到連結和管道,並將 MA: 重新命名為圓錐體或你想要的任何名稱,然後右鍵單擊立方體,然後在觸控感測器中,將 MA: 重新命名為你呼叫另一個 MA: 的任何名稱。:D 這是在 24.9b 中)

(答案 5:對於 Blender 2.57a,你需要在迷宮下方放置一個平面或其他東西。然後賦予它(觸控 -> 並且 -> 場景(重啟))遊戲邏輯。如果它不起作用,請確保在物理選項卡下選擇了執行器。)

(問題 2:我該如何讓盒子半透明?現在我所看到的,包括測試時,只有天空盒。此外,當我將盒子放在迷宮下方時,它工作正常,但所有物體都沒有陰影,而當不顯示第二層時,所有物體都有陰影。誰能提供解決方案?這是在 2.48a 中)

(答案:要使某個東西透明,請按F5;按“材質按鈕”按鈕;在連結和管道選項卡下,按光暈和 Z 透明度,取消選中陰影緩衝;在材質下,將 A 設定為 0.000。)

死亡地面

[edit | edit source]

為了給你的遊戲增加緊張感,你可以讓地面動起來。它會隨著時間推移而升起!

  1. 新增一個靜態平面,並將其邏輯面板設定為上面所述。
  2. 新增一個始終感測器,將其連線到一個並且控制器,然後將其連線到一個運動執行器,該執行器具有 0.01 的垂直線性速度(沿 z 軸)。
Blender 遊戲邏輯“死亡地面”。它會隨著時間推移而升起!

這樣它就會慢慢升起。為了讓玩家清楚地看到地面在升起,更改其顏色(例如藍色代表水),並使其再次可見。

你剛剛給你的遊戲添加了一些緊張感!如果你時間不夠,你會碰到地面並重啟!如果你需要更多時間,只需設定一個更低的垂直線性速度即可。

相機

[edit | edit source]

空格鍵相機靠近主角圓錐體。有兩種簡單的方法可以實現相機:邏輯相機和子相機。在這種情況下,你可能更適合使用邏輯相機,但這確實是一個個人喜好問題。

  • 邏輯相機:新增到相機的邏輯面板
    1. 感測器:始終
    2. 控制器:並且
    3. 執行器:相機,到物件“圓錐體”(或你的主角的任何名稱——當你選擇主角時,請檢視物件面板下的內容)高度 5,最小 5,最大 10。
  • 子相機:選擇相機,然後選擇主角(順序很重要),然後按CTRL+P 鍵將圓錐體繫結到相機。將相機對準你喜歡的視角,並測試遊戲。
  • 第一人稱相機:好吧,這個不算是一種新方法,但如果你願意重新設計你的運動,讓它只移動相機而不是角色(只需對相機執行你對角色執行的所有操作),你就可以以第一人稱四處走動。或者你可以將相機放在圓錐體中,因為其中一面始終是不可見的(在紋理模式下檢視),並將相機繫結到圓錐體。記住:要訪問遊戲中的相機(在遊戲過程中),在你開始之前,按 ctrl 0 或轉到(檢視 -> 相機)

(新手問題 1:無論我做什麼(甚至刪除相機!),當我按下 0 或 ctrl+0 時,我總是看到要麼只有死亡平面(我在迷宮下方使用了一個平面而不是周圍的立方體),要麼什麼都沒有,具體取決於我是否選擇了第二層。根據 Oops 圖表,只有一個相機(或者沒有,如果我刪除了它)。出了什麼問題?)

(答案:Ctrl+0 將選定的物件分配為相機。要解決你的問題,請選擇你的相機並按 ctrl+0,要進入相機檢視,請按 0)

美化

[edit | edit source]

Blender 是一款出色的 3D 建模軟體,它擁有大量工具供你使用,因此你應該能夠使你的遊戲比這個看起來更好。

在“漫反射”下有一個白色的欄位。單擊後,會顯示一個顏色面板。你現在可以選擇選定物件的顏色。

我們將在每個物件上新增一個或兩個紋理。

  1. 選擇你要紋理化的物件
  2. 如果你希望你的物件有多種顏色,請進入編輯模式
  3. 選擇你要分配顏色的所有面(CTRL+TAB
  4. 轉到編輯面板(F9),位於按鈕視窗上
  5. 在左側附近應該有一個面板,上面寫著“材質”。單擊螢幕截圖中突出顯示的按鈕
  6. 透過單擊“漫反射”下的白色欄位來調整該材質的顏色。會顯示一個顏色選擇器。選擇你喜歡的顏色!

Maze without materials Maze game with materials

現在它看起來好多了,但當相機幾乎處於水平狀態時,你可以看到相機在哪裡停止渲染迷宮。你可以透過選擇相機,並在其編輯按鈕中更改其裁剪範圍來解決這個問題……但有一個更好的方法。霧。

帶有霧和抬高部分

霧會模糊一定距離之外的所有東西,顏色與世界紋理相同,並且可能很方便。我們將為我們的遊戲新增一些霧,這樣玩家就不會看到太遠的地方,從而使遊戲變得過於容易。

我們將使霧非常靠近,雖然你可以改變距離。轉到材質按鈕,然後轉到世界子按鈕,然後複製螢幕截圖中的設定。當你測試它時,請確保你處於紋理模式,以便看到霧。


Adding a mist around your character in Blender version 2.76


(問題:我複製了螢幕截圖,但我無法使霧生效。發生了什麼事?)

(答案:將“開始”更改為較小的值,例如 15。)

(問題:螢幕截圖是否正確,或者我的尺寸是否不同。我發現 10 的霧距離幾乎不可見,而 1 的距離卻有更好的效果。這是正常的嗎?)

(問題:我已經成功建立了霧,並且在啟動遊戲時可以看到它,但背景顏色仍然是灰色,所以迷宮被遮住了,但其他所有地方仍然是灰色。

關卡

[edit | edit source]

現在,剩下的就是建立下一關,並新增一些障礙物。

  1. 在迷宮的盡頭新增一個立方體,正好在地板水平線上方,這樣圓錐體就可以碰到它(空格鍵新增網格立方體
  2. 按場景下拉選單,選擇“新增新”→ 完整複製
  3. 現在可以返回到迷宮表面部分建立新的迷宮網格。
  4. 透過場景選單返回到第一級。
  5. 選擇關卡結束立方體。
  6. 更改其邏輯面板以使其類似於以下內容。


  • 感測器:接觸,coneMat
  • 控制器:並且
  • 執行器:場景,設定場景,Scene.001(或你命名的第二級名稱)

(新手:當我進入第二級時,我的玩家名稱變為coneMat.001,我不得不更改所有目標和大型重新開始立方體的分配。答案:將coneMat.001 重新命名為你為第一個場景命名的材質名稱 - 這對我來說解決了問題。

(新手:在我的第二級,我的圓錐體擊中立方體,但沒有任何反應!答案:確保邏輯面板(F4)下的感測器、控制器和執行器選項卡透過線連線。

(新手:當我進入第二級時,我什麼也看不見!

場景按鈕位於頂部面板上。

為了使多個物件必須被觸碰(或被角色獲取,可能的話),為每個物件賦予上面描述的邏輯設定,並將執行器型別更改為帶有主題“goalget”的訊息。如果你想讓物件在被收集後消失,在物件的邏輯面板中新增一個型別為“結束物件”的編輯物件執行器,並將它連結到現有的AND控制器。

接下來,選擇與角色接觸時重新開始關卡的大型立方體。如果你選擇不包含這樣一個立方體,在關卡開始時建立一個空物體(這樣你以後可以很容易地找到它)。為立方體或空物體賦予以下邏輯運算子。

  • 感測器:訊息,goalget
  • 控制器:並且
  • 執行器:屬性,新增,wincon,-1
  • 感測器:屬性,等於,wincon,0
  • 控制器:並且
  • 執行器:場景,設定場景,Scene.001(或你命名的第二級名稱)

然後點選“新增屬性”,並賦予它型別Int,名稱wincon,以及一個等於完成關卡所需收集物件的數量的值(如果全部都需要,則使其等於關卡中包含的數量)。這可以擴充套件到包括除收集物品之外的其他多種獲勝條件,方法是使每個條件的完成從“wincon”中減去。

你現在擁有了一個多級迷宮遊戲。可以隨意擴充套件遊戲玩法機制和模型,使它們看起來更好。

新手提示:我在我認為所有東西應該去的地方輸入了,但它沒有做任何事情。我不確定在遊戲模式下我應該尋找什麼。

動態障礙

[編輯 | 編輯原始碼]

本教程的這一部分將假設你已具備更高階的Blender介面和基本命令知識。因此,本節將以更少的具體方式撰寫,所有基本命令的快捷方式將不會在此處介紹。從現在開始,本教程將達到中級水平。如果你無法理解本教程的這一部分,可以在之前的教程中學習下面使用的基本功能。

現在我們將新增一些動態障礙。在本例中,它們將構成一個“磚塊”牆,你的角色可以穿過它。

  1. 新增一個立方體。
  2. 在編輯模式下將其縮放(GKEY)為1,0.5,0.5的尺寸。
  3. 對其進行倒角(WKEY),遞迴為1,大小為0.03(按空格鍵手動輸入值)。
  4. 在邏輯面板中,將其設定為Actor,動態,剛體,質量為0.5。
  5. 在下方點選邊界,並保持為“盒子”。這使得Blender意識到你新增的是一個盒子,並應該像盒子一樣行動(它現在會滑動而不是滾動)。
  6. 將它移動到迷宮中的一個交叉點(GKEY),並重復它,直到你得到一堵磚牆(ALT DKEY,LMB)。

你現在有一個屏障,你的角色可以穿過它。

你現在已經瞭解了足夠的Blender遊戲引擎(BGE)知識來建立你自己的遊戲。如果你想深入研究Blender遊戲,我建議你學習Python,因為試圖在BGE的圖形介面中製作一個完整的遊戲就像試圖用牙籤的鈍端挖墳墓。蒙著眼睛。而且牙籤粘在你的額頭上。但是,你現在已經踏上了成為遊戲製作人的道路!有關Python的基本入門教程,請參閱“開源影片遊戲”系列。


如果你有任何問題、疑慮或“新手提示”,請將它們釋出在本教程的討論頁面,而不是教程本身。


華夏公益教科書