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

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

Godot Plugin in C#

2023-02-01 08:11 作者:緊果唄  | 我要投稿
  • [CustomType for Godot 3.x](https://github.com/Jeangowhy/Godot-Tour/tree/main/mono-3x/addons/CustomType)

  • [CustomType for Godot 4.x](https://github.com/Jeangowhy/Godot-Tour/tree/4.x/mono-4x/addons/CustomType)

C# 中沒有 class_name 這樣的關(guān)鍵字用來注冊(cè)自定義節(jié)點(diǎn),這可以使用插件的 Custom types。通過菜單創(chuàng)建插件:Project → Project Settings → Plugins → Create new Plugin。使用 C# 創(chuàng)建插件時(shí),注意腳本名稱和類名要一致。


也可以使用 AssetLib → Plugins 打開插件管理面板,并且使用 AssetLib 提供的 Import 按鈕來安裝插件。開發(fā)好的插件只需要打包成 zip 文件,注意要將 addons 目錄層級(jí)一并打包,Import 執(zhí)行安裝是直接解壓文件到工程根目錄。


開發(fā)好的插件還可以上傳 Godot Asset Library 分享,只需要注冊(cè)一個(gè)賬戶即可。上傳資產(chǎn)時(shí)只需要登記相關(guān)的插件信息,下載鏈接地址,使用 Github 托管很容易處理,填寫相應(yīng)的 Commit ID 和預(yù)覽圖即可,然后等待審核通過后即可以在列表中搜索到,F(xiàn)eed 頁面可以查看資產(chǎn)的審核狀態(tài)。


C# 中可以自定義標(biāo)注實(shí)現(xiàn)類似 GDScript 中的 classname 注冊(cè)自定義類型:

  • - **System.Attribute** 自定義標(biāo)注需要繼承的基類;

  • - **System.AttributeUsage** 設(shè)置自定義標(biāo)注的用途,以及 AllowMultiple,Inherited 等屬性;

  • - **System.AttributeTargets** 提供標(biāo)注用途的枚舉類型定義,如 Class, Method, Property 等等用途;

  • - [System.AttributeUsage(System.AttributeTargets.Class)] 指定自定義標(biāo)注作用于類型定義;

  • - [System.AttributeUsage(System.AttributeTargets.Method)] 指定自定義標(biāo)注作用于類型定義;


此外,System.Runtime.CompilerServices 命名空間下提供了一系列編譯獲取信息的標(biāo)注,如:

  • - **CallerFilePathAttribute** 獲取包含調(diào)用方的源文件的完整路徑。 這是編譯時(shí)的文件路徑。

  • - **CallerLineNumberAttribute** 獲取源文件中調(diào)用方法的行號(hào)。

  • - **CallerMemberNameAttribute** 獲取方法調(diào)用方的方法或?qū)傩悦Q。

  • - **DateTimeConstantAttribute** 為字段或參數(shù)永久保存一個(gè) 8 字節(jié)的 DateTime 常數(shù)。


Caller 和 Callee 分別表示一個(gè)方法調(diào)用另一個(gè)方法的雙方,Caller 是主動(dòng)調(diào)用,Callee 是被調(diào)用方。向 Godot 注冊(cè)自定義類型需要使用其腳本,需要使用 [CallerFilePath] 標(biāo)注獲取腳本路徑,并通過資源管理器 ResourceLoader 加載它得到腳本對(duì)象。加載腳本得到的是一個(gè)資源類型,可以使用多種方式進(jìn)行轉(zhuǎn)換:

最新的 Godot 4 beta 16 提供了一個(gè) GodotClassNameAttribute 標(biāo)注,但它不是用來注冊(cè)自定義類型。它用來在生成的 C# 代碼中的類名不一致時(shí)指定引擎類名,以允許內(nèi)省代碼查找與類關(guān)聯(lián)的名稱。

C# 元數(shù)據(jù)編程中,一個(gè)方格號(hào)內(nèi)可以包含多個(gè)標(biāo)注,每個(gè)標(biāo)注使用圓括號(hào)通過 = 運(yùn)算符對(duì)其屬性進(jìn)行賦值。對(duì)標(biāo)注好的代碼進(jìn)行處理時(shí),使用程序集對(duì)象 Assembly 提供的反射方法,對(duì)當(dāng)前運(yùn)行中的程序集進(jìn)行處理。通過處理程序集中標(biāo)注過的類型,使用 AddCustomType() 將自定義類型注冊(cè)到 Godot 系統(tǒng)內(nèi):


在 Godot 觸發(fā)自定義節(jié)點(diǎn)注冊(cè)行為,可以通過添加工具菜單 AddToolMenuItem() 來讓用戶操作,它會(huì)向 Project → Tools 添加菜單,需要在禁用插件配合 RemoveToolMenuItem() 做菜單清理,避免重復(fù)添加。也可以使用 EditorPlugin 的信號(hào)來觸發(fā),插件提供的信號(hào)包含場景變動(dòng)、資源保存、工程配置變動(dòng)等等。保存文件,包括各種資源文件,就會(huì)觸發(fā) **resource_saved** 信號(hào)。


插件中的自定義標(biāo)注需要在 Godot 工程中其它代碼引用,C# 工程文件 ``.csproj`` 要正確引用``.cs``,并且需要構(gòu)建好 C# 項(xiàng)目使其生效。否則,啟用插件時(shí)就會(huì)提示不能加載插件腳本,因?yàn)?Godot 不能通過腳本提供類型名稱找到相應(yīng)的程序集中對(duì)應(yīng)的類型。

一個(gè)最簡單的插件可以只包含兩個(gè)方法,它向引擎注冊(cè)自定義節(jié)點(diǎn):

C# 版本插件類基本結(jié)構(gòu):

一個(gè)節(jié)點(diǎn),包括插件,連接到 Root Viewport 即成為場景樹中的一個(gè)部分,最后節(jié)點(diǎn)被移除,依次觸發(fā)回調(diào)方法:

節(jié)點(diǎn)樹所有節(jié)點(diǎn)會(huì)按位置先后、由表層到內(nèi)層依次執(zhí)行 enter_tree 方法,而 ready 和 exit_tree 方法,則不同,會(huì)先由內(nèi)層到外層的順序執(zhí)行,父級(jí)節(jié)點(diǎn)需要等待內(nèi)層節(jié)點(diǎn)工作完成才能執(zhí)行 ready 等動(dòng)作。


對(duì)于插件,Project → Project Settings → Plugins 面板中啟用它,即添加到場景樹上,禁用時(shí)即移除。插件代碼如果有更新,也需要通過禁用再重新啟用來更新,并重新執(zhí)行初始化。Godot 4 beta 16 中,只要重新執(zhí)行構(gòu)建,插件功能即可以隨之更新,不需要重新設(shè)置工程插件配置,但初始化在下次啟用插件時(shí)執(zhí)行。


以下是 CustomTypes 插件的實(shí)現(xiàn),有兩個(gè) C# 代碼文件,一個(gè)標(biāo)注定義,另一個(gè)是主腳本。通過工程配置啟用插件:Project → Project Settings... → Plugins → CustomTypes → Enable/Disable。

然后,插件會(huì)向 Project → Tools 工具菜單中注冊(cè)兩個(gè)功能,分別用于更新自定義類型的注冊(cè)和清理:

  • - Project → Tools → C# Custom Types: Register

  • - Project → Tools → C# Custom Types: Clear

標(biāo)注定義代碼文件 ClassNameAttribute.cs 內(nèi)容:

Custom Types 插件主腳本文件 Plugin.cs,在創(chuàng)建插件時(shí)將其填寫到 Script Name 字段中:

參考:

  • - https://github.com/m50/Godot-CSharp-Node-Exports

  • - [.NET project SDKs](https://learn.microsoft.com/en-us/dotnet/core/project-sdk/overview)

  • - [Attribute 基類](https://learn.microsoft.com/zh-cn/dotnet/api/system.attribute?view=net-7.0)

  • - [CompilerServices 命名空間](https://learn.microsoft.com/zh-cn/dotnet/api/system.runtime.compilerservices)

  • - https://referencesource.microsoft.com/#mscorlib/system/runtime/compilerservices/datetimeconstantattribute.cs

  • - https://docs.godotengine.org/en/3.5/tutorials/plugins/editor/index.html

  • - https://godotengine.org/asset-library/


Godot Plugin in C#的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
武定县| 日喀则市| 宁阳县| 夏河县| 正定县| 永年县| 塘沽区| 寻甸| 山阳县| 错那县| 宜州市| 吉安县| 新民市| 元朗区| 建水县| 北票市| 墨江| 桐庐县| 卢龙县| 胶州市| 漳平市| 历史| 封开县| 门头沟区| 剑河县| 望城县| 商都县| 石棉县| 和顺县| 大邑县| 东乌珠穆沁旗| 磐安县| 金沙县| 镇赉县| 文昌市| 丹东市| 澄迈县| 河曲县| 诏安县| 阳西县| 永宁县|