Ten projekt będzie używał warunkowych stwierdzeń, aby stworzyć część, która będzie nadawać lub odejmować punkty na liście wyników w zależności od koloru części, gdy dotyka się. Jeśli jest niebieski, to będzie nadawać graczom kilka punktów. Jeśli jest zielony, to będzie nadawać wiele punktów. W końcu, jeśli jest czerwony, to będzie odejmować punkty.
Ustawienie projektu
Punkt można dodać do dowolnego projektu, w którym punkty są odpowiednie. Na instancja, grę przygodową, w której gracze zbierają punkty.
Śledzenie punktów
Aby skonfigurować ten projekt, będziesz potrzebować tabeli liderów, aby śledzić punkty i część, która zmienia kolor. Kod dla tabeli liderów zostanie podany.
Utwórz nowy skrypt w ServerScriptService nazyającym się Leaderboard. Kopiuj i wklej kod poniżej do skryptu.
--W ServerScriptService utwórz skrypt o nazwie PlayerSetup z zawartością poniżej.local Players = game:GetService("Players")local function onPlayerJoin(player)local leaderstats = Instance.new("Folder")leaderstats.Name = "leaderstats"leaderstats.Parent = player-- Przykład IntValuelocal points = Instance.new("IntValue")points.Name = "Points"points.Value = 0points.Parent = leaderstatsend-- Biegnij naPlayerJoin, gdy wydarzenie PlayerAdded zostanie uruchomionePlayers.PlayerAdded:Connect(onPlayerJoin)
Zmieniający się kolor części
Skrypt będzie przetwarzać trzy różne kolory dla części. Każdy kolor będzie miał zmienne, aby przechować wartość RGB, typ danych, który zawiera zestaw trzech liczb (czerwony, zielony, niebieski), które tworzą kolory.
Utwórz część o nazwie PointPart z załączonym skryptem nazyającym się PointScript.
W PointScript użyj script.Parent, aby odnieść się do części.
local pointPart = script.ParentUtwórz zmienne, aby przechować różne kolory. Każda zmiana powinna być ustawiona na Color3.fromRGB(), co tworzy wartość koloru.
- Niebieski (Niektóre Punkty): (0, 0, 255)
- Zielony (Wiele punktów): (0, 255, 0)
- Czerwony (Zdobądź Punkty): (255, 0, 0)
local pointPart = script.Parent-- Kolorylocal blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255, 0, 0)Dodaj zmienne dla małej ilości punktów, większej ilości punktów i trzeciego do usuwania punktów.
-- Kolorylocal blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255, 0, 0)-- Wartości punktówlocal smallPoints = 10local largePoints = 50local losePoints = 100
Dodanie usługi graczy
Aby przyznać punkty, będziesz musiał uzyskać dostęp do informacji gracza, które są przechowywane w Explorerze pod graczami, a są oddzielone od obiektu postaci. To jest miejsce, w którym można znaleźć takie informacje jak statystyki liderboardu.
Możesz to zrobić, dodając graczy usługę do swojego skryptu. usługi są dodatkowymi zestawami uprzednio zbudowanych funkcji Roblox, aby zyskać czas.
Uzyskaj usługę Gracze poprzez wpisanie:
local Players = game:GetService("Players")
-- Wartości punktówlocal smallPoints = 10local largePoints = 50local losePoints = 100-- Potrzebne usługilocal Players = game:GetService("Players")
Funkcje i wydarzenia
PointsScript będzie potrzebował dwóch funkcji. Pierwsza funkcja będzie podawać i odejmować części. Druga funkcja sprawdzi, czy gracz dotknął części. Te funkcje zostaną następnie połączone z wydarzeniem dotyku, które zostanie uruchomione za każdym razem, gdy dotyka się części.
Utwórz nową funkcję nazwaną givePoints() i parametr nazyający się player. Wewnątrz, dodaj stwierdzenie drukowania do użycia do testowania.
local Players = game:GetService("Players")-- Dodaje lub odejmuje punktylocal function givePoints(player)print("Giving player points")endPod tym stwórz drugą funkcję nazwaną partTouched() z parametrem nazwanym otherPart.
-- Dodaje lub odejmuje punktylocal function givePoints(player)print("Giving player points")end-- Sprawdza, czy gracz dotknął częścilocal function partTouched(otherPart)endWewnątrz funkcji użyj funkcji GetPlayerFromCharacter() , aby sprawdzić, czy istnieje gracz w zmiennej innej części.
-- Sprawdza, czy gracz dotknął częścilocal function partTouched(otherPart)local player = Players:GetPlayerFromCharacter(otherPart.Parent)endJeśli gracz dotknął części, zostanie ona zapisana w zmiennej gracza. Jeśli nie, zmienne pozostanie puste. posiadać:
- Wewnątrz funkcji sprawdź, czy gracz ma wartość. Jeśli tak, to zadzwoń givePoints(player).
- Poniżej funkcji połącz partTouched() z wydarzeniem dotykanym pointPart .
-- Sprawdza, czy gracz dotknął częścilocal function partTouched(otherPart)-- Dostaje gracz, jeśli dotknie częścilocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)Zacznij projektu. Kiedy gracz dotyka części, powinieneś zobaczyć wiadomość w oknie wyjścia mówiącą: „Giving player points” Wskazówki dotyczące rozwiązywania problemów:
- Sprawdź, że "Players" w game:GetService("Players") jest zaznaczony i w cudzłapach.
- partTouched() powinien być połączony z wydarzeniem punktu Touched .
Utwórz Kolory Loopingu
Aby przetwarzać kolory, skrypt użyje czasu = pętla, który zmienia kolor części co kilka sekund. Warunek dla tej pętli będzie prawdziwy, więc można go uruchomić w nieskończoność.
Na końcu skryptu utwórz nowy while loop, gdzie kondycja jest prawdziwa, co oznacza, że loop zawsze biegnie.
-- Sprawdza, czy gracz dotknął częścilocal function partTouched(otherPart)-- Dostaje gracz, jeśli dotknie częścilocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)-- Pętli poprzez kolorywhile true doendposiadać, koduj przez jakiś czas prawdziwy do pętli, która zmienia punktPart na kolorowe zmienne, które stworzyłeś. Nie zapomnij użyć task.wait() pomiędzy kolorami. Po zakończeniu sprawdź swój kod w wersji poniżej.
-- Pętla przez 3 kolory, czekając między każdym koloremwhile true dopointPart.Color = bluetask.wait(3)pointPart.Color = greentask.wait(2)pointPart.Color = redtask.wait(1)endZagraj-test i sprawdź, że wszystkie trzy kolory pętli bez przerwy.
Wskazówki dotyczące rozwiązywania problemów
W tym momencie, jeśli pętla kolorowa nie działa tak, jak powinna, spróbuj jednej z poniższych opcji.
- Sprawdź, czy pętla jest na dole dołu skryptu, poniżej wydarzenia dotkniętego. Jeśli pętla nie jest na dole, to będzie uniemożliwiać inne części skryptu prawidłowo działają.
- Sprawdź, że każdy kolor w Color3.fromRGB() jest poprawnie napisany. Powinno być trzech liczb pomiędzy 0 i 255 oddzielonych przez przecinki, jak (255, 50, 0) .
Dawanie graczom punktów
Graczom będą przyznawane punkty w zależności od koloru części, gdy dotkną jej.
Znalezienie aktualnego koloru
Zawsze, gdy gracz dotyka części, skrypt będzie musiał znać aktualny kolor części, aby później przyznać punkty.
Znajdź givePoints() . Zastąp swoją wiadomość testową zmiennem dla obecnego koloru pointPart. Ta zmiana będzie określać, ile punktów gracz otrzymuje (lub traci).
local function givePoints(player)local currentColor = pointPart.ColorendAby wpływać na punkty gracza, ta funkcja wymaga dostępu do rankinggracza. Utwórz zmienne, aby go zapisać.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")endTeraz dodaj zmienne, aby uzyskać wartość punktów gracza, która jest dzieckiem ich tablicy ranking.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")end
Dawanie lub odejmowanie punktów
Następnie użyjesz if i elif, aby dać lub odebrać punkty w zależności od koloru części, gdy dotyknięta. Pamiętaj, że niebieski dostarcza niewielką ilość, zielony dostarcza wiele, a czerwony odejmuje punkty.
Wewnątrz givePoints() , poniżej zmiennej, użyj oświadczenia if, aby sprawdzić, czy obecny kolor jest niebieski i jeśli tak, to dodaj smallPoints do wartości punktów gracza.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")if currentColor == blue thenplayerPoints.Value += smallPointsendendAby sprawdzić zielony, dodaj inny if condition. Jeśli zielony, to dodaj zmienne largePoints do punktów gracza.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointsendUżyj innego oświadczenia, aby odebrać punkty, jeśli część była niebieska lub zielona.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendWreszcie, zniszcz część po jej if, aby skrypt nie mógł dalej rozdawać punktów.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendpointPart:Destroy()Sprawdź, czy każdy kolor daje punkti, jak oczekiwano. Upewnij się, że wszystkie trzy warunki testu są testowane.
Dawanie graczom zwrotów
PointPart działa, ale gracze mogą nie zauważyć, że coś się stało, chyba że zostali przyciągnięci do swojego wyniku lub statystyki. Napraw to, tworząc cząsteczki, gdy PointPart zostanie zniszczony.
Dodawanie opinii, gdy gracze używają części, takich jak dźwięk, wibracje lub cząsteczki, sprawia, że interakcje z obiektami są bardziej satysfakcjonujące dla graczy.
Tworzenie efektu cząsteczki
Efekt cząsteczek będzie taki sam jak kolor części, gdy dotyknięto. Ponieważ kolory były zapisywane w zmienne, łatwo je ponownie użyć.
W givePoints() w dolnej części stwórz nową instancję Emitera Particulek . Upewnij się, że nazwa instancji jest poprawnie wymieniana.
local particle = Instance.new("ParticleEmitter")endGeneratory cząsteczek używają sekwencji kolorów, aby kontrolować ich właściwość koloru. Utwórz nową sekwencję kolorów i przekaż bieżący kolor części.
-- Zniszcz częśćpointPart:Destroy()-- Tworzenie cząsteczeklocal particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)Cząsteczka będzie musiała być związana z graczem, który ją dotknął. Stwórz zmienne, aby uzyskać model postaci gracza. Następnie zwiąż zmienne z głową gracza.
local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)local playerCharacter = player.Characterparticle.Parent = playerCharacter:WaitForChild("Head")Użyj task.wait() na szybki sekund, a następnie zniszcz cząsteczki.
local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)local playerCharacter = player.Characterparticle.Parent = playerCharacter:WaitForChild("Head")task.wait(1)particle:Destroy()Sprawdź grę i upewnij się, że cząsteczki krótko podążają za graczem po dotknięciu każdego koloru.
Wskazówki dotyczące rozwiązywania problemów
W tym momencie, jeśli cząsteczki nie działają tak, jak powinny, spróbuj jednej z poniższych opcji.
- Zrób to podczas tworzenia nowej instancji, że ParticleEmitter jest zapisany Dokładnie jak pokazano i wewnątrz cytatów.
- Podczas rodzicielstwa cząsteczek upewnij się, że używasz :``playerCharacter i WaitForChild() bez przecinków.
Ukończ PointScript
Ukończona wersja skryptu może być odniesiona poniżej.
local pointPart = script.Parent
--lokalne przechowywanie = gra:GetService("ServerStorage")
-- Daje kilka punktów
local blue = Color3.fromRGB(0, 0, 255)
-- Daje więcej punktów
local green = Color3.fromRGB(0, 255, 0)
-- Zdenerwuje graczy
local red = Color3.fromRGB(255, 0, 0)
-- złoto dla graczy
local smallPoints = 10
local largePoints = 50
local losePoints = 100
local Players = game:GetService("Players")
local function givePoints(player)
local currentColor = pointPart.Color
local playerStats = player:WaitForChild("leaderstats")
local playerPoints = playerStats:WaitForChild("Points")
-- Daje graczom złoto w zależności od koloru części
if currentColor == blue then
playerPoints.Value += smallPoints
elseif currentColor == green then
playerPoints.Value += largePoints
else
playerPoints.Value -= losePoints
end
-- Zniszcz część, poczekaj sekundę i zniszcz cząstkę
pointPart:Destroy()
-- Tworzy efekt błysku i go niszczy
local playerCharacter = player.Character
local particle = Instance.new("ParticleEmitter")
particle.Color = ColorSequence.new(currentColor)
particle.Parent = playerCharacter:WaitForChild("Head")
task.wait(1)
particle:Destroy()
end
local function partTouched(otherPart)
local player = Players:GetPlayerFromCharacter(otherPart.Parent)
if player then
givePoints(player)
end
end
pointPart.Touched:Connect(partTouched)
-- Zmienia kolor części w zależności od zmiennej. Musi być na dole skryptu.
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end