最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Blender 新歡 Armory3D - Armory Addon + Bundled Trait

2023-04-14 14:53 作者:緊果唄  | 我要投稿

Armory Engine 集成了 Kha 構(gòu)建工具,而另一方面提供 Armory 插件擴充了 Blender 功能,根據(jù) Blender 中的設(shè)置來生成相應(yīng)的腳本、代碼文件,再調(diào)用 Kha 構(gòu)建工具編譯程序。


Iron 構(gòu)建則是基于更高級的抽象,為游戲開發(fā)提供了套基于場景節(jié)點層次結(jié)構(gòu)的框架,提供多種 Traits 抽象類型,用于擴展 Blender 場景中各種對象的程序化操作。


Armory 編譯運行出現(xiàn)黑窗口時,通常 Clean 掉編譯緩存文件后,再重新編譯即可以解決問題。


Armory 是一個完全免費免版稅開放源代碼游戲引擎。Blender BEG 游戲引擎則受到 GNU GPL 許可證約束。

# ? 源文檔?https://github.com/Jeangowhy/opendocs/blob/main/Haxe.md

Armory Engine 以單個 .blend 文件為基本的程序組織形式,每個 .blend 的場景就是游戲中的場景。Kha 構(gòu)建腳本 khafile.js 的內(nèi)容根據(jù) Blender 的各種設(shè)置來生成。


另外,**Project Root** 設(shè)置可以 .blend 文件位于項目子目錄下的情況下使用,這個配置項專用于指定 .blend 文件位置:`Render Properties > Armory Project > Modules > Root`,此路徑會決定 Haxe traits 類型定義文件的定位,以及自動生成文件的存放位置。


注意,如果設(shè)置 Root 屬性,那么可能導(dǎo)致資源定位不正確。


比如,設(shè)置 MyRoot 作為根據(jù)目錄,但是 .blend 文件還在項目的根目錄,那么在使用紋理貼圖時,文件路徑就相對于 Root 指定的根目錄,但是 Blender 還是使用相對于文件所在的目錄。Blender 使用 // 表示 .blend 文件所在目錄。


這種設(shè)置就會在 Armory 引擎產(chǎn)生錯誤的處理邏輯:


- `//` 項目根目錄下的紋理文件就會變成指向 //MyRoot 目錄下的紋理;

- `//MyRoot` 目錄下的紋理貼圖的路徑就會變成指定 //MyRoot/MyRoot 目錄下的文件,


Armory 提供了 Multi-User Workflow 支持,但是還在完善中。多人開發(fā)工作流基于 Blender 的鏈接功能,可以將大型的 .blend 分解成更小的多個 .blend 文件。通過使用**Library Overrides**功能,可以使用數(shù)據(jù)覆蓋實現(xiàn)修改原本不可以修改的鏈接數(shù)據(jù)塊,需要啟用 `Edit Linked Library` 插件。


雖然可以使用 Blender 的資源導(dǎo)入功能,將多個 .blend 內(nèi)容鏈接到當前場景或 .blend 工程內(nèi):

  • 1. `File - Import` to import file formats.

  • 2. `File - Append` to import objects from other .blend files.

  • 3. `File - Link` to link objects from other .blend files.

Blender 鏈接外部文件擴充場景內(nèi)容后,Armory 不能很好處理,會導(dǎo)致程序黑屏運行。


Armory 無法和諸如 UE4 或 Unity 等商業(yè)游戲引擎相比,原生優(yōu)化效果非常差,同樣的模型導(dǎo)入 UE4, 運行起來很流暢,到了 Armory 這里就可能無法運行。UE4 和 Unity 都支持實時編輯調(diào)試材質(zhì),Armory 還不行,沒并完全支持 Blender 材質(zhì)節(jié)點,做好一個材質(zhì),運行效果會有出入。效果不行就需要再調(diào)整, 調(diào)整好了再運行測試,這段編譯的時間還很長,就這么浪費掉了。當然其它引擎做材質(zhì)也要編譯,但是基本 可以實時預(yù)覽。


Armory 使用 Bullet 物理引擎的 Haxe 移植版 haxebullet,ArmorySDK 已經(jīng)包含這個開源物理引擎。 Scene 屬性面板中是否勾選激活 Rigid Body World 不影響 Armory 模擬破碎效果,只影響 Blender。 Armory 默認使用 Bullet 模擬所有對象的運動,特性如下,備選物理引擎是 Oimo physics engine:

  • 01. Notable Features:

  • 02. Rigid body simulation

  • 03. Soft body simulation

  • 04. Ragdoll simulation

  • 05. Ray casting

  • 06. Collision groups

  • 07. Simulation of breaking / fractured meshes

Trait Types & Events

在項目目錄下包含自動生成的編譯配置腳本 khafile.js,和源代碼 Sources\Main.hx。默認工程包 名為 arm,用戶可以編寫自己的腳本代碼。通過渲染器屬性面板可以配置 Armory 的導(dǎo)出設(shè)置,場景屬性 或者對象屬性面板的 Armory Traits 可以混入用戶的腳本或代碼文件。所謂 Traits 就是代碼零件, 即代碼復(fù)用的一種方式,也稱為混入編程模式,被復(fù)用的代碼組件就是 Trait,有 5 種類型,本文著重介紹其中之一:


1. **haXe** 腳本代碼文件;

2. **Nodes** 使用 Logic Node Editor 可視化編程工具定義的節(jié)點樹;

3. **UI** - User Interface (Canvas trait),使用 Armory2D 用戶界面編輯進行可視化編輯;

4. **Bundled** Armory Engine 預(yù)定義 Haxe 腳本,是 `Trait` 類型的擴展;

5. **Wasm** 使用 WebAssembly 字節(jié)碼程序;


以下方法可以在 Trait 構(gòu)造方法中調(diào)用以注冊事件處理函數(shù),這些也是 Trait 對象的生命周期的事件:

  • - `Trait.notifyOnAdd()` - trait is added to an object

  • - `Trait.notifyOnInit()` - object which this trait belongs to is added to scene

  • - `Trait.notifyOnRemove()` - object which this trait belongs to is removed from scene

  • - `Trait.notifyOnUpdate()` - update game logic here

  • - `Trait.notifyOnRender()` - update rendering here

  • - `Trait.notifyOnRender2D()` - update 2D rendering here

由于場景是異步構(gòu)建的,因此可以在尚未出現(xiàn)所有場景對象時調(diào)用 `onInit` 事件。如果 Trait 依賴于其他場景對象,請使用 `Scene.active.notifyOnInit()` 事件,該事件在場景完全構(gòu)建后立即調(diào)用。


Bundled Scripts

所謂“捆綁腳本”,Bundled Scripts,就是 Armory 源代碼中現(xiàn)有的由 Haxe 編寫的 Trait 擴展類型。與常規(guī) Haxe 腳本類似,Bundled 腳本可以附加到對象屬性面板或場景屬性中的 Armory Trait 列表中。


例如,使用 PhysicsDrag 特性,當這個特性附加到啟用了物理的對象上時,可以使用鼠標拖動這個對象。


又如,使用 WalkNavigation 可以實現(xiàn)相機的漫步運動控制,打開相機對象屬性面板,Armory Traits 列表中添加一個 Bunddled,然后在 class 列表中指定需要使用的 Armory 內(nèi)置的 `Trait` 擴展,選擇 `WalkNavigation` 類型以控制相機運動,如果當前對象不是相機,那么運行時控制臺就會輸出初始化函數(shù)執(zhí)行類型轉(zhuǎn)換失敗的信息:


添加相應(yīng)的 Bundled 擴展后,點擊 Edit Source 編輯腳本,Armory Engine 中相應(yīng)的源代碼文件就會復(fù)制到工程的 Sources 目錄下,這個編輯操作會將內(nèi)置的 Bundled 轉(zhuǎn)換為 Haxe Script。


執(zhí)行構(gòu)建,khafile.js 構(gòu)建腳本中就會自動添加相應(yīng)的參數(shù):

構(gòu)建腳本中經(jīng)常使用 `addParameter()` 告訴 Haxe 編譯時調(diào)用 macro 函數(shù)。Haxe 初始化宏是一種在命令行中調(diào)用宏的方式,[Initialization Macros] 命令行格式 `--macro callExpr(args)`。它用來向編譯器注冊一個函數(shù),使其在宏上下文創(chuàng)建后得到調(diào)用,比如,keep() 就是一個宏初始化調(diào)用。宏初始化必需在 `--main` 參數(shù)之前指定。


如果 `--macro` 調(diào)用的是一個 plain identifier,就會在 Haxe Standard Library 中的

`haxe.macro.Compiler` 內(nèi)定位這個標識,這里定義多個非常有用的初始化宏:


由于所有宏共享相同的 [Macro Context],初始化宏可以設(shè)置其他宏用作配置的靜態(tài)字段的值。


1. `Compiler.include` Includes all modules in package `pack` in the compilation.

2. `Compiler.keep` Marks types or packages to be kept by DCE (Dead Code Elimination).


Armory 的游戲角色導(dǎo)航功能使用 [Recast navigation] 框架,Blender 渲染屬性面板中可以啟用它:`Armory Project - Modules - Navigation`。導(dǎo)航網(wǎng)格與內(nèi)置的 Bundled Trait 配合使用:

? ? armory.trait.NavMesh

? ? armory.trait.NavAgent

? ? armory.trait.NavCrowd

在對象的 Armory Traits 列表中添加 Bundled - Navmesh。

官方提供 Armory Tutorials: Navmesh 和 Navmesh Follow 兩示例。

  • ? * [Navmesh](https://github.com/armory3d/armory/wiki/navmesh)

  • ? * [Terrain](https://github.com/armory3d/armory/wiki/terrain)

  • ? * [Recast navigation](https://github.com/armory3d/haxerecast)

  • ? * Navmesh Examples https://github.com/armory3d/armory_examples/tree/master/navmesh

以下一是 Armsdk 中定義的 Bundled Scripts 列表:



Blender 新歡 Armory3D - Armory Addon + Bundled Trait的評論 (共 條)

分享到微博請遵守國家法律
年辖:市辖区| 封丘县| 宁武县| 石阡县| 台南县| 福州市| 柳州市| 长宁县| 金沙县| 留坝县| 铜川市| 酒泉市| 乌什县| 高台县| 安阳县| 桓台县| 宜章县| 济阳县| 东海县| 霍林郭勒市| 时尚| 武宁县| 海门市| 卢湾区| 怀仁县| 大冶市| 穆棱市| 碌曲县| 平乐县| 封丘县| 高密市| 石景山区| 临朐县| 鹰潭市| 花莲市| 衡山县| 临猗县| 乐清市| 和田市| 岳西县| 晋宁县|