• 游戏
  • 工业
  • 资源
  • 社区
  • 学习
  • 支持
开发
Unity 引擎
为任何平台构建2D和3D游戏
下载计划和定价
商业化
应用内购买(IAP)
发现并管理各商店的IAP
聚合平台
最大化收入并优化变现
Ad Quality
保护您应用的用户体验
Tapjoy
建立长期用户忠诚度
所有变现产品
用户获取
用户获取
被发现并获取移动用户
Unity向量AI
将玩家与合适的游戏连接
Aura设备内广告
在用户高峰参与时触达用户
所有增长产品
使用案例
3D协作
实时构建和审查3D项目
沉浸式培训
在沉浸式环境中培训
客户体验
创建互动3D体验
所有行业解决方案
行业
制造业
实现运营卓越
零售
将店内体验转化为在线体验
汽车
提升创新和车内体验
所有行业
技术库
文档
官方用户手册和API参考
开发者工具
发布版本和问题跟踪器
路线图
查看即将推出的功能
术语表
技术术语库
洞察
案例分析
真实成功案例
最佳实践指南
专家提示和技巧
所有资源
新增功能
博客
更新、信息和技术提示
新闻
新闻、故事和新闻中心
社区中心
讨论
讨论、解决问题和连接
事件
全球和本地活动
社区故事
Made with Unity
展示Unity创作者
直播活动
加入开发者、创作者和内部人员
Unity奖项
庆祝全球的Unity创作者
适合每个级别
Unity Learn
免费掌握Unity技能
专业培训
通过Unity培训师提升您的团队
Unity新手
准备开始
开始您的学习
Unity基础路径
你是Unity 新手?开始您的旅程
使用指南
可操作的技巧和最佳实践
教育
对于学生
开启您的职业生涯
对于教育者
增强您的教学
教育资助许可证
将Unity的力量带入您的机构
认证
证明您的Unity精通
支持选项
获取帮助
帮助您在Unity中取得成功
成功计划
通过专家支持更快实现目标
常见问题解答
常见问题解答
联系我们
与我们的团队联系
计划和定价
语言
  • English
  • Deutsch
  • 日本語
  • Français
  • Português
  • 中文
  • Español
  • Русский
  • 한국어
社交
货币
采购
  • 产品
  • Unity Ads
  • 订阅
  • Unity Asset Store
  • 经销商
教育
  • 学生
  • 教师
  • 机构
  • 认证
  • 学习
  • 技能发展计划
下载
  • Unity Hub
  • 下载存档
  • Beta 版测试
Unity Labs
  • 实验室
  • 作品
资源
  • 学习平台
  • 社区
  • 文档
  • Unity QA
  • 常见问题解答
  • 服务状态
  • 案例分析
  • Made with Unity
Unity
  • 我们公司
  • 新闻简报
  • 博客
  • 事件
  • 工作机会
  • 帮助
  • 新闻
  • 合作伙伴
  • 投资人
  • 附属机构
  • 安防
  • 社会影响力
  • 包容性与多样性
  • 联系我们
版权所有 © 2025 Unity Technologies
  • 法律
  • 隐私政策
  • Cookie
  • 不要出售或分享我的个人信息

“Unity”、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其分支机构在美国及其他地区的商标或注册商标(单击此处获取更多信息)。其他名称或品牌是其各自所有者的商标。

Hero background image

Unity 中 C# 脚本的命名和代码风格提示

为方便起见,此网页已进行机器翻译。我们无法保证翻译内容的准确性或可靠性。如果您对翻译内容的准确性有疑问,请参阅此网页的官方英文版本。
请点击这里。

虽然没有一种正确的方法来格式化你的 C# 代码,但在团队中达成一致的风格可以使代码库更清晰、更易读和可扩展。一个组织良好的风格指南可以帮助你控制差异,以产生一个统一的最终产品。本页面提供了在创建自己的风格指南时,命名约定和代码格式化需要牢记的提示和关键考虑事项。

注意:这里分享的建议基于微软提供的建议。最佳的代码风格指南规则是最适合你团队需求的规则。

你可以在 这里 找到代码风格指南示例,或下载完整的电子书, 创建 C# 风格指南:编写可扩展的更清晰的代码.

  • 命名约定
  • 字段和变量
  • 枚举
  • 类和接口
  • 方法
  • 事件和事件处理程序
  • 使用动词
  • 使用 System.Action
  • 方法前缀加上“On”
  • 前缀加上主题名称和下划线
  • 谨慎使用 EventArgs
  • 命名空间
  • 前缀

命名约定

您不能使用名称中带有空格的变量,因为 C# 使用空格字符来分隔标识符。大小写方案可以缓解在源代码中使用复合名称或短语的问题。

以下列出了一些众所周知的命名和大小写约定:

驼峰命名法

也称为驼峰大小写,驼峰命名法 是一种书写短语而不使用空格或标点符号的做法,用一个大写字母分隔单词。第一个字母为小写。

通常,局部变量和方法参数采用驼峰命名法。例如:

examplePlayerController
最大生命值
endOfFile

帕斯卡命名法

帕斯卡命名法是驼峰命名法的一种变体,其中首字母大写。在 Unity 开发中为类和方法名称使用此命名法。公共字段也可以使用帕斯卡命名法。例如:

示例玩家控制器
最大生命值
文件结束

蛇形命名法

在这种情况下,单词之间的空格被替换为下划线字符。例如:

example_player_controller
max_health_points
end_of_file

kebab case

在这里,单词之间的空格被替换为破折号。这些单词然后出现在一种“串”破折号字符上。例如:

示例-玩家-控制器
最大-生命值
文件结束

kebab case 的问题在于许多编程语言将破折号用作减号。此外,一些语言将用破折号分隔的数字解释为日历日期。

匈牙利命名法

变量或函数名称通常指示其意图或类型。例如:

int iCounter
string strPlayerName

匈牙利命名法是一种较旧的约定,在 Unity 开发中不常用。

字段和变量表

字段和变量

考虑这些规则用于您的变量和 字段 :

  • 使用名词作为变量名称:变量名称应清晰且具有描述性,因为它们代表特定的事物或状态。命名时使用名词,除非变量类型为 bool(见下文)。
  • 用动词作为布尔值的前缀:这些变量表示真或假值。它们通常是问题的答案,例如:玩家在跑吗?游戏结束了吗?
  • 用动词作为前缀,使其含义更加明显。这通常与描述或条件配对,例如:isDead、isWalking、hasDamageMultiplier等。
  • 使用有意义的名称。不要缩写(除非是数学):你的变量名称将揭示它们的意图。选择易于发音和搜索的名称。
  • 虽然单字母变量在循环和数学表达式中是可以的,但在其他情况下不要缩写。清晰度比省略几个元音节省的时间更重要。
  • 对于快速原型设计,你可以暂时使用短的“垃圾”名称,然后再重构为更有意义的名称。
  • 公共字段使用帕斯卡命名法,私有变量使用驼峰命名法:作为公共字段的替代方案,使用带有公共“getter”的属性(见前后部分)。
  • 避免过多的前缀或特殊编码:你可以用下划线(_)作为前缀来区分私有成员变量和局部变量。
  • 或者,使用this关键字在上下文中区分成员变量和局部变量,省略前缀。公共字段和属性通常没有前缀。
  • 一些风格指南为私有成员变量(m_)、常量(k_)或静态变量(s_)使用前缀,以便名称可以一目了然地揭示变量的更多信息。
  • 许多开发者避开这些,而是依赖于编辑器。然而,并非所有的IDE都支持高亮和颜色编码,有些工具根本无法显示丰富的上下文。在决定如何(或是否)将前缀一起应用作为团队时,请考虑这一点。
  • 一致地指定(或省略)访问级别修饰符:如果您省略访问修饰符,编译器将假定访问级别应为私有。这很好用,但在省略默认访问修饰符时要保持一致。
  • 请记住,如果您希望稍后在子类中使用此项,则需要使用protected。

枚举

枚举是由一组命名常量定义的特殊值类型。默认情况下,常量是整数,从零开始计数。

枚举名称和值使用帕斯卡命名法。您可以将公共枚举放在类外以使其全局可用。枚举名称使用单数名词。

注意:带有System.FlagsAttribute标记的按位枚举是此规则的例外。您通常将这些复数化,因为它们表示多于一种类型。

类和接口

命名类和接口时遵循以下标准规则:

类名使用帕斯卡命名法名词:这将使您的类保持组织。

如果您在文件中有一个MonoBehaviour,则源文件名必须匹配:您可能在文件中有其他内部类,但每个文件中只能存在一个MonoBehaviour。

接口名称以大写“I”开头: 接下来用一个形容词来描述功能。

方法

在C#中,每条执行的指令都是在方法的上下文中执行的。

方法执行动作,因此请相应地应用这些规则来命名它们:

以动词开头命名: 如有必要,添加上下文(例如,获取方向,查找目标等)。

参数使用驼峰命名法: 将传递给方法的参数格式化为局部变量。

返回布尔值的方法应提问: 与布尔变量本身类似,如果方法返回真或假条件,则用动词作为前缀。这将其表述为一个问题(例如,游戏结束了吗,是否开始回合)。

注意:在Unity开发中,“函数”和“方法”这两个术语通常可以互换使用。然而,因为在C#中你不能在不将其纳入类的情况下编写函数,所以“方法”是正确的术语。

事件和事件处理程序

C#中的事件实现了观察者模式。这个软件设计模式定义了一种关系,其中一个对象,即主题(或发布者),可以通知一组称为观察者(或订阅者)的依赖对象。因此,主题可以向其观察者广播状态变化,而不必紧密耦合相关对象。

对于主题和观察者中的事件及其相关方法,存在几种命名方案。尝试以下部分中的实践。

使用动词

用动词短语命名事件。确保选择一个准确传达状态变化的名称。

使用现在分词或过去分词来指示事件的状态是之前还是之后。例如,在打开门之前指定“OpeningDoor”作为事件,在打开门之后指定“DoorOpened”作为事件。

使用 System.Action

使用 System.Action 委托来处理事件。在大多数情况下,Action 委托可以处理游戏所需的事件。

您可以传递多达 16 个不同类型的输入参数,返回类型为 void。使用预定义的委托可以节省代码。

注意:您还可以使用 EventHandler 或 EventHandler 委托。作为团队达成一致,决定每个人如何实现事件。

方法前缀加上“On”

在事件触发方法(在主题中)前加上“On。”触发事件的主题通常是从一个以“On”开头的方法中调用的(例如,“OnOpeningDoor”或“OnDoorOpened”)。

前缀加上主题名称和下划线

在观察者中,事件处理方法前加上主题的名称和下划线(_)。如果主题名为“GameEvents”,您的观察者可以有一个名为“GameEvents_OpeningDoor”或“GameEvents_DoorOpened”的方法。

为您的团队决定一个一致的命名方案,并在您的风格指南中实施这些规则。

注意:这个“事件处理方法”不应与 EventHandler 委托混淆。

谨慎使用 EventArgs

仅在必要时创建自定义 EventArgs。如果您需要将自定义数据传递给事件,请创建一种新的 EventArgs 类型,继承自 System.EventArgs 或自定义结构。

命名空间

使用 namespaces 确保您的类、接口、枚举等不会与其他命名空间或全局命名空间中已存在的内容冲突。命名空间还可以防止与来自 Unity Asset Store 的第三方资产或其他不会成为项目最终版本的一部分的测试场景发生冲突。

应用命名空间时:

使用 Pascal 大小写,不要使用特殊符号或下划线。

在文件顶部添加一个 using 指令,以避免重复输入命名空间前缀。

也可以创建子命名空间。使用点(.)运算符来分隔名称级别,使您能够将脚本组织成层次类别。例如,您可以创建“ MyApplication.GameFlow”,“ MyApplication.AI”,“ MyApplication.UI”等,以容纳游戏的不同逻辑组件。

前缀

在代码中,这些类分别被称为 敌人.Controller1 和 敌人.Controller2。添加一行 using 来节省输入前缀的时间(例如,using 敌人;)。

当编译器找到类名 Controller1 和 Controller2 时,它会理解您是指 敌人.Controller1 和 敌人.Controller2。

如果脚本需要引用来自不同命名空间的同名类,请使用前缀来区分它们。例如,如果您在 Player 命名空间中有 Controller1 和 Controller2 类,您可以写出 Player.Controller1 和 Player.Controller2 以避免任何冲突。否则,编译器将报告错误。

获取更多代码风格提示

了解有关常规格式的更多信息 在这里 或查看 完整电子书。您还可以查看我们的 代码风格指南示例。