CanvasModulate
2026/4/14大约 3 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — CanvasModulate
CanvasModulate
节点继承关系
继承链:Node -> CanvasModulate
继承自 Node
| 类型 | 名称 | 说明 |
|---|---|---|
| 属性 | Name | 节点名称 |
| 属性 | ProcessMode | 处理模式(始终 / 暂停时 / 仅编辑器) |
| 属性 | ProcessPriority | 处理优先级,数字越小越先执行 |
| 信号 | ready | 节点进入场景树并准备就绪 |
| 信号 | tree_entered | 节点进入场景树 |
| 信号 | tree_exited | 节点完全离开场景树 |
| 方法 | GetNode<T>() | 按路径获取子节点 |
| 方法 | AddChild() | 添加子节点 |
| 方法 | RemoveChild() | 移除子节点 |
| 方法 | QueueFree() | 帧结束后释放节点 |
| 方法 | GetParent() | 获取父节点 |
定义
CanvasModulate 用来给整个画面"染色"或"调暗"。就像给整个游戏画面戴上一副有色眼镜——你可以让整个画面变暗(实现昼夜效果),或者加一层红色滤镜(受伤效果),或者加一层蓝色滤镜(水下效果)。
简单说:它给整个画面盖上一层带颜色的滤镜。
使用频率:★★ 偶尔使用
节点用途
- 昼夜循环:通过改变颜色实现白天和黑夜的切换
- 受伤效果:角色受伤时给画面加一层红色滤镜
- 水下效果:进入水中时给画面加一层蓝色滤镜
- 氛围营造:恐怖游戏给画面加一层暗绿色
- 迷雾效果:远处变暗,近处正常
使用场景
| 场景 | 说明 |
|---|---|
| 日夜交替 | 随时间改变颜色值,模拟昼夜 |
| 受伤闪红 | 角色受伤时设置 Color 为红色并淡出 |
| 水下滤镜 | 进入水域时设置蓝色调 |
| 恐怖氛围 | 画面整体变暗变绿 |
常用节点搭配
| 搭配节点 | 搭配方式 |
|---|---|
| CanvasLayer | 放在 CanvasLayer 中,只影响特定层 |
| Timer | 配合 Timer 实现颜色渐变效果 |
生效必备素材/资源
CanvasModulate 不需要外部资源。
节点属性与信号
属性
| 属性 | 类型 | 默认值 | 继承自 | 说明 |
|---|---|---|---|---|
| color | Color | (1, 1, 1, 1) | CanvasModulate | 染色颜色。(1,1,1)=正常,(0.5,0.5,0.5)=变暗一半,(1,0,0)=红色滤镜 |
| luminance_mode | int | 0 | CanvasModulate | 亮度模式 |
信号
CanvasModulate 没有自己的特有信号。
常用方法
CanvasModulate 没有自己的特有方法,直接修改 color 属性即可。
代码示例
C
// C# - 日夜循环效果
using Godot;
public partial class DayNightCycle : Node
{
private CanvasModulate _modulate;
private float _timeOfDay = 0.25f; // 从早上6点开始(0-1 表示一天)
public override void _Ready()
{
_modulate = GetNode<CanvasModulate>("CanvasModulate");
}
public override void _Process(double delta)
{
_timeOfDay += (float)delta * 0.01f; // 时间流逝速度
if (_timeOfDay >= 1.0f) _timeOfDay -= 1.0f;
// 根据时间设置颜色
float brightness;
if (_timeOfDay < 0.25f)
{
// 0-6点:夜晚(暗)
brightness = 0.3f;
}
else if (_timeOfDay < 0.5f)
{
// 6-12点:白天渐亮
brightness = 0.3f + 0.7f * ((_timeOfDay - 0.25f) / 0.25f);
}
else if (_timeOfDay < 0.75f)
{
// 12-18点:白天(亮)
brightness = 1.0f;
}
else
{
// 18-24点:傍晚渐暗
brightness = 1.0f - 0.7f * ((_timeOfDay - 0.75f) / 0.25f);
}
_modulate.Color = new Color(brightness, brightness, brightness);
}
}GDScript
# GDScript - 日夜循环效果
extends Node
@onready var modulate: CanvasModulate = $CanvasModulate
var time_of_day: float = 0.25 # 从早上6点开始
func _process(delta):
time_of_day += delta * 0.01 # 时间流逝速度
if time_of_day >= 1.0:
time_of_day -= 1.0
# 根据时间设置颜色
var brightness: float
if time_of_day < 0.25:
brightness = 0.3 # 夜晚
elif time_of_day < 0.5:
brightness = 0.3 + 0.7 * ((time_of_day - 0.25) / 0.25) # 渐亮
elif time_of_day < 0.75:
brightness = 1.0 # 白天
else:
brightness = 1.0 - 0.7 * ((time_of_day - 0.75) / 0.25) # 渐暗
modulate.color = Color(brightness, brightness, brightness)