to_snake_case
2026/4/14大约 3 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — to_snake_case
to_snake_case
定义
to_snake_case 用来把各种命名风格(驼峰、帕斯卡、连字符等)的字符串转换成 snake_case(蛇形命名)。蛇形命名的特征是:所有字母小写,单词之间用下划线 _ 连接。
比如 "PlayerHealth" 变成 "player_health","get-player-name" 变成 "get_player_name"。你可以把它想象成"统一格式翻译器"——不管原来是什么风格,都翻译成蛇形。
这个方法在 Godot 中特别有用,因为 Godot 内部的信号、属性名大量使用 snake_case。
函数签名
C#
// Godot.StringExtensions 方法
public static string ToSnakeCase(this string instance)GDScript
func to_snake_case() -> String参数说明
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| 无 | — | — | 这是一个无参数方法,直接对字符串本身操作 |
返回值
类型: string / String
返回转换后的 snake_case 字符串。原字符串不会被修改。
代码示例
基础用法
C#
using Godot;
public partial class ToSnakeCaseExample : Node
{
public override void _Ready()
{
// PascalCase 转 snake_case
GD.Print("PlayerHealth".ToSnakeCase());
// 运行结果: player_health
// camelCase 转 snake_case
GD.Print("getUserName".ToSnakeCase());
// 运行结果: get_user_name
// 已经是 snake_case 的不变
GD.Print("already_snake".ToSnakeCase());
// 运行结果: already_snake
// 连字符风格转 snake_case
GD.Print("my-component-name".ToSnakeCase());
// 运行结果: my_component_name
}
}GDScript
extends Node
func _ready():
# PascalCase 转 snake_case
print("PlayerHealth".to_snake_case())
# 运行结果: player_health
# camelCase 转 snake_case
print("getUserName".to_snake_case())
# 运行结果: get_user_name
# 已经是 snake_case 的不变
print("already_snake".to_snake_case())
# 运行结果: already_snake
# 连字符风格转 snake_case
print("my-component-name".to_snake_case())
# 运行结果: my_component_name实际场景:C# 方法名转 GDScript 信号名
C#
using Godot;
public partial class SnakeCaseConverter : Node
{
public override void _Ready()
{
// Godot 中 C# 的信号/方法名需要转成 snake_case 给 GDScript 使用
string[] csharpNames = {
"OnPlayerDied",
"UpdateHealthBar",
"SetMaxSpeed",
"IsGamePaused"
};
GD.Print("=== C# -> GDScript 名称映射 ===");
foreach (string name in csharpNames)
{
string snakeName = name.ToSnakeCase();
GD.Print($"{name} -> {snakeName}");
}
// 运行结果:
// === C# -> GDScript 名称映射 ===
// OnPlayerDied -> on_player_died
// UpdateHealthBar -> update_health_bar
// SetMaxSpeed -> set_max_speed
// IsGamePaused -> is_game_paused
}
}GDScript
extends Node
func _ready():
# Godot 中经常需要把不同风格的名称统一成 snake_case
var names := [
"OnPlayerDied",
"UpdateHealthBar",
"SetMaxSpeed",
"IsGamePaused"
]
print("=== 名称统一为 snake_case ===")
for name in names:
var snake_name := name.to_snake_case()
print(name + " -> " + snake_name)
# 运行结果:
# === 名称统一为 snake_case ===
# OnPlayerDied -> on_player_died
# UpdateHealthBar -> update_health_bar
# SetMaxSpeed -> set_max_speed
# IsGamePaused -> is_game_paused进阶用法:自动生成文件名和变量名
C#
using Godot;
public partial class ToSnakeCaseAdvanced : Node
{
public override void _Ready()
{
// 把标题转成文件名
string[] titles = {
"PlayerController",
"EnemyAI",
"LevelManager"
};
foreach (string title in titles)
{
string fileName = title.ToSnakeCase() + ".gd";
GD.Print($"脚本文件名: {fileName}");
}
// 运行结果:
// 脚本文件名: player_controller.gd
// 脚本文件名: enemy_ai.gd
// 脚本文件名: level_manager.gd
// 处理全大写缩写
GD.Print("XMLParser".ToSnakeCase());
// 运行结果: xml_parser
GD.Print("HTTPResponse".ToSnakeCase());
// 运行结果: http_response
// 空格也会被替换为下划线
GD.Print("Hello World".ToSnakeCase());
// 运行结果: hello_world
}
}GDScript
extends Node
func _ready():
# 把标题转成文件名
var titles := [
"PlayerController",
"EnemyAI",
"LevelManager"
]
for title in titles:
var file_name := title.to_snake_case() + ".gd"
print("脚本文件名: " + file_name)
# 运行结果:
# 脚本文件名: player_controller.gd
# 脚本文件名: enemy_ai.gd
# 脚本文件名: level_manager.gd
# 处理全大写缩写
print("XMLParser".to_snake_case())
# 运行结果: xml_parser
print("HTTPResponse".to_snake_case())
# 运行结果: http_response
# 空格也会被替换为下划线
print("Hello World".to_snake_case())
# 运行结果: hello_world注意事项
- 所有字母转小写:
to_snake_case不仅添加下划线,还会把所有字母都变成小写。 - C# 与 GDScript 的命名桥接:Godot 的 C# 使用 PascalCase,而 GDScript 使用 snake_case。
to_snake_case可以帮助你在两者之间自动转换名称。 - 不可逆:
to_snake_case是单向的。转换后信息可能丢失(比如大小写区分),无法完美还原。 - 连续大写字母的处理:连续的大写字母(如
"XML")会被视为一个整体,变成"xml"。 - 不修改原字符串:返回新字符串,原字符串保持不变。
