在最新版本的 Blender 開發人員對 API 進行了許多更改,因此為早期 Blender 版本(2.7 及以下)編寫的所有腳本和加載項都停止工作。若要在新的 Blender 2.8 中運行加載項,您需要移植它們 — 更改其代碼以使用新的 Blender API 正常工作。
若要在 Blender 2.80 中啟用加載項,您必須對代碼進行以下更改:
Blender 2.7 使用 Python3.5.3 版本,Blender 2.8 使用 Python3.7.0 版本 。加載項開發人員應將系統中安裝的 Python 解釋器升級到適當的版本。
在初始化加載項部分,在 __init__.py 文件中或在"bl_info"字典中的加載項標頭中,必須指定 Blender 版本 2.80。所有開發人員都必須進行此更改。較低版本的加載項不會從 Blender 2.8 中啟動,並引發異常。
正確的代碼如下所示:
bl_info = {
'blender': (2, 80, 0)
}
如果加載項代碼中存在具有已定義屬性(參數)的運算符,則不應使用"+"符號描述其初始化,而應使用":"。這是由於 Python PEP8 規範,Blender 遵循該規範。這會影響所有開發人員。
如果未進行這些更改,Blender 在調用此類運算符時將引發錯誤:包含屬性的類應 該是注釋!
具有正確定義的運算符屬性的示例代碼:
class_prop: BoolProperty(
default=False
)
Blender 2.8 中的 T 面板不再用於託管用戶界面 (UI)。如果加載項中的 T 面板中存在接口,Blender 將引發錯誤:面板類,有類別
現在用戶界面位於 N 面板中,因此在用戶面板類中的"bl_region_type"參數中,您必 須指定"UI"值,而不是"TOOLS"。
正確的代碼示例:
class MyPanel(Panel):
bl_idname = 'panel.my_panel'
bl_label = 'MY_PANEL'
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
bl_category = 'MY_PANEL'
def draw(self, context):
...
使用參數調用函數時,在 Blender 2.8 中不能指定未命名的參數。函數參數必須是:「argument_name = argument_value」這種形式。
如果在未指定命名參數的情況下調用函數,Blender 將引發錯誤:運算符 , 必需參數"..."是一個關鍵字參數!
指定示例的正確參數("文本="是必需的):
self.layout.label(text='Hello World!')
在 Blender 2.8 中,您無法再從"bpy.context.screen.場景"獲取活動場景。嘗試此類調用時,Blender 會引發錯誤:屬性區域:"屏幕"對象沒有屬性"場景"
現在,通過"窗口"對象啟用活動場景。
右活動場景訪問的示例:active_scene = bpy.context.window.scene
Blender 2.8 中的活動對象只能通過上下文訪問,無法再通過"場景.objects.active"訪問它。
嘗試通過場景對象訪問活動對象時,Blender 會引發錯誤:屬性 bpy_prop_collection對象沒有屬性"活動"
訪問活動網格:active_object = bpy.context.active_object
Blender 2.8 中的燈現在具有"光"類型,在 bpy.data 部分中,它們被放置在"燈光"列表中。
嘗試通過"bpy.data.lights"使用燈列表時,Blender 會引發錯誤:屬性:"BlendData",對象沒有屬性"燈"
正確訪問燈的示例:bpy.data.lights
# <bpy_collection[1], BlendDataLights>