血量显示在玩家头顶
This commit is contained in:
+5
-8
@@ -10,8 +10,7 @@ extends CharacterBody3D
|
||||
## │ └─ SpringArm (SpringArm3D) ← 承担俯仰 pitch,自动避障
|
||||
## │ └─ Camera (Camera3D)
|
||||
## ├─ Sync (MultiplayerSynchronizer) ← 同步 position 与 Body.rotation
|
||||
## └─ Hud (CanvasLayer) ← 本地玩家的血条(节点配置,不是代码建的)
|
||||
## └─ HealthLabel (Label)
|
||||
## └─ HealthLabel (Label3D) ← 头顶血条(节点配置,不是代码建的)
|
||||
##
|
||||
## 操作:WASD/方向键移动,鼠标转视角,Shift 疾跑,空格跳跃,Esc 释放/锁定鼠标
|
||||
|
||||
@@ -50,9 +49,8 @@ const JUMP_BUFFER_FRAMES: int = 6
|
||||
@onready var body: Node3D = $Body
|
||||
@onready var camera_rig: Node3D = $CameraRig
|
||||
@onready var spring_arm: SpringArm3D = $CameraRig/SpringArm
|
||||
## 血条是 player.tscn 里的节点,不是代码建的 UI
|
||||
@onready var _hud: CanvasLayer = $Hud
|
||||
@onready var _health_label: Label = $Hud/HealthLabel
|
||||
## 头顶血条是 player.tscn 里的 Label3D 节点(3D 世界里的文字,会跟着角色走)
|
||||
@onready var _health_label: Label3D = $HealthLabel
|
||||
|
||||
var _gravity: float = float(ProjectSettings.get_setting("physics/3d/default_gravity", 9.8))
|
||||
var _yaw: float = 0.0
|
||||
@@ -68,11 +66,10 @@ func _ready() -> void:
|
||||
if not _is_local:
|
||||
# 远端玩家只是一具「回放身体」:
|
||||
# 拆掉相机 —— 否则每多一个玩家就多一台 Camera3D 互相抢渲染;
|
||||
# 关掉血条 —— 否则 N 份血条叠在同一位置,显示的血量可能是别人的;
|
||||
# 关掉输入与物理 —— 否则与权威端双重模拟,表现为抖动、漂移、穿地。
|
||||
# 它的 position 与 Body.rotation 由子节点 Sync 同步过来。
|
||||
# 它的 position 与 Body.rotation 由子节点 Sync 同步过来;
|
||||
# 头顶血条保留 —— health 同样是同步过来的,这样谁都能看到别人还剩多少血。
|
||||
camera_rig.queue_free()
|
||||
_hud.visible = false
|
||||
set_physics_process(false)
|
||||
set_process_unhandled_input(false)
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user