deg_to_rad
2026/4/14大约 5 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — deg_to_rad
deg_to_rad
定义
deg_to_rad() 用来把"角度"换算成"弧度"——简单说,就是把你熟悉的"度数"翻译成计算机三角函数(sin、cos、tan)能听懂的"弧度"语言。
想象一下,你在日常生活中说温度用"摄氏度",但某个国家的温度计只认"华氏度"。你想告诉对方"今天 100 摄氏度",就必须先换算成华氏度。deg_to_rad() 就是角度世界的"换算器":你告诉它 180 度,它帮你换算成 pi(约 3.14159 弧度)。
为什么要换算? 因为 Godot 引擎中的三角函数(sin()、cos()、tan() 等)只接受弧度值,不接受角度值。但人类思考和设计游戏时习惯用角度(比如"旋转 90 度"、"敌人从 180 度方向出现"),所以需要在两者之间来回转换。
数学公式为:弧度 = 角度 x (pi / 180)。
函数签名
C#
public static float DegToRad(float deg)GDScript
func deg_to_rad(deg: float) -> float参数说明
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
deg | float | 是 | 要转换的角度值(单位:度)。例如 90 表示 90 度,180 表示 180 度 |
返回值
float —— 对应的弧度值。计算公式为 deg * (Math.PI / 180)。
常见的换算结果:
deg_to_rad(0)返回0.0deg_to_rad(90)返回约1.5708(即 pi/2)deg_to_rad(180)返回约3.14159(即 pi)deg_to_rad(360)返回约6.28318(即 2*pi)
代码示例
基础用法:角度转弧度
C#
using Godot;
public partial class DegToRadExample : Node
{
public override void _Ready()
{
// 常见角度转换为弧度
float r0 = Mathf.DegToRad(0f);
GD.Print($"0 度 = {r0} 弧度");
// 运行结果: 0 度 = 0 弧度
float r90 = Mathf.DegToRad(90f);
GD.Print($"90 度 = {r90} 弧度");
// 运行结果: 90 度 = 1.5707964 弧度
float r180 = Mathf.DegToRad(180f);
GD.Print($"180 度 = {r180} 弧度");
// 运行结果: 180 度 = 3.1415927 弧度
float r360 = Mathf.DegToRad(360f);
GD.Print($"360 度 = {r360} 弧度");
// 运行结果: 360 度 = 6.2831855 弧度
}
}GDScript
func _ready():
# 常见角度转换为弧度
var r0 = deg_to_rad(0.0)
print("0 度 = %f 弧度" % r0)
# 运行结果: 0 度 = 0.000000 弧度
var r90 = deg_to_rad(90.0)
print("90 度 = %f 弧度" % r90)
# 运行结果: 90 度 = 1.570796 弧度
var r180 = deg_to_rad(180.0)
print("180 度 = %f 弧度" % r180)
# 运行结果: 180 度 = 3.141593 弧度
var r360 = deg_to_rad(360.0)
print("360 度 = %f 弧度" % r360)
# 运行结果: 360 度 = 6.283185 弧度实际场景:用角度计算方向向量
C#
using Godot;
public partial class DirectionCalculator : Node2D
{
// 导出属性:移动速度
[Export] public float ExMoveSpeed = 200f;
/// <summary>
/// 根据角度(度)计算 2D 方向单位向量。
/// 游戏中常说"朝 45 度方向移动",但 sin/cos 需要弧度。
/// </summary>
public Vector2 GetDirectionFromAngle(float angleDegrees)
{
// 先转成弧度,再用 sin/cos 算出方向
float radians = Mathf.DegToRad(angleDegrees);
return new Vector2(Mathf.Cos(radians), Mathf.Sin(radians));
}
public override void _Ready()
{
// 朝 0 度(正右方)移动
Vector2 dir0 = GetDirectionFromAngle(0f);
GD.Print($"0 度方向: {dir0}");
// 运行结果: 0 度方向: (1, 0)
// 朝 90 度(正下方,Godot 的 Y 轴朝下)移动
Vector2 dir90 = GetDirectionFromAngle(90f);
GD.Print($"90 度方向: {dir90}");
// 运行结果: 90 度方向: (0, 1)
// 朝 45 度方向移动
Vector2 dir45 = GetDirectionFromAngle(45f);
GD.Print($"45 度方向: {dir45}");
// 运行结果: 45 度方向: (0.7071, 0.7071)
}
}GDScript
extends Node2D
# 导出属性:移动速度
@export var ex_move_speed: float = 200.0
## 根据角度(度)计算 2D 方向单位向量。
## 游戏中常说"朝 45 度方向移动",但 sin/cos 需要弧度。
func get_direction_from_angle(angle_degrees: float) -> Vector2:
# 先转成弧度,再用 sin/cos 算出方向
var radians = deg_to_rad(angle_degrees)
return Vector2(cos(radians), sin(radians))
func _ready():
# 朝 0 度(正右方)移动
var dir0 = get_direction_from_angle(0.0)
print("0 度方向: %s" % dir0)
# 运行结果: 0 度方向: (1, 0)
# 朝 90 度(正下方,Godot 的 Y 轴朝下)移动
var dir90 = get_direction_from_angle(90.0)
print("90 度方向: %s" % dir90)
# 运行结果: 90 度方向: (0, 1)
# 朝 45 度方向移动
var dir45 = get_direction_from_angle(45.0)
print("45 度方向: %s" % dir45)
# 运行结果: 45 度方向: (0.7071, 0.7071)进阶用法:角色围绕中心点旋转
C#
using Godot;
public partial class OrbitPlayer : Node2D
{
// 导出属性:旋转半径
[Export] public float ExRadius = 150f;
// 导出属性:旋转速度(度/秒)
[Export] public float ExRotateSpeed = 90f;
// 内部变量:当前角度
private float _angleDegrees = 0f;
// 中心点位置
private Vector2 _center = Vector2.Zero;
public override void _Ready()
{
_center = new Vector2(400f, 300f);
}
public override void _Process(double delta)
{
// 用角度思考很直观:每秒转 90 度
_angleDegrees += ExRotateSpeed * (float)delta;
// 角度会一直增大,但 sin/cos 不受影响,所以不需要手动取模
// 如果想保持在 0~360 之间,可以加一行:_angleDegrees %= 360f;
float radians = Mathf.DegToRad(_angleDegrees);
Position = _center + new Vector2(
Mathf.Cos(radians) * ExRadius,
Mathf.Sin(radians) * ExRadius
);
GD.Print($"角度: {_angleDegrees:F1} 度, 弧度: {radians:F4}");
// 运行结果: 角度: 90.0 度, 弧度: 1.5708
}
}GDScript
extends Node2D
# 导出属性:旋转半径
@export var ex_radius: float = 150.0
# 导出属性:旋转速度(度/秒)
@export var ex_rotate_speed: float = 90.0
# 内部变量:当前角度
var _angle_degrees: float = 0.0
# 中心点位置
var _center: Vector2 = Vector2.ZERO
func _ready():
_center = Vector2(400.0, 300.0)
func _process(delta):
# 用角度思考很直观:每秒转 90 度
_angle_degrees += ex_rotate_speed * delta
# 角度会一直增大,但 sin/cos 不受影响,所以不需要手动取模
# 如果想保持在 0~360 之间,可以加一行:_angle_degrees = fmod(_angle_degrees, 360.0)
var radians = deg_to_rad(_angle_degrees)
position = _center + Vector2(
cos(radians) * ex_radius,
sin(radians) * ex_radius
)
print("角度: %.1f 度, 弧度: %.4f" % [_angle_degrees, radians])
# 运行结果: 角度: 90.0 度, 弧度: 1.5708注意事项
- Godot 中的角度单位不统一:
Rotation属性和三角函数使用弧度,但RotationDegrees属性使用角度。如果只想设置旋转角度而不涉及三角函数,可以直接使用RotationDegrees,不需要手动转换。 - 与
rad_to_deg()是一对反函数:deg_to_rad()和rad_to_deg()互为逆运算。deg_to_rad(rad_to_deg(x))的结果等于x。 - 角度值可以是负数或超过 360:
deg_to_rad()对输入值没有范围限制。deg_to_rad(720)和deg_to_rad(-90)都是完全合法的调用。 - 在 C# 中也可以使用
Mathf.DegreesToRadians:这是 Godot 4.x 提供的别名方法,与DegToRad功能完全相同。 - 常用换算速查:0 度 = 0 弧度,30 度 = pi/6,45 度 = pi/4,60 度 = pi/3,90 度 = pi/2,180 度 = pi,270 度 = 3pi/2,360 度 = 2pi。
