BackBufferCopy
2026/4/14大约 3 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — BackBufferCopy
BackBufferCopy
节点继承关系
继承自 Node
| 类型 | 名称 | 说明 |
|---|---|---|
| 属性 | Name | 节点名称 |
| 属性 | ProcessMode | 处理模式(始终 / 暂停时 / 仅编辑器) |
| 属性 | ProcessPriority | 处理优先级,数字越小越先执行 |
| 信号 | ready | 节点进入场景树并准备就绪 |
| 信号 | tree_entered | 节点进入场景树 |
| 信号 | tree_exited | 节点完全离开场景树 |
| 方法 | GetNode<T>() | 按路径获取子节点 |
| 方法 | AddChild() | 添加子节点 |
| 方法 | RemoveChild() | 移除子节点 |
| 方法 | QueueFree() | 帧结束后释放节点 |
| 方法 | GetParent() | 获取父节点 |
定义
BackBufferCopy 的作用是把当前屏幕上已经渲染好的画面"拍一张快照"保存下来。这张快照可以在后续的着色器(Shader)或后处理效果中使用。
打个比方:就像画家先画好一幅画,然后用相机拍下来,接下来可以在照片上做各种特效处理(模糊、扭曲、色彩调整等),而不会影响原画。
简单说:它把当前屏幕画面复制一份存起来,给后处理特效用。
使用频率:★ 基本用不到
节点用途
- 屏幕后处理:模糊、色彩调整、扭曲等画面特效
- 运动模糊:利用上一帧和当前帧的差异制作运动模糊
- 画面扭曲:水面倒影、热浪效果等
- 延迟渲染:保存画面供后续步骤使用
使用场景
| 场景 | 说明 |
|---|---|
| 水面效果 | 用 BackBufferCopy 保存画面,在水面的着色器中做倒影效果 |
| 运动模糊 | 保存当前帧,与下一帧混合产生模糊效果 |
| 画面扭曲 | 保存画面,在着色器中做扭曲处理 |
常用节点搭配
| 搭配节点 | 搭配方式 |
|---|---|
| ShaderMaterial | 在着色器中使用 TEXTURE 采样 BackBufferCopy 的结果 |
生效必备素材/资源
BackBufferCopy 通常需要配合着色器(Shader)使用。
节点属性与信号
属性
| 属性 | 类型 | 默认值 | 继承自 | 说明 |
|---|---|---|---|---|
| copy_mode | int | 0 | BackBufferCopy | 复制模式:0=禁用,1=在视图范围内复制,2=全屏复制 |
| rect | Rect2 | — | BackBufferCopy | 复制区域矩形 |
| frame_count | int | 1 | BackBufferCopy | 缓冲帧数,1=只保存当前帧,2=保存最近2帧 |
信号
BackBufferCopy 没有自己的特有信号。
常用方法
BackBufferCopy 没有自己的特有方法。
代码示例
C
// C# - BackBufferCopy 基本使用
// BackBufferCopy 通常在编辑器中直接添加并配置,
// 然后在着色器中使用。这里展示如何在场景中创建。
using Godot;
public partial class ScreenEffects : Node2D
{
private BackBufferCopy _bufferCopy;
public override void _Ready()
{
_bufferCopy = new BackBufferCopy();
_bufferCopy.CopyMode = BackBufferCopy.CopyModeEnum.Disabled;
// 如需全屏复制:
// _bufferCopy.CopyMode = BackBufferCopy.CopyModeEnum.Full;
AddChild(_bufferCopy);
}
}GDScript
# GDScript - BackBufferCopy 基本使用
# BackBufferCopy 通常在编辑器中直接添加并配置
extends Node2D
var buffer_copy: BackBufferCopy
func _ready():
buffer_copy = BackBufferCopy.new()
buffer_copy.copy_mode = BackBufferCopy.CopyMode.COPY_MODE_DISABLED
# 如需全屏复制:
# buffer_copy.copy_mode = BackBufferCopy.CopyMode.COPY_MODE_FULL
add_child(buffer_copy)