v2.0 — dokumentacja / PL
Wszystkie parametry przekazujesz do konstruktora jako trzeci argument
(paramsOverride), albo ustawiasz w dowolnym momencie przez
:SetParams({}). Poniżej każdy parametr z opisem co wizualnie zmienia.
0.5–0.8 daje efekt
ciężkiej, ceremonialnej flagi. Wartości powyżej 2.0 wyglądają
chaotycznie.
1.0–2.0 to słaby wietrzyk,
4.0–6.0 to silny wiatr.
0.6–1.0)
tworzą długie, leniwe fale. Wysokie (2.5+) — szybkie, nerwowe
ruchy. Używany głównie w Cheap Mode.
0.0 to idealnie równy wiatr (mechaniczny). Wartość
0.5+ to wyraźna zmienność.
0.5–1.0
to powolne, ledwo widoczne zaburzenia. 2.0+ to wyraźnie
drgająca tkanina.
0.4 — powolny,
ciężki podmuch. Wartość 1.5+ — szybkie podrywy.
0.02
to rzadkie, dramatyczne podrywy. 0.1+ — prawie ciągły podmuch.
5.0 to wolne, widoczne
fale. 12+ to szybkie drgania jak przy silnym wietrze.
0.0 wyłącza flutter całkowicie. 0.6+ —
tkanina prawie zawsze trzepocze na krawędzi.
math.rad(11) to około 11 stopni.
math.rad(18).
1.0 to opadanie liniowe
(równomierne). Wartość 1.5+ — środek flagi prawie poziomy,
tylko końcówka mocno opada (efekt ciężkiej tkaniny).
0.62 oznacza
że każda kolejna kość ma 62% energii poprzedniej. Niskie wartości
(0.4) — ruch tylko na końcówce. Wysokie (0.85+)
— cała flaga porusza się równomiernie (sztywna tkanina).
0.05
— bardzo leniwa, masywna tkanina (np. jedwabny banner). Wartość
0.5+ — prawie brak inercji, flaga reaguje natychmiast.
0.4) — tkanina
zatrzymuje się gwałtownie. Wysoka (0.92) — kość "przelatuje"
przez docelową pozycję i oscyluje (sprężysty efekt). Razem z Inertia
definiuje charakter materiału.
1.0 wyłącza
wygładzanie. 30+ — bardzo miękkie, "gumowe" przejścia.
1.0 tłumią
ruch, powyżej 1.3 dramatycznie go wzmacniają.
local fc = FlagController.new(
flagModel, -- Model Instance z Roblox
userId, -- number, UserId gracza
paramsOverride -- table (opcjonalne)
)
-- w RunService.Heartbeat lub podobnym:
RunService.Heartbeat:Connect(function(dt)
fc:Wave(dt)
end)
-- np. na silny wiatr podczas burzy:
fc:SetParams({
WindStrength = 5.5,
GustStrength = 3.0,
GustFrequency = 0.1,
Inertia = 0.08,
})
-- powrót do normy:
fc:SetParams({
WindStrength = 3.2,
GustStrength = 1.6,
GustFrequency = 0.05,
Inertia = 0.18,
})
SetParams ignoruje nieznane klucze. Jeśli wpiszesz
Windstrength (mała litera) zamiast WindStrength,
nic się nie zmieni i nie dostaniesz błędu.
Tryb oszczędny — uproszczona symulacja dla flag w tle, odległych lub gdy liczba flag na scenie jest duża. Brak noise, inercji i gustów. Tylko sinusoidalna fala + sag.
fc.Cheap = true -- włącz
fc.Cheap = false -- wyłącz (domyślnie)
Możesz przełączać dynamicznie — np. gdy gracz jest dalej niż 50 studs:
RunService.Heartbeat:Connect(function(dt)
local dist = (flagPos - playerPos).Magnitude
fc.Cheap = dist > 50
fc:Wave(dt)
end)
FlagController to symulator szkieletowy oparty na kościach Roblox
(Bone). Każda klatka wykonuje cztery przejścia:
| Pass | Co robi |
|---|---|
Pass 1 |
Oblicza target offsets dla każdej kości — suma wiatru, turbulencji, gustów, fluttera i sagu. |
Pass 2 |
Wygładzanie przestrzenne wzdłuż łańcucha (SmoothFactor). Usuwa kanciaste przejścia. |
Pass 3 |
Inercja — każda kość "dogania" target z prędkością (velocity spring). Nadaje masę tkaninie. |
Pass 4 |
Aplikuje finalne kąty do bone.Transform. |
Kontroler rozpoznaje kości według schematu nazwy:
Bone.{kolumna}.{głębokość}
-- przykłady:
Bone.0.0 -- kolumna 0, głębokość 0 (korzeń)
Bone.0.1 -- kolumna 0, głębokość 1
Bone.1.0 -- kolumna 1, głębokość 0 (korzeń)
Bone.1.3 -- kolumna 1, głębokość 3 (końcówka)
Kolumna to pasek pionowy flagi (od góry do dołu).
Głębokość to pozycja wzdłuż flagi od drzewca do wolnej krawędzi.
Kość o głębokości 0 to zawsze korzeń — ma inny ruch (root hinge).
4×4 do 6×8 to dobry kompromis dla flag graczy.
5×4 potrzebujesz 4 podziałów poziomych i 3 pionowych.
Bone.{kolumna}.{głębokość}. Roblox i FlagController
identyfikują kości wyłącznie po nazwie.
0, nie od 1.
Pierwsza kość to Bone.0.0.
MeshPart
z Bone instancjami w środku.
Model
└─ Plane (MeshPart)
├─ Front (SpecialMesh / Decal)
├─ Back (SpecialMesh / Decal)
├─ Bone.0.0
│ └─ Bone.0.1
│ └─ Bone.0.2 …
└─ Bone.1.0 …
Bone.X.Y.
Jeśli Blender dodał prefiks (np. Armature_Bone.0.0)
— zmień ręcznie lub użyj skryptu BatchRename.
LocalScript lub Script)
i wywołaj konstruktor:
local FlagController = require(
game.ReplicatedStorage.Flags.Flag.FlagController
)
local RunService = game:GetService("RunService")
local fc = FlagController.new(
script.Parent,
12345678, -- userId
{ WindStrength = 3.2 }
)
RunService.Heartbeat:Connect(function(dt)
fc:Wave(dt)
end)
Players:GetUserThumbnailAsync. Wymaga że
Plane.Front i Plane.Back to obiekty
z właściwością .Texture (np. Decal
lub SpecialMesh).
Cheap = true dla flag poza kamerą
lub odległych od gracza.