Marker2D
2026/4/14大约 3 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — Marker2D
Marker2D
节点继承关系
继承自 Node
| 类型 | 名称 | 说明 |
|---|---|---|
| 属性 | Name | 节点名称 |
| 属性 | ProcessMode | 处理模式(始终 / 暂停时 / 仅编辑器) |
| 属性 | ProcessPriority | 处理优先级,数字越小越先执行 |
| 信号 | ready | 节点进入场景树并准备就绪 |
| 信号 | tree_entered | 节点进入场景树 |
| 信号 | tree_exited | 节点完全离开场景树 |
| 方法 | GetNode<T>() | 按路径获取子节点 |
| 方法 | AddChild() | 添加子节点 |
| 方法 | RemoveChild() | 移除子节点 |
| 方法 | QueueFree() | 帧结束后释放节点 |
| 方法 | GetParent() | 获取父节点 |
定义
一个只用来"标记位置"的节点,它自己什么都不画、什么都不做。就像你在地图上插了一根大头针——大头针本身不重要,重要的是它指的位置。
在 Godot 编辑器里,Marker2D 会显示为一个小十字准星图标,方便你用鼠标拖动来精确定位。
简单说:它就是一个空壳子,唯一的价值就是告诉你"这个位置在哪"。
使用频率:★★★★ 维度专用常用
节点用途
- 枪口位置:标记子弹从角色的哪个位置发射出去
- 特效生成点:标记粒子特效应该出现在哪里(比如脚下的灰尘)
- 挂载点:标记角色手的位置,用来挂载武器模型
- 路径点:标记敌人巡逻路线上的关键位置
- UI锚点:标记血条应该跟随角色的哪个位置
使用场景
| 场景 | 说明 |
|---|---|
| 射击游戏 | 在角色身上放一个 Marker2D 标记枪口位置,子弹从这里生成 |
| 角色系统 | 在角色手上放 Marker2D,用来挂载和更换武器 |
| 粒子特效 | 在角色脚下放 Marker2D,跑步时从这里生成灰尘粒子 |
| 巡逻系统 | 用多个 Marker2D 标记敌人巡逻的路径点 |
常用节点搭配
| 搭配节点 | 搭配方式 |
|---|---|
| CharacterBody2D / AnimatedSprite2D | Marker2D 作为子节点,标记枪口、手部等位置 |
| GPUParticles2D | 用 Marker2D 的位置来定位粒子发射点 |
| Camera2D | Marker2D 标记相机应该对准的位置 |
生效必备素材/资源
Marker2D 不需要任何外部资源。
节点属性与信号
属性
Marker2D 没有自己的特有属性,完全继承自 Node2D 的位置、旋转、缩放属性。
| 属性 | 类型 | 默认值 | 继承自 | 说明 |
|---|---|---|---|---|
| position | Vector2 | (0, 0) | Node2D | 标记的位置坐标,这是最常用的属性 |
| rotation | float | 0.0 | Node2D | 标记的旋转角度(弧度) |
| scale | Vector2 | (1, 1) | Node2D | 标记的缩放比例 |
信号
Marker2D 没有自己的特有信号,完全继承自 Node。
常用方法
Marker2D 没有自己的特有方法,常用继承自 Node2D 的 GlobalPosition 属性获取世界坐标。
| 方法/属性 | 说明 |
|---|---|
| GlobalPosition | 获取 Marker2D 在世界坐标系中的绝对位置 |
代码示例
C
// C# - 射击游戏:用 Marker2D 标记枪口位置
using Godot;
public partial class Player : CharacterBody2D
{
[Export] public PackedScene BulletScene { get; set; }
// 在编辑器中把 Marker2D 拖拽到这个变量上
private Marker2D _muzzle;
public override void _Ready()
{
_muzzle = GetNode<Marker2D>("Muzzle");
}
public override void _Process(double delta)
{
if (Input.IsActionJustPressed("shoot"))
{
Shoot();
}
}
private void Shoot()
{
var bullet = BulletScene.Instantiate<RigidBody2D>();
// 子弹从枪口位置生成,枪口方向为子弹飞行方向
bullet.GlobalPosition = _muzzle.GlobalPosition;
bullet.Rotation = _muzzle.GlobalRotation;
GetParent().AddChild(bullet);
}
}GDScript
# GDScript - 射击游戏:用 Marker2D 标记枪口位置
extends CharacterBody2D
@export var bullet_scene: PackedScene
@onready var muzzle: Marker2D = $Muzzle
func _process(_delta):
if Input.is_action_just_pressed("shoot"):
shoot()
func shoot():
var bullet = bullet_scene.instantiate()
# 子弹从枪口位置生成,枪口方向为子弹飞行方向
bullet.global_position = muzzle.global_position
bullet.rotation = muzzle.global_rotation
get_parent().add_child(bullet)