隨著 .NET 全平臺戰(zhàn)略的推進,微軟正在讓以 C# 為先鋒的 .NET 擁有跨平臺特性。這個過程中一直有人想知道其它 .NET 語言對跨平臺的支持有什么改進,熟悉 C# 但是喜歡用 VB 的我也不例外。 經(jīng)過一番摸索,我找到了在 Unity3D 程序開發(fā)過程中用 VB 取代大部分情況下的 C# 腳本的方法。本文以用 VB 2017 編寫基于 Unity3D 的計算器為例展示如何在 Unity3D 中使用 VB。
如何:使用 Visual Basic 編寫基于 Unity3D 的計算器
預(yù)先條件: 讀者需要知道怎樣用 C# 編寫基于 Unity3D 的計算器,并且知道如何用 Visual Basic 編寫 .NET Framework 3.5 類庫。
1. 配置開發(fā)環(huán)境 安裝 Unity3D 5.5, Visual Studio 2017 RC 和 Unity3D Tools for Visual Studio。 如果你看到這個博客的時候有新版的開發(fā)環(huán)境,并且 Unity3D 官方?jīng)]有提供方便使用 VB 代碼的功能,仍然需要裝最新版的工具。 Unity3D https:///cn/get-unity/update Visual Studio https://www./zh-hans/downloads/ Visual Studio http://www.
2. 用 Unity3D 設(shè)計用戶界面 像用 C# 寫一樣,你需要新建一個 2D 項目,然后在自動創(chuàng)建的場景里面拖按鈕和標(biāo)簽控件組成計算器的視圖。
3. 用 Visual Basic 編寫邏輯代碼 在項目根目錄(Assets 之外那一層)附件鏈接中的項目模板新建一個 VB 類庫項目。 我寫的項目模板有如下特點: * 默認(rèn)程序集名稱是 Assembly-VisualBasic,默認(rèn)命名空間是空的 * 是 .NET Framework 3.5 的 VB 類庫。 * 假設(shè) Unity3D 裝在 D盤,引用了相關(guān)的程序集。 * 手動編輯了 .vbproj 文件,開啟了 VBRuntime Embed 編譯模式。這樣編譯出來的類庫可以正常地在 Mono 環(huán)境下執(zhí)行。 * 輸出目錄改成了 Assets\Plugins ,方便 Unity3D 識別。 * 編譯條件抄了 Assembly-CSharp 項目,只不過把 “;” 改成了 “,” 。 我給出的模板已經(jīng)包含了一個不完整的計算器的 MonoBehavior 類, 還有計算器相關(guān)邏輯的兩個類。 如果你打算自己編寫一個 MonoBehavior,請用附件鏈接中的項模板新建一個 VB 的 MonoBehavior 類。 注意:MonoBehavior 的事件處理方法的簽名最好用下拉框自動生成(如圖所示)。這樣盡管 Unity3D Tools for Visual Studio 不支持 Visual Basic,也不會導(dǎo)致聲明錯誤的事件處理程序。 這個下拉框自動生成事件處理程序的實現(xiàn)原理是在 .Designer.vb 里面預(yù)先定義可能要寫的事件處理程序的 Partial Private Sub 聲明。這些過程如果不給出有實際內(nèi)容的實現(xiàn),編譯的時候就不會被生成。這正好與 Unity3D Tools for Visual Studio 為 C# 所做的輸入輔助的實際行為一樣。 在計算器的 MonoBehavior 中,你需要聲明表示計算器顯示器的公有字段(在示例中是 TblValue 字段),和需要讓按鈕關(guān)聯(lián)的無參公有的方法。每個按鈕都需要一個方法對應(yīng)它們的 Click 事件處理。 至于計算器本身怎么實現(xiàn)計算功能,看附件鏈接。 寫完了別忘記生成。
4. 修改 C# 腳本 這一步超級簡單。只要很短的時間就可以完成。 1. 用 Visual Studio 打開 C# 腳本項目中的 Assembly-CSharp 2. 添加 Assets\Plugins\Assembly-VisualBasic.dll 的引用 3. 對于每一個用 VB 寫的 MonoBehavior ,新建一個 公有的 c# 類,并且繼承它。 比如說,你用 VB 寫的是 VB Public Class MainSceneBehaviorBase Inherits MonoBehaviour ' ... End Class 對應(yīng)的 C# 類是: C# public class MainSceneBehavior : MainSceneBehaviorBase {} 沒錯,C#只要寫一個空的類就可以。寫完生成一下。
5. 關(guān)聯(lián)腳本與前臺代碼 像用 C# 開發(fā)一樣,把繼承了 VB 的 MonoBehavior 那個類掛載到一個游戲?qū)ο笊厦妫ㄎ野阉鼟斓搅?Canvas 上面,因為寫計算器不需要針對 Canvas 編程),綁定腳本(VB 代碼)中定義的 Public 字段(計算器的顯示器),關(guān)聯(lián)每一個按鈕的 OnClick 事件到用 VB 寫的事件處理程序。 關(guān)聯(lián)腳本和事件的操作與用 C# 寫的時候沒有任何區(qū)別。 設(shè)計器可以借助 C# 腳本的繼承正確地識別用 VB 寫的 MonoBehavior 的成員。
6. 生成并運行 我用 Windows 10 的電腦和 Android 4.2 的手機進行了測試,計算器可以計算合理的表達式。
附錄 1. 項目源代碼 https://github.com/Nukepayload2/Unity3DCalculatorVB/ 2. VB 項目模板 https://github.com/Nukepayload2/Unity3DCalculatorVB/tree/master/Templates 執(zhí)行 install.bat 會將模板文件復(fù)制到 Visual Studio 2017 的默認(rèn)模板目錄。如果你更改過模板目錄,請手動導(dǎo)入。
|
|
來自: 關(guān)不住的心 > 《待分類》