隨著 .NET 全平台戰略的推進,微軟正在讓以 C# 為先鋒的 .NET 擁有跨平台特性。這個過程中一直有人想知道其它 .NET 語言對跨平台的支持有什麼改進,熟悉 C# 但是喜歡用 VB 的我也不例外。
經過一番摸索,我找到了在 Unity3D 程序開發過程中用 VB 取代大部分情況下的 C# 腳本的方法。本文以用 VB 2017 編寫基於 Unity3D 的計算器為例展示如何在 Unity3D 中使用 VB。
如何使用 Visual Basic 編寫基於 Unity3D 的計算器
預先條件:
讀者需要知道怎樣用 C# 編寫基於 Unity3D 的計算器,並且知道如何用 Visual Basic 編寫 .NET Framework 3.5 類庫。
1. 配置開發環境
安裝 Unity3D 5.5, Visual Studio 2017 RC 和 Unity3D Tools for Visual Studio。
如果你看到這個博客的時候有新版的開發環境,並且 Unity3D 官方沒有提供方便使用 VB 代碼的功能,仍然需要裝最新版的工具。
Unity3D https://unity3d.com/cn/get-unity/update
Visual Studio https://www.visualstudio.com/zh-hans/downloads/
2. 用 Unity3D 設計用戶界面
像用 C# 寫一樣,你需要新建一個 2D 項目,然後在自動創建的場景裡面拖按鈕和標簽控件組成計算器的視圖。
3. 用 Visual Basic 編寫邏輯代碼
在項目根目錄(Assets 之外那一層)附件鏈接中的項目模板新建一個 VB 類庫項目。
我寫的項目模板有如下特點:
* 默認程序集名稱是 Assembly-VisualBasic,默認命名空間是空的
* 是 .NET Framework 3.5 的 VB 類庫。
* 假設 Unity3D 裝在 D盤,引用了相關的程序集。
* 手動編輯了 .vbproj 文件,開啟了 VBRuntime Embed 編譯模式。這樣編譯出來的類庫可以正常地在 Mono 環境下執行。
* 輸出目錄改成了 Assets\Plugins ,方便 Unity3D 識別。
* 編譯條件抄了 Assembly-CSharp 項目,只不過把 “;” 改成了 “,” 。
我給出的模板已經包含了一個不完整的計算器的 MonoBehavior 類, 還有計算器相關邏輯的兩個類。
如果你打算自己編寫一個 MonoBehavior,請用附件鏈接中的項模板新建一個 VB 的 MonoBehavior 類。
注意:MonoBehavior 的事件處理方法的簽名最好用下拉框自動生成(如圖所示)。這樣盡管 Unity3D Tools for Visual Studio 不支持 Visual Basic,也不會導致聲明錯誤的事件處理程序。
這個下拉框自動生成事件處理程序的實現原理是在 .Designer.vb 裡面預先定義可能要寫的事件處理程序的 Partial Private Sub 聲明。這些過程如果不給出有實際內容的實現,編譯的時候就不會被生成。這正好與 Unity3D Tools for Visual Studio 為 C# 所做的輸入輔助的實際行為一樣。
在計算器的 MonoBehavior 中,你需要聲明表示計算器顯示器的公有字段(在示例中是 TblValue 字段),和需要讓按鈕關聯的無參公有的方法。每個按鈕都需要一個方法對應它們的 Click 事件處理。
至於計算器本身怎麼實現計算功能,看附件鏈接。
寫完了別忘記生成。
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
對應的 C# 類是:
C#
public class MainSceneBehavior : MainSceneBehaviorBase {}
沒錯,C#只要寫一個空的類就可以。寫完生成一下。
5. 關聯腳本與前台代碼
像用 C# 開發一樣,把繼承了 VB 的 MonoBehavior 那個類掛載到一個游戲對象上面(我把它掛到了 Canvas 上面,因為寫計算器不需要針對 Canvas 編程),綁定腳本(VB 代碼)中定義的 Public 字段(計算器的顯示器),關聯每一個按鈕的 OnClick 事件到用 VB 寫的事件處理程序。
關聯腳本和事件的操作與用 C# 寫的時候沒有任何區別。
設計器可以借助 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
備份在Linux公社1號FTP服務器下載
------------------------------------------分割線------------------------------------------
FTP地址:ftp://ftp1.linuxidc.com
用戶名:ftp1.linuxidc.com
密碼:www.linuxidc.com
在 2017年LinuxIDC.com\1月\使用 Visual Basic 編寫基於 Unity3D 的計算器\
下載方法見 http://www.linuxidc.com/Linux/2013-10/91140.htm
------------------------------------------分割線------------------------------------------
執行 install.bat 會將模板文件復制到 Visual Studio 2017 的默認模板目錄。如果你更改過模板目錄,請手動導入。