minf
2026/4/14大约 4 分钟
最后同步日期:2026-04-16 | Godot 官方原文 — minf
minf
定义
minf() 用来比较两个浮点数(小数),返回更小的那个。
就像你在两个价格中挑便宜的——minf(29.9, 49.5) 会返回 29.9。
minf() 和 min() 的区别在于:minf() 明确指定只处理浮点数(小数)。这样代码意图更清晰,也能避免整数和浮点数混用时出问题。
在游戏开发中,minf 常用于:限制角色血量不超过上限、限制移动速度不超过最大值、防止体力值溢出、控制摄像机缩放范围等。
函数签名
C#
public static float Min(float a, float b)GDScript
func minf(a: float, b: float) -> float参数说明
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
a | float | 是 | 第一个浮点数 |
b | float | 是 | 第二个浮点数 |
返回值
float —— a 和 b 中较小的那个值。如果两个相等,返回 a。返回值一定是 float 类型。
代码示例
基础用法:比较两个浮点数
C#
float a = Mathf.Min(3.5f, 7.2f); // 运行结果: 3.5
float b = Mathf.Min(-1.0f, 2.0f); // 运行结果: -1.0
float c = Mathf.Min(5.0f, 5.0f); // 运行结果: 5.0(相等时返回第一个)GDScript
var a = minf(3.5, 7.2) # 运行结果: 3.5
var b = minf(-1.0, 2.0) # 运行结果: -1.0
var c = minf(5.0, 5.0) # 运行结果: 5.0(相等时返回第一个)实际场景:限制血量和体力值
C#
// 确保血量不超过最大值
float maxHealth = 100.0f;
float currentHealth = 120.0f;
float actualHealth = Mathf.Min(currentHealth, maxHealth);
// 运行结果: 100.0(被限制在上限)
// 确保体力值不超过最大值
float maxStamina = 50.0f;
float currentStamina = 30.0f;
float staminaAfterRest = Mathf.Min(currentStamina + 25.0f, maxStamina);
// 运行结果: 50.0(30 + 25 = 55,但不超过上限 50)
// 实际使用:限制摄像机缩放
float currentZoom = 0.5f;
float minAllowedZoom = 1.0f; // 最小允许缩放(最近距离)
float effectiveZoom = Mathf.Min(minAllowedZoom, currentZoom);
// 运行结果: 0.5(在允许范围内,保持不变)GDScript
# 确保血量不超过最大值
var max_health = 100.0
var current_health = 120.0
var actual_health = minf(current_health, max_health)
# 运行结果: 100.0(被限制在上限)
# 确保体力值不超过最大值
var max_stamina = 50.0
var current_stamina = 30.0
var stamina_after_rest = minf(current_stamina + 25.0, max_stamina)
# 运行结果: 50.0(30 + 25 = 55,但不超过上限 50)
# 实际使用:限制摄像机缩放
var current_zoom = 0.5
var min_allowed_zoom = 1.0 # 最小允许缩放(最近距离)
var effective_zoom = minf(min_allowed_zoom, current_zoom)
# 运行结果: 0.5(在允许范围内,保持不变)进阶用法:在武器系统中限制攻击速度
C#
using Godot;
public partial class Weapon : Node
{
[Export] public float ExBaseDamage = 25.0f;
[Export] public float ExMaxAttackSpeed = 5.0f;
private float _attackSpeed = 2.0f;
public void ApplySpeedBuff(float buffAmount)
{
_attackSpeed += buffAmount;
// 确保攻击速度不超过最大值
_attackSpeed = Mathf.Min(_attackSpeed, ExMaxAttackSpeed);
// 运行结果(假设 buffAmount=2.0): _attackSpeed = 4.0
// 运行结果(假设 buffAmount=4.0): _attackSpeed = 5.0(被限制)
GD.Print($"当前攻击速度: {_attackSpeed}");
}
public void CalculateDamage(float bonusMultiplier)
{
float rawDamage = ExBaseDamage * bonusMultiplier;
// 限制单次伤害不超过 100(防止秒杀)
float maxDamagePerHit = 100.0f;
float finalDamage = Mathf.Min(rawDamage, maxDamagePerHit);
// 运行结果(假设 bonusMultiplier=3.0): finalDamage = 75.0
// 运行结果(假设 bonusMultiplier=5.0): finalDamage = 100.0(被限制)
GD.Print($"最终伤害: {finalDamage}");
}
}GDScript
extends Node
@export var base_damage: float = 25.0
@export var max_attack_speed: float = 5.0
var _attack_speed: float = 2.0
func apply_speed_buff(buff_amount: float):
_attack_speed += buff_amount
# 确保攻击速度不超过最大值
_attack_speed = minf(_attack_speed, max_attack_speed)
# 运行结果(假设 buff_amount=2.0): _attack_speed = 4.0
# 运行结果(假设 buff_amount=4.0): _attack_speed = 5.0(被限制)
print("当前攻击速度: %s" % _attack_speed)
func calculate_damage(bonus_multiplier: float):
var raw_damage = base_damage * bonus_multiplier
# 限制单次伤害不超过 100(防止秒杀)
var max_damage_per_hit = 100.0
var final_damage = minf(raw_damage, max_damage_per_hit)
# 运行结果(假设 bonus_multiplier=3.0): final_damage = 75.0
# 运行结果(假设 bonus_multiplier=5.0): final_damage = 100.0(被限制)
print("最终伤害: %s" % final_damage)注意事项
- 此函数只接受浮点数(float)参数:如果需要比较整数,请使用
mini()或min()。 - C# 中没有单独的
Minf函数:C# 统一使用Mathf.Min(float, float)来处理浮点数比较,效果和 GDScript 的minf()完全相同。 Mathf.MinvsSystem.Math.Min:Mathf.Min()返回float类型(32 位),System.Math.Min()返回double类型(64 位)。在 Godot 中推荐使用Mathf.Min()。- 浮点数比较可能受精度影响:如果需要判断两个浮点数是否"近似相等",请使用
is_equal_approx()。 - 如果需要同时限制最大值和最小值:请使用
clampf()函数,它相当于maxf(minf(value, max), min)的一步到位写法。
