这一系列的文章面向的读者是,已经对Godot和GDScript有一定的了解,并且希望了解C#并将其运用到Godot中的朋友。
C#是Godot官方支持的两种脚本语言中的一种。GDScript采用了类Python的语法和一些内置的语法糖来给引擎用户(特别是非编程人员)提供足够高的开发效率和足够平坦的学习曲线。
如果你在接触Godot之前并非C#开发者,还有什么理由在Godot中用C#编程呢?
C#是来自名门微软的“大小姐”(若干年前有一组编程语言拟人的图,但是我找不到了)。是一门通用的编程语言,而非GDScript这种专为Godot这一个游戏引擎设计的、且只能在Godot中使用的编程语言。如果不考虑受欢迎的程度,C#编写的软件可以在很多领域、操作系统上运行。控制台应用、桌面应用、移动端应用、网站、服务端等等领域都能用C#来处理,甚至有些神奇的项目是C#写操作系统。另外你可能也了解到,Unity也是以C#作为主要的编程语言。总之,C#是应用非常广泛的编程语言。
另一个“更正经”的角度是C#语言本身的设计是更加严谨的。它是一门真正的(绝大部分时候)静态的、强类型的编程语言。对于较为复杂的功能,C#能比GDScript提供更高的安全性和可维护性。另一方面也可以让代码编辑器进行更详细、准确的静态分析以提前发现错误、提供自动补全建议。
C#虽然算是比较年轻的语言(和Java、C++等语言相比),但是也已经面世多年,积累了非常丰富的第三方库,并且有自己的包管理器,可以非常方便地引入现有的库而不是重复造轮子。
另一方面,C#目前依然在积极地改进之中,每年都有新的版本、新的语言特性,以提高开发者的体验。得益于Godot使用了“标准的”.NET实现,因此你是可以用上这些新特性、新语法的。
作为Godot内置支持的语言,很多地方的设计是考虑到了和引擎编辑器以及GDScript的互动的。比如在GDScript中非常常用的 @export 等功能在C#中也可以做到。同时,GDScript也可以调用C#脚本中暴露的功能,C#脚本也可以调用GDScript的函数。这就意味着你并不需要在两者之间做出非此即彼的选择,而是可以渐进地或者部分地采用C#来开发游戏。
由于C#脚本需要和用C++编写的Godot核心部分互动,所以在涉及和引擎交互的时候,C# 不一定 会比GDScript快。但如果说你的这部分代码不涉及和引擎交互(比如说单纯的算法或者一些业务代码),那么C#是可以比GDScript快很多的。
一旦你开始和C#打交道,你就无法避开.NET。说实话,在2025年,绝绝绝大部分Windows用户都是.NET的用户。
.NET是微软的一个开发平台,它是对CLI标准的一个具体实现,C#是经过编译后可以在这个运行时环境中运行的一个编程语言。
下面是一些历史(八卦),如果你对详细的不感兴趣,下面这段内容可以跳过。
C#.NET和Sun(现甲骨文)的Java之间有一段故事。当年微软拿自己实现了一套Java虚拟机,弄了另一个语言叫J++,后来Sun以其违反Java标准为由将微软告上法庭。这场官司的结果是双方达成协议不允许微软再继续开发J++相关产品。于是,微软几乎可以说是照着Java平台的模子倒出来了.NET和C#。
微软长期以来在取名字这一问题上品味很差,所以它进行了很多开发者都搞不清楚的操作。十多年前你可能在玩游戏时需要安装什么.NET Framework。这个玩意儿是微软自己对.NET相关标准的一个实现,它只能在Windows上工作,然而它早期模范的对象Java却是跨平台的。相对的,Mono则是一个跨平台实现,没错,Unity就是用的它。实际上Godot的C#版也叫Mono,但是它现在使用的其实是标准的.NET。后来微软想通了,于是发起了一个开源项目叫.NET Core,说白了就是一个官方跨平台.NET实现。这个东西大家自然是比较欢迎。不过,.NET Core 3.1之后微软直接改名说,这个东西以后就叫.NET了!并且版本号从5开始(目前最新版本是.NET 10预览版)。当然跳过4可以理解,因为.NET Framework的版本号永远停留在4了,它现在已经是事实上的过时技术了。当然你的电脑上其实极大可能也有.NET Framework,因为一些老软件还得依赖它。
发音为“see sharp”。对音乐有一定了解的朋友应该注意到了,这个井号的念法是按照乐谱中的♯来念的(没错,这个符号和#是有区别的)。
叫“C”是因为它确实又是一门基本语法和C类似的编程语言(和C++一样)。根据一篇对“C#之父”——Anders Hejlsberg的 访谈 ,后面的#是因为它看起来像C++++。访谈中还提到最早它准备叫Cool(C like Object Oriented Language,类C面向对象语言)。 到Godot官网 下载 .NET版Godot。到目前为止,支持C#的Godot依然是一个单独的版本。当然,除了C#支持以外的功能基本上是一样的。你也可以用C#版去打开一个普通的Godot项目(但是反过来不太行)。 为了编写运行C#代码我们需要安装.NET SDK。实际上如果只是为了运行C#代码或者说它开发的软件,我们其实一般只需要.NET Runtime(运行时),不过现在Windows会有内置安装的情况,另外部分分发方式也可能自带运行时。
前往 .NET官网 下载SDK并安装。目前的最新稳定版为9,而Godot的C# API目标框架为.NET 8,所以你至少要在电脑上安装了.NET 8+的SDK。 安装完成后,打开终端(或者命令提示符、PowerShell),输入 dotnet 。如果安装成功你的终端中应该会显示一串英文。
C#语言要比GDScript复杂很多,Godot编辑器内置代码编辑器对C#支持非常简陋,不建议使用。
这里的较为主流的选择至少有三种。但是为了避免麻烦,先从安装最快、最简单的开始介绍。
IDE和文本编辑器都是用来方便写代码和软件开发的东西。放在当下来说,两个东西的边界其实已经很模糊了。
IDE(Integrated Development Environment)是所谓集成开发环境。这种东西一般是用来方便特定编程语言、SDK开发工作的一套软件。它们通常会内置或者提供简单的方式安装、管理、使用各种SDK、工具链。它们通常功能比较完备而复杂,占用体积也比较大。比较典型的就是微软的Visual Studio、苹果的Xcode。
程序员所谓的文本编辑器也可以说是代码编辑器。它们是用来方便编辑各种有特殊格式的文本的。这类工具一般来说不会局限于某种特定的编程语言或者SDK,而是为了方便编写各种文本,并且一般都可以通过各种插件来支持更多格式的文本。当然,正因为插件的存在,很多文本编辑器实际上也可以完成很多放当年要IDE才能完成的工作。毕竟大部分编程语言的源文件就是单纯的文本文件,真正的“软件”是源代码编译之后得到的结果。虽然你用起来不会太舒服,但是“记事本”和Word也可以用来写代码,毕竟它们都是“文本编辑器”。当然真正符合开发者心目中的文本编辑器定义的,是Vim、Atom、Visual Studio Code这类的。
是微软主导开发的开源的代码编辑器。完全免费,所有主流操作系统均支持。请前往 官网下载 。 完成安装之后,最好安装C# Dev Kit插件以获得更好的C#支持。启动VS Code之后,在左侧找到“四个方块有一个方块要掉了”的图标来安装扩展(快捷键Ctrl+Shift+X)。搜索C# Dev Kit安装即可。
微软自家的IDE,对C#的支持是非常好的。没错,微软确实不怎么会取名。Visual Studio Code是Visual Studio诞生很多年之后才出的,当时很多人搞不清楚两者的关系。不过这个 没有 macOS版!其实曾经有个微软拿Xamarin Studio改的VS for Mac,但是已经被砍掉了。前面说的Xamarin是微软(收购)的一个以C#为主要编程语言的跨平台开发框架,后面也被抛弃了,它的继任者是MAUI(半死状态)。
Visual Studio是很多计算机专业学生会接触的软件。必须要多次强调,这些专业软件不要到处去搜什么免费版破解版,第一你很有可能根本找不到想要的,还会把电脑搞得全是流氓软件。第二是根本没有这个必要。包括VS在内的很多软件都提供可用于非商业用途的免费社区版。VS Community可以免费下载安装使用。很多软件提供学生或教师证明还可以申请教育许可证免费用。
在 VS的官网 上直接下载。这个下载下来实际上是一个安装器。打开之后会让你选择版本。可供开源项目、非盈利项目免费使用的版本叫Community。 安装VS时会让你选择安装工作负载(workload),说白了就是要选择性地安装哪些功能。要进行C#.NET开发,最好直接勾上.NET桌面开发:
JetBrains是一家专门开发IDE的公司。在很早的时候给VS开发了一个C#插件 ReSharper ,这个插件现在依然在更新和服务,颇有一种NTR的感觉。而 Rider 是JetBrains为C#和.NET开发的独立IDE。可能是因为竞争太激烈的缘故,现在JetBrains的很多开发工具都放出了非商业用途可以免费使用的版本。如果你需要的JetBrains软件没有免费版,并且你是学生或者老师,可以到这里去 申请教育许可证 (需要提供教育邮箱或者学生证等证明材料)。 Rider的安装不需要太多解释,点一下下载,点一下安装。
Rider有一个优点就是内置了Godot支持。如果用Rider打开一个Godot C#项目,会显示一个启动Godot的图标。比较方便。
没用的知识:JetBrains最早的产品是用Java开发的Java IDE,名叫IDEA。这套IDE框架后来被JetBrains用来开发了一大堆IDE。
现在我们用一门正经的编程语言写一个正经的Hello World。也就是很多朋友第一次学习编程时在“黑框框”里输出Hello World的体验。
打开你的终端——现在Windows 11和macOS用户应该都有这个叫终端的应用。其他Windows用户可以打开“命令提示符”或者PowerShell。找到一个合适的位置输入以下命令:
dotnet new console -o HelloWorld
dotnet 命令是.NET SDK提供的一个命令行工具,可以用于.NET项目的管理。.NET及其他微软开发的(使用MSBuild)的SDK都会以“项目”为单位来构建代码。这行命令使用new选项创建了一个叫HelloWorld的命令行项目。 -o ( --output )指明生成的项目要放到哪个目录中,如果目录不存在会自动创建,并且会以此作为项目名称。
如果你使用的是VS,那么直接可以打开这个新建的文件夹中的 HelloWorld.csproj 。VS Code和Rider则选择打开这个文件夹即可。
这个项目中的唯一文件是 Program.cs 。C#的源文件后缀名为 .cs ,即C Sharp的缩写。打开文件只有唯一一行代码:
Console.WriteLine("Hello, World!");
它的作用不言而喻了。Console是一个提供控制台输入输出的静态类, WriteLine 的作用是向控制台写入字符串中的内容,并在末尾加个换行。需要注意的是,C#强制要求代码行要以分号结尾。
无论你用的是什么编辑器,你都可以在终端中使用 dotnet run 来运行.NET项目。如果你要通过命令行运行项目的话,最好确保当前工作目录在项目目录(使用 cd 项目路径 切换工作目录),也就是 HelloWorld.csproj 所在目录。在VS或者VS Code中可以按下F5启动调试,Rider的运行按钮也是在窗口最上方类似的播放按钮。正常情况下,你的程序应该会在控制台中输出Hello, World!
这个文件中的这一行代码实际上是在近年开始你才能这么写。C#是一个纯面向对象的编程语言,意味着你的所有代码都是在某个类的某个方法里(这一点和Java是一样的)。并且你要有个Main方法作为程序入口。实际上上面这行代码等价于:
internal class Program
{
private static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
这就是C# Hello World的标准八股文式写法。它是在一个叫Program的类中写了一个叫Main的静态方法,然后再在里面写实际的Hello World代码。
后续的文章中,我们会在Godot和一般C#控制台应用中来回研究。
评论区
共 条评论热门最新