Marker3D
2026/4/14大约 3 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — Marker3D
Marker3D
节点继承关系
继承自 Node
| 类型 | 名称 | 说明 |
|---|---|---|
| 属性 | Name | 节点名称 |
| 属性 | ProcessMode | 处理模式(始终 / 暂停时 / 仅编辑器) |
| 属性 | ProcessPriority | 处理优先级,数字越小越先执行 |
| 信号 | ready | 节点进入场景树并准备就绪 |
| 信号 | tree_entered | 节点进入场景树 |
| 信号 | tree_exited | 节点完全离开场景树 |
| 方法 | GetNode<T>() | 按路径获取子节点 |
| 方法 | AddChild() | 添加子节点 |
| 方法 | RemoveChild() | 移除子节点 |
| 方法 | QueueFree() | 帧结束后释放节点 |
| 方法 | GetParent() | 获取父节点 |
定义
Marker3D 和 Marker2D 是同一个东西,只不过 Marker3D 用在3D空间里。它也是只用来"标记位置"的空壳节点,在编辑器中显示为一个小坐标轴图标。
就像在3D建模软件里放的参考点一样,它自己看不见,但其他东西可以记住它的位置。
简单说:Marker3D 就是3D版本的大头针,标记一个3D空间中的位置和方向。
使用频率:★★★★ 维度专用常用
节点用途
- 枪口位置:标记3D角色武器发射子弹的起点
- 特效生成点:标记3D粒子特效(爆炸、火焰)应该出现的位置
- 相机挂载点:标记第三人称相机应该挂在角色的哪个位置
- 挂载点:标记角色手部位置,用来挂载武器模型
- 物品拾取点:标记物品应该出现在角色身上的哪个位置
使用场景
| 场景 | 说明 |
|---|---|
| FPS射击游戏 | 在武器模型上放 Marker3D 标记枪口位置 |
| 第三人称游戏 | 在角色身上放 Marker3D 标记相机挂载点 |
| 粒子特效 | 在汽车尾部放 Marker3D 标记排气管喷火位置 |
| 武器系统 | 在角色手上放 Marker3D,动态挂载不同的武器 |
常用节点搭配
| 搭配节点 | 搭配方式 |
|---|---|
| CharacterBody3D / MeshInstance3D | Marker3D 作为子节点,标记关键位置 |
| GPUParticles3D | 用 Marker3D 的位置和方向来定位粒子发射点 |
| Camera3D | Marker3D 标记相机位置,SpringArm3D 控制相机行为 |
生效必备素材/资源
Marker3D 不需要任何外部资源。
节点属性与信号
属性
Marker3D 没有自己的特有属性,完全继承自 Node3D 的位置、旋转、缩放属性。
| 属性 | 类型 | 默认值 | 继承自 | 说明 |
|---|---|---|---|---|
| position | Vector3 | (0, 0, 0) | Node3D | 标记的位置坐标 |
| rotation_degrees | Vector3 | (0, 0, 0) | Node3D | 标记的旋转角度(度数) |
| scale | Vector3 | (1, 1, 1) | Node3D | 标记的缩放比例 |
信号
Marker3D 没有自己的特有信号。
常用方法
| 方法/属性 | 说明 |
|---|---|
| GlobalPosition | 获取 Marker3D 在世界坐标系中的绝对位置 |
| GlobalTransform | 获取 Marker3D 的完整世界变换(位置 + 旋转 + 缩放) |
代码示例
C
// C# - FPS射击游戏:用 Marker3D 标记枪口位置
using Godot;
public partial class FPSWeapon : Node3D
{
[Export] public PackedScene BulletScene { get; set; }
private Marker3D _muzzle;
public override void _Ready()
{
_muzzle = GetNode<Marker3D>("Muzzle");
}
public override void _Process(double delta)
{
if (Input.IsActionJustPressed("shoot"))
{
Shoot();
}
}
private void Shoot()
{
var bullet = BulletScene.Instantiate<RigidBody3D>();
// 子弹从枪口位置发射,方向为枪口朝向
bullet.GlobalPosition = _muzzle.GlobalPosition;
// -Z 方向是 Godot 3D 中物体"前方"的默认方向
bullet.LinearVelocity = -_muzzle.GlobalBasis.Z * 30f;
GetTree().Root.AddChild(bullet);
}
}GDScript
# GDScript - FPS射击游戏:用 Marker3D 标记枪口位置
extends Node3D
@export var bullet_scene: PackedScene
@onready var muzzle: Marker3D = $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
# -Z 方向是 Godot 3D 中物体"前方"的默认方向
bullet.linear_velocity = -muzzle.global_basis.z * 30.0
get_tree().root.add_child(bullet)