手掌指针
This commit is contained in:
@@ -5,13 +5,15 @@ extends CharacterBody3D
|
||||
## Look 视角 character/player/player_look.gd
|
||||
## Motor 移动跳跃 character/player/player_motor.gd
|
||||
## Pickup 拾取 character/player/player_pickup.gd
|
||||
## Animator 动画表现 character/player/player_animator.gd(挂在 Body/AnimationPlayer 上)
|
||||
## Animator 动画表现 character/player/player_animator.gd(挂在 AnimationPlayer 上)
|
||||
##
|
||||
## 本脚本不实现任何操作,只负责「谁先谁后」和「谁有权跑」。
|
||||
|
||||
@onready var body: Node3D = $Body
|
||||
@onready var camera_rig: Node3D = $CameraRig
|
||||
@onready var camera: Camera3D = $CameraRig/Camera
|
||||
## 准心(挂在 CameraRig/HUD 下)。远端玩家的 HUD 会随 camera_rig 一起被释放。
|
||||
@onready var crosshair: Crosshair = $CameraRig/HUD/Crosshair
|
||||
@onready var animation_player: PlayerAnimator = $AnimationPlayer
|
||||
@onready var look: PlayerLook = $Look
|
||||
@onready var motor: PlayerMotor = $Motor
|
||||
@@ -43,6 +45,8 @@ func _ready() -> void:
|
||||
camera.get_node("InteractionRay") as RayCast3D,
|
||||
camera.get_node("InteractionPos") as Marker3D
|
||||
)
|
||||
# 准心接线:拾取组件一发现交互状态变化,就通知准心换外观(点 / 手 / 抓)。
|
||||
pickup.interact_state_changed.connect(_on_pickup_interact_state_changed)
|
||||
set_mouse_captured(true)
|
||||
|
||||
|
||||
@@ -62,6 +66,17 @@ func set_mouse_captured(captured: bool) -> void:
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED if captured else Input.MOUSE_MODE_VISIBLE
|
||||
|
||||
|
||||
## 把拾取组件的两个布尔量收敛成准心的三态。优先级:抓着 > 指着 > 没有。
|
||||
## 系统鼠标指针由准心自己同步(Crosshair.sync_os_cursor),这里不用管。
|
||||
func _on_pickup_interact_state_changed(hovering: bool, holding: bool) -> void:
|
||||
var state := Crosshair.GrabState.NONE
|
||||
if holding:
|
||||
state = Crosshair.GrabState.HOLDING
|
||||
elif hovering:
|
||||
state = Crosshair.GrabState.HOVER
|
||||
crosshair.set_grab_state(state)
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
# 顺序固定:算速度 → 推进 → 播动画 → 搬物体。
|
||||
# 由根节点统一编排,各组件自己不许写 _physics_process ——
|
||||
|
||||
Reference in New Issue
Block a user