Color3
RGB-значение цвета. Используется во всех drawing-вызовах (draw.Rect, draw.Text, draw.Line и т.д.) и как Roblox BasePart.Color.
| Статические фабрики | 4 (new, fromRGB, fromHSV, fromHex) |
| Поля instance | R, G, B (все number, диапазон 0..1) |
| Методы instance | 3 (ToHex, ToHSV, Lerp) |
| Операторы | нет (ни арифметики, ни value-equality ==) |
Алиасы.
fromRGB,fromHSV,fromHex,ToHSV,ToHexимеют по три формы (PascalCase, camelCase, super-snake):Color3.fromRGB/Color3.from_r_g_b/Color3.FromRGB.Lerpимеет две (PascalCase + lowercase).newимеет одну. См. Обзор / Конвенция именования.
Диапазон каналов. Внутри
R,G,Bхранятся как0..1float'ы (Roblox-стандарт). Формаtostringпечатает их как0..255байты, см. tostring заметку ниже.
Краткий справочник
Static Color3.*
| Имя | Сигнатура | Заметка | Статус |
|---|---|---|---|
new | (r: number, g: number, b: number) → Color3 | компоненты в 0..1 (Roblox-стандарт) | проверено |
fromRGB | (r: number, g: number, b: number) → Color3 | компоненты в 0..255, молча клампятся | проверено |
fromHex | (hex: string) → Color3 | ровно 6 hex-символов, опциональный # в начале | проверено |
fromHSV | (h: number, s: number, v: number) → Color3 | hue / saturation / value, все в 0..1 | проверено |
Instance c.* и c:*
| Член | Тип | Заметка |
|---|---|---|
c.R, c.G, c.B | number (0..1) | Roblox-стандартные нормализованные каналы |
c:ToHex() | string | #RRGGBB uppercase с в едущим # |
c:ToHSV() | 3 числа (multi-return) | h, s, v каждый в 0..1 |
c:Lerp(other, t) | Color3 | покомпонентная линейная интерполяция |
new
Color3.new(r: number, g: number, b: number) → Color3
Создаёт цвет из трёх 0..1 float'ов. Это стандартный Roblox-конструктор.
Проверено: Color3.new(0.5, 0.25, 0.1) возвращает цвет с .R = 0.5, .G = 0.25, .B ≈ 0.1.
local soft_orange = Color3.new(0.9, 0.5, 0.1)
fromRGB
Color3.fromRGB(r: number, g: number, b: number) → Color3
Создаёт цвет из трёх 0..255 integer'ов. Внутри делит на 255 для получения 0..1 float'ов.
| Вызов | Результат (R, G, B) |
|---|---|
fromRGB(255, 128, 0) | (1.0, 0.502, 0.0) |
fromRGB(255, 0, 0) | (1.0, 0.0, 0.0) |
fromRGB(0, 0, 0) | (0.0, 0.0, 0.0) |
fromRGB(256, 256, 256) | (1.0, 1.0, 1.0) (clamp до 255) |
fromRGB(-1, -1, -1) | (0.0, 0.0, 0.0) (clamp до 0) |
Проверено: out-of-range аргументы молча клампятся. Без error.
local red = Color3.fromRGB(255, 0, 0)
local cyan = Color3.fromRGB(0, 255, 255)
draw.Rect(10, 10, 100, 100, red, 0, 0, 1)
fromHex
Color3.fromHex(hex: string) → Color3
Парсит 6-символьную hex-строку. Ведущий # опционален, регистр не имеет значения.
Проверенные входы:
| Вызов | Результат |
|---|---|
fromHex("#FF8000") | (1.0, 0.502, 0.0) (оранжевый) |
fromHex("FF8000") | то же |
fromHex("ff8000") | то же |
fromHex("#fff") | error: "Invalid hex code, must be 6 characters long" |
fromHex("#FFFFFFFF") | error: "Invalid hex code, must be 6 characters long" |
fromHex("garbage") | та же ошибка |
fromHex("") | та же ошибка |
#fff) НЕ поддерживаетсяВ отличие от CSS, 3-символьная короткая форма raise'ит error. Всегда передавай полную 6-символьную форму.
local accent = Color3.fromHex("#5BC0EB")
local warn = Color3.fromHex("FFB400")
fromHSV
Color3.fromHSV(h: number, s: number, v: number) → Color3
Создаёт цвет из hue / saturation / value, каждый в 0..1. Проверено: Color3.fromHSV(0, 1, 1) возвращает чистый красный (R=1, G=0, B=0).
cheat.register("onPaint", function()
local hue = (utility.GetTickCount() % 1000) / 1000
local color = Color3.fromHSV(hue, 1, 1)
draw.Text("rainbow", 10, 10, color, 12, 1)
end)
ToHex
c:ToHex() → string
Возвращает #RRGGBB uppercase с ведущим #. Проверено: Color3.fromRGB(255, 0, 0):ToHex() возвращает "#FF0000".
print(Color3.fromRGB(91, 192, 235):ToHex())
ToHSV
c:ToHSV() → h: number, s: number, v: number
Возвращает три числа (multi-return), каждое в 0..1. Обратная к fromHSV.
Проверено: Color3.fromHSV(0, 1, 1):ToHSV() возвращает (0, 1, 1).
local h, s, v = my_color:ToHSV()
local rotated = Color3.fromHSV((h + 0.5) % 1, s, v)
Lerp
c:Lerp(other: Color3, t: number) → Color3
Покомпонентная линейная интерполяция между двумя цветами. t = 0 возвращает c, t = 1 возвращает other, без clamping для значений вне [0, 1].
Пров ерено: Color3.fromRGB(255,0,0):Lerp(Color3.fromRGB(0,0,255), 0.5) возвращает (R=0.5, G=0, B=0.5) (50/50 red-blue микс, фиолетовый).
local function pulse(t)
return Color3.fromRGB(255, 50, 50):Lerp(Color3.fromRGB(50, 255, 50), t)
end
tostring
tostring(color) форматирует цвет как "r, g, b" с каналами в 0..255 байтах, несмотря на то что внутри хранится 0..1 float.
| Цвет | tostring |
|---|---|
Color3.new(0.5, 0.25, 0.1) | "128, 64, 26" |
Color3.fromRGB(255, 128, 0) | "255, 128, 0" |
Color3.fromRGB(0, 0, 0) | "0, 0, 0" |
Color3.fromHex("#FF0000") | "255, 0, 0" |
Это не формат который использует сам Roblox ("R, G, B" как 0..1 float). Считай tostring(color) debug-помощником, не парси его.
entity.GetLocalPlayer().TeamColorCheat-овский player TeamColor userdata использует другую схему: tostring печатает 0..65535 16-bit каналы, а его .R/.G/.B аксессоры возвращают 0..255 байты. Color3 другой: tostring печатает 0..255 байты, а .R/.G/.B возвращают 0..1 float'ы.
Без арифметики, без value-equality
В отличие от Vector3, у Color3 нет арифметических метаметодов. Проверено: каждый оператор ниже raise'ит Lua-level ошибку.
| Op | Результат |
|---|---|
red + blue | error: "attempt to perform arithmetic on ... (a userdata value)" |
red * 2 | та же ошибка |
-red | та же ошибка |
red == red2 | identity-only, возвращает false для двух value-equal но distinct цветов |
Чтобы комбинировать цвета используй :Lerp или считай вручную:
local function add_colors(a, b)
return Color3.new(
math.min(1, a.R + b.R),
math.min(1, a.G + b.G),
math.min(1, a.B + b.B))
end
Паттерны
Status-палитра
local UI = {
fg = Color3.fromRGB(230, 230, 230),
accent = Color3.fromHex("#5BC0EB"),
ok = Color3.fromRGB( 90, 220, 120),
warn = Color3.fromRGB(240, 180, 80),
err = Color3.fromRGB(240, 90, 90),
bg = Color3.new(0.05, 0.06, 0.07),
}
Цвет от health-ratio
local function hp_color(hp_ratio)
local low = Color3.fromRGB(220, 60, 60)
local high = Color3.fromRGB( 60, 220, 90)
return low:Lerp(high, math.max(0, math.min(1, hp_ratio)))
end
Конвертация TeamColor игрока в Color3
local function team_to_color3(player)
local tc = player.TeamColor
return Color3.fromRGB(tc.R, tc.G, tc.B)
end
Hue-rotate цвета
local function rotate_hue(c, delta)
local h, s, v = c:ToHSV()
return Color3.fromHSV((h + delta) % 1, s, v)
end