跳轉到內容

Blender 3D:菜鳥到專業/Python 平臺跳躍:建立

來自華夏公益教科書

注意:Python 程式碼放置在文字編輯器視窗中。將您的 3D 檢視視窗分成獨立的部分可能會有所幫助,以便您可以同時使用按鈕、3D 檢視和文字編輯器視窗。

Python 平臺跳躍教程系列的初始階段主要與複製邏輯板平臺跳躍教程中所做的事情有關。如果您沒有閱讀和理解這些教程,您可能不理解大多數程式碼的功能。本教程詳細介紹

  1. 對要修改、重寫或重新定義的“程式碼部分”的解釋,將在整個系列中頻繁出現
  2. 建立與預製網格關聯的物件
  3. 將物件連結到場景

並將詳細說明完成情況

  1. 如何響應鍵盤觸發來移動物件

程式碼部分

[編輯 | 編輯原始碼]

在整個系列中,我們將以這種方式引用程式碼部分

匯入部分

[編輯 | 編輯原始碼]

程式碼開頭的一系列匯入命令,就像 HTML 文件中 head 標籤的內容一樣。Python 有一些基本命令自然儲存在語言中,其他命令則被匯入,這樣就不會在不需要的時候載入大量命令,從而導致不必要的記憶體開銷。這帶來了能夠透過編寫自定義命令集來擴充套件語言的優勢,這些命令集可以匯入到 Python 中,這就是 Blender 如何與 Python 互動的方式。對於本教程,我們的匯入部分是

import Blender
import bpy

當您以其他名稱匯入某物時,它基本上會建立一個等於匯入模組名稱的變數,這樣您就不必將其全部鍵入。這是不必要的,但它可以使編碼更快。您可能想要在您的文件上執行查詢和替換搜尋,將您匯入的所有例項的名稱替換為實際模組的名稱,並刪除以其他名稱匯入模組的部分,因為這可以讓程式碼執行得稍快一些。

[編輯 | 編輯原始碼]

這是您必須記住在文件末尾包含的命令集合,無論對程式碼進行了任何更改,它才能正常工作。必須注意您應該更改整個頁尾(就像從主程式碼中刪除了某個功能一樣),或者在您現有的頁尾中新增一個命令(如果文字涉及單個功能的新增)。主教程行中的每一篇文章都應該包含完整的頁尾,因為它應該在該系列中的該點顯示。在本教程中,我們的基本頁尾是

Blender.Redraw()

新增玩家物件

[編輯 | 編輯原始碼]

首先,建立一個新文件並刪除基本立方體。建立一個猴子/Suzanne。在選擇猴子的編輯面板中,將網格名稱(ME:)更改為“Hero”,位於“連結和材質”下。單擊輸入框旁邊的 F 以保留資料塊,即使沒有連結到它。現在刪除猴子物件。

以下程式碼將在庫中建立一個名為“Player”的物件,並將其連結到“Hero”網格。

player = Blender.Object.New("Mesh","Player")
player.link(bpy.data.meshes["Hero"])

在第一行中,Blender.Object.New 顯然引用了一個新物件。對於本程式碼的目的,不應該更改“Mesh”變數。我不知道它的確切功能,所以我不希望給出錯誤的資訊,但我推測它與物件型別有關。例如,如果該物件是燈或相機型別,則無法將網格應用於它。第二個變數“Player”是您正在建立的實際物件的名稱。隨意更改它。

在第二行中,我們將 player(它等於我們的新物件)連結到預先存在的網格“Hero”,它是我們之前處理過的 Suzanne 網格。使用這種方法,您可以事先對角色的網格進行建模,但讓實際角色動態建立。透過使用此程式碼的複雜化,您可以使 player.link() 連結到一個變數,而不是連結到“bpy.data.meshes[]”。該變數可以引用現有網格,也可以建立一個新網格。至於連結值的意思,bpy.data.meshes 是一個包含電影中所有網格的陣列。同樣,bpy.data.objects 包含電影中的所有物件。透過轉到指令碼視窗並轉到指令碼->系統->互動式控制檯,您可以獲得諸如這些陣列的內容之類的資訊。透過在控制檯中輸入“list(bpy.data.objects)”,您將獲得一個格式為 [[Object "Camera"], [Object "Cube"], [Object "Lamp"]] 的列表,它是標準新文件設定中的物件列表。因此,要引用專案 [Object "Cube"],您將使用“bpy.data.objects['Cube']”行,依此類推。為了使這些命令起作用,您必須確保在匯入部分中匯入 bpy。

將物件追加到場景

[編輯 | 編輯原始碼]

就像您必須將網格追加到物件一樣,您還必須將物件追加到場景,否則它只是一個浮動的資料庫塊,實際上不會出現在任何地方。

scene = Blender.Scene.GetCurrent()
scene.link(player)

如果您要透過在滑鼠懸停在文字編輯器視窗上時按ALT-P來測試此程式碼,它將在場景的原點處建立一個名為 Player 的物件,該物件具有猴子“Hero”網格。確保您在所有其他程式碼之前包含了本教程的匯入部分,以及所有其他程式碼之後的必要頁尾。

版本 2.7

import bpy

myMesh = bpy.data.meshes["Hero"]                # reference existing mesh
player = bpy.data.objects.new("Mesh", myMesh)   # create new object

player.name = "Player"                          # give it a name

bpy.context.scene.objects.link(player)          # link to the scene to show
華夏公益教科書