2.6 KiB
2.6 KiB
2026-10-09
简易准心(Crosshair)
- 新增
ui/crosshair.gd:@tool extends Control,用_draw()画十字(gap/length/thickness/dot 可导出调参),mouse_filter = IGNORE,监听NOTIFICATION_RESIZED重绘。 - 挂载约定:
CanvasLayer > Crosshair(Control),Control 锚点为 Full Rect,中心即屏幕中心;推荐挂在CameraRig之下 —— 因为player.gd _ready()对非 authority 会camera_rig.queue_free(),远端玩家准心随之一并释放,无需额外代码。 - 项目 stretch 模式为
canvas_items+expand,CanvasLayer 会自动跟随缩放。
后续改动:只保留「点」
- 最终形态:准心 = 屏幕中心一个点,无十字、无样式开关(
enum Style已移除)。 - 导出参数:
dot_color/dot_radius(默认 2.5) /outline/outline_color/outline_width。 _draw()先画描边圆再画主体圆,保证浅背景可见。
player.gd 拆解方案(待执行)
- 现状:
character/player/player.gd155 行,混了视角 / 移动跳跃 / 拾取 / 多人权限四类职责。 - 方案:子节点组件化(与既有
PlayerAnimator同模式)。根节点降为协调器(~40 行),新增Look/Motor/Pickup三个 Node 子节点,各自挂player_look.gd/player_motor.gd/player_pickup.gd。 - 三条硬约束:①
move_and_slide()留在根节点,Motor 只写body.velocity;② 物理顺序由根节点显式编排(motor.step → move_and_slide → animator → pickup),不让子节点各写_physics_process;③ 非 authority 时三个组件的输入/物理必须一并关闭。 - 范式定位:组合优于继承 + 组件模式(Component Pattern);协调器部分带 Facade/Mediator 色彩;
setup()注入属手工依赖注入。不是 ECS(Godot 节点是「带行为的对象」,非纯数据组件)。 - 状态:已落地(2026-10-09)。新增
player_look.gd/player_motor.gd/player_pickup.gd(均带class_name:PlayerLook / PlayerMotor / PlayerPickup);player.gd重写为协调器(~65 行);player.tscn追加 Look / Motor / Pickup 三个 Node 子节点(挂 FaceRig 之后,ext_resource id 13_look / 14_motor / 15_pickup,未写 uid 由 Godot 补)。 - 场景格式注意:本项目的 .tscn 节点带非标准
unique_id=(Godot 4.7 特性),unique_id与load_steps均可省略;paint_panel.tscn就完全没写,可作参照。 - 已确认无外部脚本引用被搬走的属性(仅
world/main.tscn通过场景 uid 引用玩家场景)。 - 顺手去掉了原
_pickObject里的两行print()调试输出。