随着 .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

执行 install.bat 会将模板文件复制到 Visual Studio 2017 的默认模板目录。如果你更改过模板目录,请手动导入。

如何:使用 Visual Basic 编写基于 Unity3D 的计算器的更多相关文章

  1. 使用 Async 和 Await 的异步编程(C# 和 Visual Basic)[msdn.microsoft.com]

    看到Microsoft官方一篇关于异步编程的文章,感觉挺好,不敢独享,分享给大家. 原文地址:https://msdn.microsoft.com/zh-cn/library/hh191443.asp ...

  2. Visual Basic了解

    Visual Basic是一种由微软公司开发的结构化的.模块化的.面向对象的.包含协助开发环境的事件驱动为机制的可视化程序设计语言.这是一种可用于微软自家产品开发的语言.它源自于Basic编程语言.V ...

  3. Visual Basic 函数速查

    Calendar 常数 可在代码中的任何地方用下列常数代替实际值: 常数 值 描述 vbCalGreg 0 指出使用的是阳历. vbCalHijri 1 指出使用的是伊斯兰历法. Color 常数 可 ...

  4. 杂项-软件: VBA(Visual Basic for Applications)

    ylbtech-杂项-软件: VBA(Visual Basic for Applications) VBA (Visual Basic宏语言) Visual Basic for Application ...

  5. Visual Basic 2012 借助DataGridView控件将SQL server2012 数据导入到Excel 2010

    摘  要: SQL Server 2012 数据和Excel 2010之间的连接和数据的传输,本篇文章主要针对的是SQL Server 2012 数据导入到Excel 2010文件中.Excel软件对 ...

  6. Visual Basic 2012 借助DataGridView控件将Excel 2010数据导入到SQL server 2012

    (注:注释的颜色原本为绿色,在这里变为黑色,有点不便,但不会造成阅读影响.放入Visual Basic2012代码编辑器后会还原成绿色.) 摘  要:DataGridView控件作为数据传输的中介,只 ...

  7. 2016年4月TIOBE编程语言排行榜 Visual Basic正渐行渐远

    COBOL, BASIC 和 FORTRAN 很长一段时间作为主力开发语言被使用.有很多软件使用这些语言来编写,并且发展的不亦乐乎.然而经过多年的发展,COBOL和FORTRAN逐渐被抛弃, 而得益于 ...

  8. [引]MSDN Visual Basic 和 C# 中都会用到的编程概念

    本文转自:http://msdn.microsoft.com/zh-cn/library/dd460655.aspx 本节介绍 Visual Basic 和 C# 中都会用到的编程概念. 本节内容   ...

  9. Visual Basic 2017 操作Excel和word【1】持续更新……

    我坚持在VB的路上走到黑…………  清单1.1  从应用程序对象导航到Excel中的工作表  Dim myWorkbooks As Excel.Workbooks = app.Workbooks ) ...

随机推荐

  1. clearsSelectionOnViewWillAppear

    @property (nonatomic) BOOL clearsSelectionOnViewWillAppear NS_AVAILABLE_IOS(3_2); // defaults to YES ...

  2. CCS设计手段——相对定位

    1.认识相对定位 相对定位就是让元素相对自己原来的位置进行位置调整. 2.相对定位的本质特性 不脱标,老家留坑,形影分离. 3.用途 ①微调位置 ②做绝对定位的参考,子绝父相 4.相对定位的定位置 相 ...

  3. SVG页面loading动态图

    https://github.com/SamHerbert/SVG-Loaders demo http://samherbert.net/svg-loaders/

  4. ArcGIS 10.5,打造智能的Web GIS平台

    2017年新年来临之际,ArcGIS 10.5正式发布.历经几个版本,ArcGIS 10.5已经革新为一个智能的以Web为中心的地理平台,推出更精细的分级授权.全新的i3S三维标准.大数据分析处理产品 ...

  5. DNS相关配置文件

    我们晓得主机名对应到 IP 有两种方法,早期的方法是直接写在档案里面来对应, 后来比较新的方法则是透过 DNS 架构!那么这两种方法分别使用什么配置文件?可不可以同时存在? 若同时存在时,那个方法优先 ...

  6. keil mdk中如何确保某一段程序不被优化掉(转)

    源:keil mdk中如何确保某一段程序不被优化掉 使用mdk编程,假如有一个有用的函数你定义了但是没有显式的调用,mdk在默认方式下,将会把这个函数从整个程序总删除掉,以节省ROM. 比如,你在RO ...

  7. LWIP_STM32_ENC28J60_NETCONN_TCP_CLIENT(4)

    既然udp说完了,那接下来自然就是TCP通讯了,今天说说TCP客户端通讯,也就是单片机作为客户端,主机PC作为服务器 相比于udp而言,tcp增加了一个连接服务器的流程,首先还是创建tcp_clien ...

  8. random 函数

    Random()在Delphi中,有一随机函数,是这样定义的:function Random [ ( Range: Integer) ]; 其中,参数Range为一整数,该函数返回值也为整数,其范围为 ...

  9. stm32驱动DS1302芯片

    天时可以自动调整,且具有闰年补偿功能.工作电压宽达2.5-5.5V.采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力.DS1302的外部引脚分配如下图 ...

  10. &简单使用记录

    最近阅读juce代码发现有很多&的用法,例如:(array.size() & 1 == 0) 的判断,仔细分析了下和1做与 操作是为了判断低位是否为0或者1,直观的说就是判断左值的奇偶 ...