@export_color_no_alpha
2026/4/14大约 3 分钟
最后更新日期:2026-04-16
最后同步日期:2026-04-15 | Godot 官方原文 — @export_color_no_alpha
@export_color_no_alpha
定义
@export_color_no_alpha 是 GDScript 中的一个注解(annotation),用来在 Godot 编辑器的检查器面板中暴露一个颜色选择器,但与普通的 @export 不同的是,它隐藏了透明度(Alpha)通道。也就是说,你只能选择颜色的红、绿、蓝(RGB)三个分量,透明度始终固定为 1.0(完全不透明)。
想象你在给一个纯色物体上色——一个铁剑不需要半透明效果,用这个注解就能避免策划误调了透明度导致"隐身剑"的尴尬。
在 C# 中,对应的写法是 [Export(PropertyHint.ColorNoAlpha)]。
语法
C#
// 导出颜色(不含透明度)
[Export(PropertyHint.ColorNoAlpha)]
public Color ExTintColor = Colors.White;GDScript
# 导出颜色(不含透明度)
@export_color_no_alpha var ex_tint_color: Color = Color.WHITE参数说明
@export_color_no_alpha 不需要任何参数——它直接写在 Color 类型的变量声明前面即可。
| 说明项 | 详情 |
|---|---|
| 变量类型 | 必须是 Color |
| Alpha 通道 | 始终为 1.0(完全不透明),编辑器中不可编辑 |
| 编辑器控件 | 颜色选择器(仅显示 RGB 分量,无透明度滑块) |
返回值
@export_color_no_alpha 是一个注解,没有返回值。变量的值是一个 Color 对象,其 Alpha 分量固定为 1.0。
代码示例
C#
using Godot;
public partial class Character : Node3D
{
// ===== 基础用法:导出不透明颜色 =====
[Export(PropertyHint.ColorNoAlpha)]
public Color ExBodyColor = Colors.White;
public override void _Ready()
{
GD.Print($"角色颜色: R={ExBodyColor.R}, G={ExBodyColor.G}, B={ExBodyColor.B}, A={ExBodyColor.A}");
}
// 运行结果: 角色颜色: R=1, G=1, B=1, A=1
// ===== 实际场景:UI 主题颜色配置 =====
[Export(PropertyHint.ColorNoAlpha)]
public Color ExPrimaryColor = new Color(0.2f, 0.6f, 1.0f);
[Export(PropertyHint.ColorNoAlpha)]
public Color ExSecondaryColor = new Color(1.0f, 0.4f, 0.2f);
[Export(PropertyHint.ColorNoAlpha)]
public Color ExBackgroundColor = new Color(0.1f, 0.1f, 0.15f);
public void ApplyTheme()
{
GD.Print($"主色调: #{ExPrimaryColor.ToHtml(false)}");
GD.Print($"副色调: #{ExSecondaryColor.ToHtml(false)}");
GD.Print($"背景色: #{ExBackgroundColor.ToHtml(false)}");
}
// 运行结果: 主色调: #3399ff
// 运行结果: 副色调: #ff6633
// 运行结果: 背景色: #1a1a26
// ===== 进阶用法:基于颜色生成变体 =====
[Export(PropertyHint.ColorNoAlpha)]
public Color ExBaseTeamColor = Colors.Blue;
public Color GetLightVariant()
{
return new Color(
Mathf.Min(ExBaseTeamColor.R + 0.3f, 1.0f),
Mathf.Min(ExBaseTeamColor.G + 0.3f, 1.0f),
Mathf.Min(ExBaseTeamColor.B + 0.3f, 1.0f)
);
}
public Color GetDarkVariant()
{
return new Color(
Mathf.Max(ExBaseTeamColor.R - 0.3f, 0.0f),
Mathf.Max(ExBaseTeamColor.G - 0.3f, 0.0f),
Mathf.Max(ExBaseTeamColor.B - 0.3f, 0.0f)
);
}
public void PrintColorVariants()
{
GD.Print($"队伍颜色: #{ExBaseTeamColor.ToHtml(false)}");
GD.Print($"亮色变体: #{GetLightVariant().ToHtml(false)}");
GD.Print($"暗色变体: #{GetDarkVariant().ToHtml(false)}");
}
// 运行结果: 队伍颜色: #0000ff
// 运行结果: 亮色变体: #4d4dff
// 运行结果: 暗色变体: #000000
}GDScript
extends Node3D
# ===== 基础用法:导出不透明颜色 =====
@export_color_no_alpha var ex_body_color: Color = Color.WHITE
func _ready():
print("角色颜色: R=%.2f, G=%.2f, B=%.2f, A=%.2f" % [ex_body_color.r, ex_body_color.g, ex_body_color.b, ex_body_color.a])
# 运行结果: 角色颜色: R=1.00, G=1.00, B=1.00, A=1.00
# ===== 实际场景:UI 主题颜色配置 =====
@export_color_no_alpha var ex_primary_color: Color = Color(0.2, 0.6, 1.0)
@export_color_no_alpha var ex_secondary_color: Color = Color(1.0, 0.4, 0.2)
@export_color_no_alpha var ex_background_color: Color = Color(0.1, 0.1, 0.15)
func apply_theme():
print("主色调: #%s" % ex_primary_color.to_html(false))
print("副色调: #%s" % ex_secondary_color.to_html(false))
print("背景色: #%s" % ex_background_color.to_html(false))
# 运行结果: 主色调: #3399ff
# 运行结果: 副色调: #ff6633
# 运行结果: 背景色: #1a1a26
# ===== 进阶用法:基于颜色生成变体 =====
@export_color_no_alpha var ex_base_team_color: Color = Color.BLUE
func get_light_variant() -> Color:
return Color(
minf(ex_base_team_color.r + 0.3, 1.0),
minf(ex_base_team_color.g + 0.3, 1.0),
minf(ex_base_team_color.b + 0.3, 1.0)
)
func get_dark_variant() -> Color:
return Color(
maxf(ex_base_team_color.r - 0.3, 0.0),
maxf(ex_base_team_color.g - 0.3, 0.0),
maxf(ex_base_team_color.b - 0.3, 0.0)
)
func print_color_variants():
print("队伍颜色: #%s" % ex_base_team_color.to_html(false))
print("亮色变体: #%s" % get_light_variant().to_html(false))
print("暗色变体: #%s" % get_dark_variant().to_html(false))
# 运行结果: 队伍颜色: #0000ff
# 运行结果: 亮色变体: #4d4dff
# 运行结果: 暗色变体: #000000注意事项
@export_color_no_alpha只能用于Color类型的变量。- 编辑器中不会显示透明度滑块,但代码中
Color的 Alpha 值始终为 1.0(完全不透明)。 - 如果你需要带透明度的颜色选择器,请直接使用
@export配合Color类型,编辑器会自动显示包含 Alpha 通道的颜色选择器。 @export_color_no_alpha不需要任何参数。- C# 中使用
[Export(PropertyHint.ColorNoAlpha)]的形式。 - 虽然 Alpha 在编辑器中不可编辑,但代码中仍然可以手动设置 Alpha 值——这个注解只是编辑器层面的限制。
