介绍¶
警告
C# 支持是自Godot3.0以来提供的一项新功能。因此,您可能仍然会遇到一些问题,或者找到可以改进文档的地方。请向Godot的C# 报告 engine GitHub page 以及 documentation GitHub page .
本页简要介绍了C#,包括它是什么以及如何在Godot中使用它。之后,你可能想看看 how to use specific features ,阅读 differences between the C# and the GDScript API 再次访问 Scripting section 一步一步的教程。
C# 是微软开发的高级编程语言。在Godot中,它是用Mono5.x.net框架实现的,包括对C# 7.0的完全支持。Mono是微软.NET框架的一个开源实现,基于C# 和公共语言运行时的ECMA标准。检查其功能的一个良好起点是 Compatibility Mono文档中的页面。
注解
这 不 是关于C#语言整体的全面教程。如果您不熟悉它的语法或功能,请参阅 Microsoft C# guide 或者在其他地方寻找合适的介绍。
为Godot设置C#¶
Windows¶
下载并安装最新版本的 Visual Studio ( 不是 Visual Studio代码),其中包含在Godot中使用C# 所需的实用程序。如果您不打算使用Visual Studio IDE,可以下载 Visual Studio Build Tools 相反。确保至少安装了.NET Framework 4.5目标包,您可以在“单个组件”选项卡中使用上面提到的任何安装程序来获得它。
MacOS和Linux¶
下载并安装最新版本的 Mono SDK . 从Godot 3.1beta3开始,版本号并不重要,因为Godot捆绑了自己的mono 5.18安装。我们只需要为nuget和msbuild安装mono,这是在Godot中使用C# 所必需的。
注解
要在MacOS上下载Mono,请使用 Mono Downloads Page . Visual Studio频道是Mono的早期版本,无法工作。
配置外部编辑器¶
C# 在Godot的脚本编辑器中的支持是最小的。考虑使用外部IDE或编辑器,例如 Visual Studio Code 或者单发育。这些功能为C# 提供了自动完成、调试和其他有用的功能。要在Godot中选择外部编辑器,请单击 编辑器→编辑器设置 向下滚动到 Mono . 在**Mono**下 ,点击 编辑 ,然后选择所选的外部编辑器。
注解
如果使用的是Visual Studio代码,请确保下载并安装 C# extension 启用语法突出显示和智能感知等功能。
创建一个C# 脚本¶
当您成功地为Godot设置了C# 之后,您在选择时应该看到以下选项 Attach script
在场景中节点的上下文菜单中:
请注意,尽管某些细节发生了变化,但在使用C# 编写脚本时,大多数概念的工作方式都是相同的。如果你是Godot的新手,你可能会想学习 脚本 在这一点上。虽然文档中的某些地方仍然缺少C# 示例,但大多数概念可以很容易地从GDScript转移。
项目设置和工作流¶
当您创建第一个C# 脚本时,Godot会为您的Godot项目初始化C# 项目文件。这包括生成一个C# 解决方案 (.sln
)和项目文件 (.csproj
)以及一些实用程序文件和文件夹 (.mono
和 Properties/AssemblyInfo.cs
)所有这些但是 .mono
非常重要,应该致力于您的版本控制系统。 .mono
可以安全地添加到VCS的忽略列表中。排除故障时,有时删除 .mono
文件夹并让它重新生成。
请注意,当前存在一些问题,Godot和C# 项目不保持同步;如果删除、重命名或移动C# 脚本,更改可能不会反映在C# 项目文件中。在这种情况下,您必须手动编辑C# 项目文件。
例如,如果您创建了一个脚本(例如 Test.cs
)并在Godot中删除它,编译将失败,因为C# 项目文件仍然希望丢失的文件存在。现在,你只需打开 .csproj
归档并查找 ItemGroup
,应该包含一行,如下所示:
<ItemGroup>
<Compile Include="Test.cs" />
<Compile Include="AnotherTest.cs" />
</ItemGroup>
只需删除该行,项目就可以再次正确构建。对于重命名和移动对象,如果需要,只需重命名并在项目文件中移动它们。
例子¶
这是一个空白的C# 脚本,其中有一些注释来演示它的工作原理。
using Godot;
using System;
public class YourCustomClass : Node
{
// Member variables here, example:
private int a = 2;
private string b = "textvar";
public override void _Ready()
{
// Called every time the node is added to the scene.
// Initialization here.
GD.Print("Hello from C# to Godot :)");
}
public override void _Process(float delta)
{
// Called every frame. Delta is time since the last frame.
// Update game logic here.
}
}
如您所见,在GDScript中,函数通常在全局范围内,如Godot print
功能在 GD
类的一部分 Godot
命名空间。以获取 GD
类,请参见类引用页 @GDScript 和 @GlobalScope .
注解
请记住,要附加到节点的类应该与 .cs
文件。否则,将出现以下错误,并且无法运行场景: "Cannot find class XXX for script res://XXX.cs"
C# 和GDScript之间的一般差异¶
C# API使用 PascalCase
而不是 snake_case
在GDScript/C++中。在可能的情况下,字段和getter/setter已转换为属性。一般来说,C# Godot API力求尽可能地做到惯用。
有关详细信息,请参阅 与gdscript的API差异 页。
当前问题和已知问题¶
由于C#支持在Godot是一种全新的支持,所以有些成长的痛苦和事情需要解决。下面是您在进入Godot的C#时应该注意的最重要的问题列表,但如果有疑问,也请查看该官员 issue tracker for Mono issues .
C#在Godot的表现¶
根据一些初步资料 benchmarks C# 在Godot中的表现-虽然通常是相同的数量级-大致是 ~4× 在一些幼稚的案例中。C++仍然有点快,具体情况根据你的用例而不同。对于大多数一般的脚本工作负载,GDScript可能足够快。C# 速度更快,但与Godot交谈时需要一些昂贵的编组。