min
2026/4/14大约 4 分钟
最后同步日期:2026-04-16 | Godot 官方原文 — min
min
定义
min 用来比较两个数,返回更小的那个。就像你在两个价格中挑便宜的——min(29, 49) 会返回 29。
在游戏开发中,min 最常见的用途是"设置上限"。比如你想确保角色的血量不超过最大值 100,就可以写 min(当前血量, 100)——如果当前血量是 120,就限制为 100;如果当前血量是 80,那就保持 80 不变。
min 是一个通用版本,同时支持整数和浮点数。如果你明确知道在处理哪种类型,可以用更具体的 mini()(整数专用)或 minf()(浮点数专用)。
函数签名
C#
// Mathf.Min 有两个重载版本,分别处理整数和浮点数
public static float Min(float a, float b) // 浮点数版本
public static int Min(int a, int b) // 整数版本GDScript
func min(a: Variant, b: Variant) -> Variant # 通用版本,同时支持 int 和 float
# 另外还有两个明确指定类型的专用版本:
func mini(a: int, b: int) -> int # 整数专用
func minf(a: float, b: float) -> float # 浮点数专用参数说明
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
a | int 或 float | 是 | 第一个数值 |
b | int 或 float | 是 | 第二个数值 |
返回值
与输入类型相同(int 返回 int,float 返回 float)——返回 a 和 b 中较小的那个值。如果两个相等,返回 a。
代码示例
基础用法:比较两个数取较小值
C#
int a = Mathf.Min(10, 20); // 运行结果: 10
int b = Mathf.Min(-5, 3); // 运行结果: -5
int c = Mathf.Min(7, 7); // 运行结果: 7(相等时返回第一个)
float d = Mathf.Min(3.5f, 7.2f); // 运行结果: 3.5
float e = Mathf.Min(-1.0f, 0.0f); // 运行结果: -1.0GDScript
var a = min(10, 20) # 运行结果: 10
var b = min(-5, 3) # 运行结果: -5
var c = min(7, 7) # 运行结果: 7(相等时返回第一个)
var d = min(3.5, 7.2) # 运行结果: 3.5
var e = min(-1.0, 0.0) # 运行结果: -1.0实际场景:限制角色血量不超过上限
C#
// 角色受到治疗,但血量不能超过最大值
float maxHealth = 100.0f;
float currentHealth = 80.0f;
float healAmount = 35.0f;
// 先加血,再用 min 限制上限
currentHealth = currentHealth + healAmount;
// 运行结果: currentHealth = 115.0(超过了!)
currentHealth = Mathf.Min(currentHealth, maxHealth);
// 运行结果: currentHealth = 100.0(被限制在上限)
// 也可以一步完成:
currentHealth = Mathf.Min(currentHealth + healAmount, maxHealth);GDScript
# 角色受到治疗,但血量不能超过最大值
var max_health = 100.0
var current_health = 80.0
var heal_amount = 35.0
# 先加血,再用 min 限制上限
current_health = current_health + heal_amount
# 运行结果: current_health = 115.0(超过了!)
current_health = min(current_health, max_health)
# 运行结果: current_health = 100.0(被限制在上限)
# 也可以一步完成:
current_health = min(current_health + heal_amount, max_health)进阶用法:在角色移动脚本中限制速度
C#
using Godot;
public partial class Player : CharacterBody2D
{
[Export] public float ExMoveSpeed = 300.0f;
[Export] public float ExSprintMultiplier = 1.5f;
private float _currentSpeed;
private bool _isSprinting = false;
public override void _PhysicsProcess(double delta)
{
float targetSpeed = ExMoveSpeed;
// 如果在冲刺,速度翻倍
if (_isSprinting)
{
targetSpeed = ExMoveSpeed * ExSprintMultiplier;
}
// 确保速度不超过最大值(防止加速道具叠加导致速度失控)
float absoluteMaxSpeed = 500.0f;
_currentSpeed = Mathf.Min(targetSpeed, absoluteMaxSpeed);
GD.Print($"当前速度: {_currentSpeed}");
// 运行结果(冲刺时): 当前速度: 450
// 运行结果(普通时): 当前速度: 300
}
}GDScript
extends CharacterBody2D
@export var move_speed: float = 300.0
@export var sprint_multiplier: float = 1.5
var _current_speed: float
var _is_sprinting: bool = false
func _physics_process(delta):
var target_speed = move_speed
# 如果在冲刺,速度翻倍
if _is_sprinting:
target_speed = move_speed * sprint_multiplier
# 确保速度不超过最大值(防止加速道具叠加导致速度失控)
var absolute_max_speed = 500.0
_current_speed = min(target_speed, absolute_max_speed)
print("当前速度: %s" % _current_speed)
# 运行结果(冲刺时): 当前速度: 450.0
# 运行结果(普通时): 当前速度: 300.0注意事项
- C# 中
Mathf.Min是重载函数:传入两个int返回int,传入两个float返回float,编译器会自动选择正确的版本。 - GDScript 中
min()通用版本:自动识别输入类型,同时支持int和float。如果需要明确类型,可以使用mini()(整数专用)或minf()(浮点数专用)。 - 两个参数类型要一致:在 C# 中,如果一个是
int另一个是float,编译器会报错(无法确定用哪个重载)。需要手动转换类型。 min经常和max配合使用:min用来限制上限,max用来限制下限。如果需要同时限制上下限,可以直接使用clamp()函数。- C# 中也可以用
System.Math.Min():功能相同,但返回类型为double。在 Godot 中推荐使用Mathf.Min(),保持和引擎一致。
