VisibleOnScreenNotifier3D
2026/4/14大约 2 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — VisibleOnScreenNotifier3D
VisibleOnScreenNotifier3D
节点继承关系
继承自 Node
| 类型 | 名称 | 说明 |
|---|---|---|
| 属性 | Name | 节点名称 |
| 属性 | ProcessMode | 处理模式(始终 / 暂停时 / 仅编辑器) |
| 属性 | ProcessPriority | 处理优先级,数字越小越先执行 |
| 信号 | ready | 节点进入场景树并准备就绪 |
| 信号 | tree_entered | 节点进入场景树 |
| 信号 | tree_exited | 节点完全离开场景树 |
| 方法 | GetNode<T>() | 按路径获取子节点 |
| 方法 | AddChild() | 添加子节点 |
| 方法 | RemoveChild() | 移除子节点 |
| 方法 | QueueFree() | 帧结束后释放节点 |
| 方法 | GetParent() | 获取父节点 |
定义
VisibleOnScreenNotifier3D 和 VisibleOnScreenNotifier2D 是同一个东西,只不过用于3D场景。它会检测自己是否在3D摄像机的画面范围内。
简单说:3D版本的"视野观察者"。
使用频率:★★ 偶尔使用
节点用途
- 3D性能优化:屏幕外的3D物体停止计算
- LOD控制:物体离开视野时切换到低精度模型
- 生成/回收:3D物体进入视野时才激活
- 事件触发:角色走进视野时触发事件
使用场景
| 场景 | 说明 |
|---|---|
| 开放世界3D | 远处的敌人不在屏幕上时停止AI计算 |
| 大型场景 | 屏幕外的建筑物停止渲染细节 |
| 性能优化 | 屏幕外的粒子特效停止发射 |
常用节点搭配
| 搭配节点 | 搭配方式 |
|---|---|
| Node3D / CharacterBody3D | 作为子节点检测父节点是否在屏幕上 |
生效必备素材/资源
VisibleOnScreenNotifier3D 不需要外部资源。
节点属性与信号
属性
| 属性 | 类型 | 默认值 | 继承自 | 说明 |
|---|---|---|---|---|
| aabb | AABB | — | VisibleOnScreenNotifier3D | 检测区域的轴对齐包围盒(AABB) |
信号
| 信号 | 参数 | 说明 |
|---|---|---|
| screen_entered | 无 | 节点进入屏幕可见区域时触发 |
| screen_exited | 无 | 节点离开屏幕可见区域时触发 |
常用方法
| 方法 | 返回值 | 说明 |
|---|---|---|
| IsOnScreen() | bool | 当前是否在屏幕上可见 |
代码示例
C
// C# - 3D敌人屏幕外停止AI
using Godot;
public partial class Enemy3D : CharacterBody3D
{
private VisibleOnScreenNotifier3D _notifier;
public override void _Ready()
{
_notifier = GetNode<VisibleOnScreenNotifier3D>("VisibleOnScreenNotifier3D");
_notifier.ScreenEntered += () => SetProcess(true);
_notifier.ScreenExited += () => SetProcess(false);
}
}GDScript
# GDScript - 3D敌人屏幕外停止AI
extends CharacterBody3D
@onready var notifier: VisibleOnScreenNotifier3D = $VisibleOnScreenNotifier3D
func _ready():
notifier.screen_entered.connect(func(): set_process(true))
notifier.screen_exited.connect(func(): set_process(false))