
在Unity中进行C#脚本的格式化最佳实践
虽然可能没有一种正确的方式来格式化你的C#代码,但在团队中达成一致的风格可以使代码库更清晰、更易读且更具可扩展性。本页面提供了在创建自己的风格指南时,关于类、方法和注释的一些提示和关键考虑事项。
注意:这里分享的建议基于微软提供的建议。最佳的代码风格指南规则是适合你团队需求的规则。
您可以在 这里 找到代码风格指南示例或下载完整的电子书,使用 C# 风格指南以编写干净且可扩展的游戏代码(Unity 6 版)。
格式化你的代码
与命名一起,格式化有助于减少猜测并提高代码清晰度。通过遵循标准化的风格指南,代码审查变得不再关注代码的外观,而是关注代码的功能。
省略、扩展或修改这些示例规则以适应您团队的需求。
在所有情况下,请考虑您的团队将如何实施每个格式化规则,然后让每个人统一应用。参考您团队的风格以解决任何差异。
在设置您的 Unity 开发风格指南时,请考虑以下每个代码格式化建议。
属性
表达式主体属性
对于单行只读属性(=>)使用表达式主体属性:这将返回私有后备字段。
自动实现的属性
其他所有内容使用较旧的 { get; set; } 语法:如果您只想公开一个公共属性而不指定后备字段,请使用 自动实现的属性。为设置和获取访问器应用表达式主体语法。如果您不想提供写入访问权限,请记得将设置器设为私有。对齐多行代码块的闭合括号与开括号。
序列化
脚本序列化是将数据结构或对象状态转换为 Unity 可以存储和稍后重建的格式的自动过程。出于性能原因,Unity 的序列化处理方式与其他编程环境不同。
序列化字段会出现在检查器中,但您不能序列化静态、常量或只读字段。它们必须是公共的或带有 [SerializeField] 属性。Unity 仅序列化某些字段类型,因此请参考 文档页面 以获取完整的序列化规则。
在处理序列化字段时,请遵循一些基本指南:
- 使用 [SerializeField] 属性:SerializeField属性可以与私有或受保护的变量一起使用,使它们在检查器中显示。这比将变量标记为public更好地封装了数据,并防止外部对象覆盖其值。
- 使用Range属性设置最小值和最大值:[Range(min, max)]属性很方便,如果您想限制用户可以分配给数值字段的内容。它还方便地将字段表示为检查器中的滑块。
- 在可序列化的类或结构中分组数据,以清理检查器:定义一个公共类或结构,并用[Serializable]属性标记它。为您希望在检查器中公开的每种类型定义公共变量。
从另一个类引用此可序列化类。结果变量在检查器中以可折叠单元的形式出现。

大括号或缩进风格
C#中有两种常见的缩进风格:
这些缩进风格也有变体。本指南中的示例使用来自Microsoft框架设计指南的Allman风格。无论您作为团队选择哪种风格,请确保每个人都遵循相同的缩进和花括号风格。
决定统一的缩进方式
缩进通常为两个或四个空格。让您团队中的每个人在编辑器首选项中达成一致设置,而不引发制表符与空格的争论。请注意,Visual Studio提供将制表符转换为空格的选项。
在Visual Studio(Windows)中,导航到工具 > 选项 > 文本编辑器 > C# > 制表符。
在Mac上的Visual Studio中,导航到首选项 > 源代码 > C#源代码。选择文本样式以调整设置。

不要省略大括号
不要省略花括号——即使是单行语句也不例外。花括号增加了一致性,使你的代码更易于阅读和维护。在此示例中,花括号清楚地将操作DoSomething与循环分开。
如果稍后需要添加调试行或运行DoSomethingElse,花括号将已经到位。将子句放在单独一行可以让您轻松添加断点。
在多行语句中保留大括号以提高清晰度
不要从嵌套的多行语句中删除大括号。在这种情况下删除大括号不会抛出错误,但可能会导致混淆。即使大括号是可选的,也要使用大括号以提高清晰度。花括号还确保可以安全地进行修改,例如添加新逻辑,而无需重构周围的结构。
标准化switch语句
格式可能会有所不同,因此请在您的风格指南中记录团队偏好,并相应地标准化您的 switch 语句。
这是一个示例,您可以在其中缩进案例语句。通常建议包括一个默认案例。即使不需要默认案例(例如,在所有可能性都已覆盖的情况下),包括一个也可以确保代码准备好处理意外值。
水平间距
像空格这样简单的东西可以增强您代码在屏幕上的外观。您的个人格式化偏好可能会有所不同,但请尝试以下建议以提高可读性。
添加空格
添加空格以减少代码密度。额外的空白可以在行的部分之间提供视觉分隔感,从而提高可读性。
逗号后的间距
在函数参数之间的逗号后使用一个空格。
括号后没有间距
在括号和函数参数后不要添加空格。
函数与括号之间没有空格
函数名称和括号之间不要使用空格。
避免在括号内留空格
尽量避免在括号内使用空格。
流程控制条件前的间距
在流程控制条件前使用一个空格,并在流程比较运算符和括号之间添加空格。
与比较运算符的间距
在比较运算符前后使用一个空格。
可读性提示
保持行短。考虑水平空白:决定一个标准行宽(80-120个字符)。将长行拆分为较小的语句,而不是让它溢出。
保持缩进/层次结构:缩进您的代码以增加可读性。
除非需要提高可读性,否则不要使用列对齐:这种类型的间距对齐变量,但可能会使类型与名称配对变得困难。
然而,列对齐对于位运算表达式或包含大量数据的结构体可能是有用的。请注意,随着您添加更多项目,这可能会为您维护列对齐带来更多工作。一些自动格式化工具可能还会改变列的对齐部分。
垂直间距和区域
您也可以利用垂直间距。将相关的脚本部分放在一起,并利用空行。尝试这些建议将您的代码从上到下组织:
- 将依赖和/或相似的方法分组:代码需要逻辑性和连贯性。将执行相同操作的方法放在一起,以便阅读逻辑的人不必在文件中跳来跳去。
- 利用垂直空白来分隔类的不同部分:例如,您可以在以下内容之间添加两行空白:
- 变量声明和方法
- 类和接口
- 如果有助于可读性,可以使用if-then-else块
将此保持在最低限度,并在样式指南中注明适用的地方。
在代码中使用区域
#region 指令使您能够折叠和隐藏 C# 文件中的代码部分,使大型文件更易于管理和阅读。
然而,如果您遵循本指南中关于类的一般建议,您的类大小应该是可管理的,#region指令是多余的。将代码分解为更小的类,而不是将代码块隐藏在区域后面。如果源文件较短,您将不太倾向于添加区域。
注意:许多开发人员认为区域是代码异味或反模式。作为一个团队决定您站在辩论的哪一方。
Visual Studio 中的代码格式化
如果这些格式规则看起来令人不知所措,不要绝望。现代 IDE 使设置和强制执行它们变得高效。您可以创建格式规则的模板,然后一次性转换项目文件。
要为脚本编辑器设置格式规则:
- 在Visual Studio(Windows)中,导航到工具 > 选项。找到文本编辑器 > C# > 代码样式格式化。使用设置修改常规、缩进、新行、间距和换行选项。
- 在Mac的Visual Studio中,选择Visual Studio > 偏好设置,然后导航到源代码 > 代码格式化 > C#源代码。选择顶部的策略。然后在文本样式选项卡中设置间距和缩进。在C#格式选项卡中,调整缩进、新行、间距和换行设置。
如果您希望在任何时候强制脚本文件符合样式指南:
- 在Visual Studio (Windows)中,转到编辑 > 高级 > 格式文档(Ctrl + K, Ctrl + D快捷键组合)。如果您只想格式化空格和制表符对齐,您还可以在编辑器底部使用运行代码清理(Ctrl + K , Ctrl + E)。
- 在Mac的Visual Studio中,转到编辑 > 格式文档(Ctrl + I快捷键)
在Windows上,您还可以从工具 > 导入和导出设置共享您的编辑器设置。导出一个包含样式指南的 C# 代码格式的文件,然后让每个团队成员导入该文件。
Visual Studio使遵循样式指南变得简单。格式化变得像使用快捷键一样简单。
注意:您可以配置一个EditorConfig文件,而不是导入和导出Visual Studio设置。这样做可以更轻松地在不同的IDE之间共享格式,并且它还有与版本控制一起使用的额外好处。有关更多信息,请参见.NET代码样式规则选项。
虽然这并不特定于干净代码,但请务必查看在Unity中使用Visual Studio加速编程工作流程的10种方法。如果您应用这些生产力技巧,干净的代码更容易格式化和重构。

设置一个.editorconfig文件
要在Visual Studio Code中设置.editorconfig文件,请按照以下步骤操作:
- 在项目的根目录中,创建一个名为.editorconfig的新文件。
- 打开.editorconfig文件并添加您所需的配置设置。
以下是C#的示例配置:
# 顶层EditorConfig文件
root = true
# Unix风格的换行符,每个文件以换行结束
[*]
end_of_line = lf
insert_final_newline = true
# 4个空格缩进
[*.cs]
indent_style = space
indent_size = 4
charset = utf-8
trim_trailing_whitespace = true
# Makefile的制表符缩进
[Makefile]
indent_style = tab
# JSON文件的特定设置
[*.json]
indent_style = space
indent_size = 2