人物控制器1
This commit is contained in:
@@ -46,10 +46,17 @@ const ANIM_LOOPED: Array[int] = [
|
||||
@export_group("片段基准速度")
|
||||
## 各片段在多少米/秒下按 1.0 倍播放。这是片段自身的属性,不是控制器的手感参数:
|
||||
## 控制器把跑速调到 6 m/s 时,这段动画自然播成 1.2 倍,脚步自动跟上,两边不用对齐。
|
||||
@export var walk_ref_speed: float = 5.0
|
||||
@export var run_ref_speed: float = 8.5
|
||||
@export var crouch_ref_speed: float = 2.5
|
||||
@export var sneak_ref_speed: float = 1.6
|
||||
##
|
||||
## 注意:这几个数和「模型缩放」严格绑定 —— 角色尺寸一变,同一个片段一个循环跨出的
|
||||
## 世界距离也按同比例变,所以基准速度必须跟着乘同一系数,否则脚步会明显打滑。
|
||||
## 当前值对应 0.15 m 身高(基准系数 k ≈ 0.0857,推导见 player_motor.gd 顶部的说明)。
|
||||
##
|
||||
## sneak_ref_speed 要和 player_motor.gd 的 crouch_speed 保持一致 ——
|
||||
## 蹲着走时播的就是 SNEAK 片段,两边不等就会打滑。(当前两者都是 0.2143)
|
||||
@export var walk_ref_speed: float = 0.4286
|
||||
@export var run_ref_speed: float = 0.7286
|
||||
@export var crouch_ref_speed: float = 0.2143
|
||||
@export var sneak_ref_speed: float = 0.2143
|
||||
|
||||
## 状态 → AnimationPlayer 里真正的片段键(形如 "walk/walk")。_ready() 里解析一次。
|
||||
## 不直接拿 ANIM_CLIPS 的值去播,是因为多库时短名查不到 —— 见 _ready() 里的说明。
|
||||
@@ -138,8 +145,8 @@ func _resolve_state(
|
||||
velocity: Vector3, on_floor: bool, sprinting: bool, crouching: bool
|
||||
) -> int:
|
||||
if not on_floor:
|
||||
# 上升用 jump、越过顶点用 fall。jump 片段长 0.5s,
|
||||
# 恰好约等于 jump_velocity 5 / 重力 9.8 的上升时间。
|
||||
# 上升用 jump、越过顶点用 fall。jump 片段长 0.5s,比「jump_velocity / 重力」
|
||||
# 的上升时间略长,所以上升段不会播完 —— 越过顶点立刻切 fall,观感上是连贯的。
|
||||
return AnimState.JUMP if velocity.y > 0.0 else AnimState.FALL
|
||||
var moving := Vector2(velocity.x, velocity.z).length() >= idle_threshold
|
||||
if crouching:
|
||||
|
||||
Reference in New Issue
Block a user