Humanoid

Pokaż przestarzałe

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Humanoid to specjalny obiekt, który daje modelowi funkcjonalność postaci. Daje modelowi możliwość fizycz

R6

  • Podstawowy charakterystyczny zestaw, który używa 6 części dla kończyn.
  • Część Head musi być przyczepiona do części nazyającej się Torso, lub człowiek natychmiastowo umrze.
  • Wygląd BodyPart zastosowany jest za pomocą obiektów CharacterMesh.
  • Niektóre właściwości, takie jak Humanoid.LeftLeg i Humanoid.RightLeg, działają tylko z R6.

R15

  • Bardziej złożony niż R6, ale również o wiele bardziej elastyczny i wytrzymały.
  • Używa 15 części dla kończyn.
  • Część Head musi być przyczepiona do części nazyającej się UpperTorso lub Humanoid zginie natychmiastowo.
  • Wyglądy BodyPart muszą być bezpośrednio zeskanowane.
  • Można go dynamycznie skalować, używając specjalnych obiektów NumberValue z rodzicielami w kształcie ludzkiego półka.
  • Humanoid automatycznie stworzy Vector3Value obiekty nazwane OriginalSize w każdym limbicie.
  • Jeśli wartość liczby jest włączona w liczbie wielokątów i ma nazwę jednej z obserwujeopcji, zostanie używana do kontroli funkcji skalowania:
    • Skala głębokości ciała
    • Skala ciała
    • Skala ciała
    • Skala głowy

Przykłady kodu

Walking Camera Bobble Effect

local RunService = game:GetService("RunService")
local playerModel = script.Parent
local humanoid = playerModel:WaitForChild("Humanoid")
local function updateBobbleEffect()
local now = tick()
if humanoid.MoveDirection.Magnitude > 0 then -- Is the character walking?
local velocity = humanoid.RootPart.Velocity
local bobble_X = math.cos(now * 9) / 5
local bobble_Y = math.abs(math.sin(now * 12)) / 5
local bobble = Vector3.new(bobble_X, bobble_Y, 0) * math.min(1, velocity.Magnitude / humanoid.WalkSpeed)
humanoid.CameraOffset = humanoid.CameraOffset:lerp(bobble, 0.25)
else
-- Scale down the CameraOffset so that it shifts back to its regular position.
humanoid.CameraOffset = humanoid.CameraOffset * 0.75
end
end
RunService.RenderStepped:Connect(updateBobbleEffect)

Podsumowanie

Właściwości

Metody

Zdarzenia

Właściwości

AutoJumpEnabled

Odczyt równoległy

Automatyczny skok włączony sprawia, czy Humanoid będzie próbował automatycznie skakać nad przeszkodą, którą przechodzi.

Obecnie właściwość ta działa tylko wtedy, gdy spełnione zostaną następujące warunki:

  • Model postaci Player.Character znajduje się w Player .
  • Gracz w sprawie używa sterowania elementy sterujące.

Gdy postać gracza się pojawia, wartość właściwości pasuje do właściwości gracza Class.Player.AutoJumpEnabled - która z kolei pasuje do właściwości Class.StarterPlayer.AutoJumpEnabled.

Przykłady kodu

Auto-Jump Toggle

local Players = game:GetService("Players")
local player = Players.LocalPlayer
local button = script.Parent
local function update()
-- Update button text
if player.AutoJumpEnabled then
button.Text = "Auto-Jump is ON"
else
button.Text = "Auto-Jump is OFF"
end
-- Reflect the property in the player's character, if they have one
if player.Character then
local human = player.Character:FindFirstChild("Humanoid")
if human then
human.AutoJumpEnabled = player.AutoJumpEnabled
end
end
end
local function onActivated()
-- Toggle auto-jump
player.AutoJumpEnabled = not player.AutoJumpEnabled
-- Update everything else
update()
end
button.Activated:Connect(onActivated)
update()

AutoRotate

Odczyt równoległy

Właściwość AutoRotate opisuje, czy rzeczywiście Humanoid będzie automatycznie kręcić się w kierunku, w którym się porusza. Gdy ustawiony na prawdę, model postaci będzie stopniowo obrócony w kierunku ich kierunku ruchu, gdy Humanoid porusza się. Gdy ustawiony na fałszywy, model postaci będzie pozostawiony w swojej obecnej rotacji, chyba że zostanie nałożona siła obrot

Jeśli model postaci stanie się postacią gracza, to zachowanie rotacji Humanoid'a jest wpływane przez właściwość Ustawienia Rozgrywki's RotateType.

Gdy właściwość AutoRotate jest ustawiona na prawdę, właściwość RotateType ma następujące efekty na obrót kształtu ludzkiego:


<tbody>
<tr>
<td>Ustalenie położenia</td>
<td />
<td />
</tr>
<tr>
<td>Kamera</td>
<td>Zakrętka będzie się kręcić w kierunku kamery.</td>
<td>Gracz ma swoją kamerę skalowaną w trybie pierwszej osoby lub jest w trybie zmiany trybu pracy.</td>
</tr>
</tbody>
TypRotacjiZachowanieKontekst

Przykłady kodu

AutoRotate Button

local button = script.Parent
local enabled = true
local ON_COLOR = BrickColor.Green()
local OFF_COLOR = BrickColor.Red()
local function touchButton(humanoid)
if enabled then
enabled = false
button.BrickColor = OFF_COLOR
if humanoid.AutoRotate then
print(humanoid:GetFullName() .. " can no longer auto-rotate!")
humanoid.AutoRotate = false
else
print(humanoid:GetFullName() .. " can now auto-rotate!")
humanoid.AutoRotate = true
end
task.wait(1)
button.BrickColor = ON_COLOR
enabled = true
end
end
local function onTouched(hit)
local char = hit:FindFirstAncestorWhichIsA("Model")
if char then
local humanoid = char:FindFirstChildOfClass("Humanoid")
if humanoid then
touchButton(humanoid)
end
end
end
button.Touched:Connect(onTouched)
button.BrickColor = ON_COLOR

AutomaticScalingEnabled

Odczyt równoległy

Humanoid ma sześć wartości skalowania dziecka, w tym BodyDepthScale, BodyHeightScale, BodyProportionScale, 2>BodyTypeScale2>, 5>HeadScale5>. Zmienie wartości dowolnej z tych części i akcesoriów c

BreakJointsOnDeath

Odczyt równoległy

Określa, czy połączenia ludzkiego pękają, gdy w stanie Enum.HumanoidStateType.Dead. Domyślnie ustawione na prawdę.

CameraOffset

Odczyt równoległy

Właściwość CameraOffset określa odległość od pozycji przedmiotu kamery, gdy jej Camera.CameraSubject ustawiony jest na ten Humanoid.

Odległość jest stosowana w przestrzeni obiektu w odniesieniu do orientacji Humanoid'sVector3 . Na przykład, odległość Datatype.Vector3 wartości 0>(0, 10, 0)0> odległości przesuwa kamerę gracza o 10 stopni powyżej humanoidu.

Przykłady kodu

Walking Camera Bobble Effect

local RunService = game:GetService("RunService")
local playerModel = script.Parent
local humanoid = playerModel:WaitForChild("Humanoid")
local function updateBobbleEffect()
local now = tick()
if humanoid.MoveDirection.Magnitude > 0 then -- Is the character walking?
local velocity = humanoid.RootPart.Velocity
local bobble_X = math.cos(now * 9) / 5
local bobble_Y = math.abs(math.sin(now * 12)) / 5
local bobble = Vector3.new(bobble_X, bobble_Y, 0) * math.min(1, velocity.Magnitude / humanoid.WalkSpeed)
humanoid.CameraOffset = humanoid.CameraOffset:lerp(bobble, 0.25)
else
-- Scale down the CameraOffset so that it shifts back to its regular position.
humanoid.CameraOffset = humanoid.CameraOffset * 0.75
end
end
RunService.RenderStepped:Connect(updateBobbleEffect)
Odczyt równoległy

Właściwość DisplayDistanceType kontroluje zachowanie dystansu imienia i zdrowia Enum.HumanoidDisplayDistanceTypea. Ta właściwość jest ustawiona za pomocą Enum.HumanoidDisplayDistanceType zapisu z trzema dostępnymi wartościami, każda z nich ma własny zestaw zasad:

  • Gdy ustawiony na Viewer, humanoid widzi nazwę/zdrowie innych ludzi w zasięgu jego własnej NameDisplayDistance i HealthDisplayDistance .
  • Gdy ustawiony na Subject, humanoid wziął pełną kontrolę nad swoim własnym imieniem i zdrowotnym wyświetleniem poprzez swoje NameDisplayDistance i HealthDisplayDistance wartości.
  • Gdy ustawiony na None , nazwa i zdrowotna bara znika pod wszystkimi warunkami.

Zobacz Nazwa postaci/dyskretny wygląd zdrowia dla kompleksowej instrukcji kontroli wyglądu imion postaci i zdrowia balkonów.

Przykłady kodu

Displaying a Humanoid's Health and Name

local humanoid = script.Parent
humanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.Viewer
humanoid.HealthDisplayDistance = 0
humanoid.NameDisplayDistance = 100

DisplayName

Odczyt równoległy

DisplayName jest właściwością, która określa wygląd imienia ludzkiego, gdy jest widoczny. Domyślnie nowy ludowy będzie miał wartość pustej ciąg. Jeśli DisplayName jest zmienną pustą, wygląd imienia ludzkiego będzie domyślny dla właściwości imienia ludowego rodzica.

Ładowanie postaci gracza

Gdy gracze ładową swojego postaci, automatycznie lub poprzez użycie LoadCharacter(), wbudowany w silnikiem Humanoid, który jest stworzony przez silnik, będzie miał ustawioną właściwość DisplayName na właściwość DisplayName gracza.

StarterCharacter i StarterHumanoid

Gdy Humanoid o nazwie StarterHumanoid jest związany z StarterPlayer, lub

EvaluateStateMachine

Odczyt równoległy

FloorMaterial

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Jest to własność czytelna, która opisuje Enum.Material , który jest obecnie na Humanoid . Działa zarówno z normalnymi Parts i 2>Class.Terrain2> woxelami.

Poniższy kod pokazuje, jak słuchać, gdy ta właściwość zmienia się za pomocą Object:GetPropertyChangedSignal() . Gdy materiał, na którym stoi człowiek, się zmienia, to wydrukuje komunikat informujący o nowym materiale, na którym stoi.


local Humanoid = route.to.humanoid
Humanoid:GetPropertyChangedSignal("FloorMaterial"):Connect(function()
print("New value for FloorMaterial: " .. tostring(Humanoid.FloorMaterial))
end)

Ograniczenia

  • Gdy Humanoid nie stoi na podłodze, wartość tego właściwości ustawiona zostanie na Powietrze.
    • To się zdarza, ponieważ właściwości enum nie mogą mieć pustej wartości.
    • Może to powodować pewne zamieszanie, jeśli część ma ustawiony materiał na powietrze, choć w praktyce części nie powinny używać tego materiału w pierwszej miejsce.
  • Model postaci Humanoid musi być w stanie uderzyć z podłogą, lub nie zostanie wykryty.

Health

Bez replikacji
Odczyt równoległy

Ta właściwość reprezentuje obecne zdrowie Humanoid. Wartość jest ograniczona do zasięgu pomiędzy 0 i MaxHealth. Jeśli humanoid jest martwy, ta właściwość jest nieustannie ustawiona na 0.

Uwaga, że funkcja TakeDamage() może być używana do odejmowania od Health zamiast ustawienia właściwości bezpośrednio.

Regeneracja Zdrowia

Domyślnie, skrypty rehabilitacji zdrowia są automatycznie wstawione do humanoid. To powoduje, że niew死liwi postacie graczy regenerują 1% z MaxHealth każdej sekundy. Aby wyłączyć ten efekt, dodaj pusty Script o nazwie Zdrowie do 1>

Wyświetlanie zdrowia

Gdy Health jest mniejszy niż MaxHealth, pojawia się w przeciwdziałaniu zdrowotnym. Zachowanie wyświetlania zdrowotnej barby jest zależne od HealthDisplayDistance i 1> Class.Humanoid.

Zobacz Nazwa postaci/dyskretny wygląd zdrowia dla kompleksowej instrukcji kontroli wyglądu imion postaci i zdrowia balkonów.

Śmierć

Gdy wartość zdrowia znakomicie Humanoid osiągnie 0, przejście Enum.HumanoidStateType.Dead do stanu Health nastąpi automatycznie. W tym stanie 2>Class.Humanoid.Health|Health2> jest zablokowany do

HealthDisplayDistance

Odczyt równoległy

Ten parametr jest używany wraz z właściwością DisplayDistanceType, aby kontrolować odległość, z której można zobaczyć zdrowotną barę kształtu ludzkiego.

Zobacz Nazwa postaci/dyskretny wygląd zdrowia dla kompleksowej instrukcji kontroli wyglądu imion postaci i zdrowia balkonów.

Odczyt równoległy

Właściwość kontroluje, czy właściwość zdrowia może być wyświetlona. Domyślnie wartość ta jest ustawiona na Class.Humanoid.Health

Uwaga: Ta właściwość działa niezależnie od właściwości HealthDisplayDistance , która jest odpowiedzialna za sprawienie, że zdrowotna barwa zaniknie w pewnych odległościach. Jeśli Humanoid.HealthDisplayType|HealthDisplayType

Zobacz Nazwa postaci/dyskretny wygląd zdrowia dla kompleksowej instrukcji kontroli wyglądu imion postaci i zdrowia balkonów.

HipHeight

Odczyt równoległy

Określa odległość (w studs) od ziemi, RootPart powinno być, gdy humanoid stoi. RigType wpływa na sposób zachowania tej właściwości.

Dla rakiet R15 zapisane jest ustawione odpowiednie podstawowe wysokość, aby zagwarantować wysokość RootPart . Wysokość nóg nie jest używana. Wysokość całego człowieka można opisać za pomocą następującej formuły:


Height = (0.5 * RootPart.Size.Y) + HipHeight

Dla rygów R6, HipHeight zamiast opisywać relatywne odchylenie. Wysokość całego ludoidu można opisać za pomocą następującej formuły:


Height = LeftLeg.Size.Y + (0.5 * RootPart.Size.Y) + HipHeight

Jump

Bez replikacji
Odczyt równoległy

Jeśli true , Humanoid lub Humanoid.JumpPower jest równy wartości 2>Class.Humanoid.UseJumpPower2> lub wysokości 5>Class.Humanoid.JumpHeight5>, zależnie od wartości 8>Class.Humanoid.UseJumpPower8> .

JumpHeight

Odczyt równoległy

Dostarcza kontrolę nad wysokością skoków Humanoid, w studs. Wartość początkowa tego właściwości jest ustalana przez wartość StarterPlayer.CharacterJumpHeight, która domyślnie wynosi 7,2.

Chociaż ustawienie tego właściwości na 0 skutecznie zapobiec ludowaniu, zaleca się wyłączyć ludowanie poprzez wyłączenie stanu Enum.HumanoidStateType.Jumping .

Właściwość ta jest widoczna tylko w oknie Proprietści, jeśli Humanoid.UseJumpPower ustawiony jest na false, ponieważ nie miałoby to sensu w przeciwnym razie (zamiast tego używa się 2>Class.Humanoid.JumpPower2> .

JumpPower

Odczyt równoległy

Określa, ile siły góry jest zastosowana do Humanoid podczas skoku. Wartość początkowa tego właściwości jest ustalana przez wartość StarterPlayer.CharacterJumpPower , która jest domyślnie ustawiona na 50 i jest ograniczona między 0 a 1000. Uw

Chociaż ustawienie tego właściwości na 0 skutecznie zapobiec ludowaniu, zaleca się wyłączyć ludowanie poprzez wyłączenie stanu Enum.HumanoidStateType.Jumping .

Właściwość ta jest widoczna tylko w oknie Proprietści, jeśli Humanoid.UseJumpPower ustawiony jest na Prawdziwy, ponieważ w przeciwnym razie nie byłaby odpowiednia (zamiast tego używana jest 2>Class.Humanoid.JumpHeight2>).

MaxHealth

Odczyt równoległy

Maksymalna wartość Health ludoidu.

Wartość tego właściwości jest używana obok właściwości Health , aby skalować domyślną barwę zdrowia. Gdy Health osiągnie, jego bar zdrowia może nie być wyświetlany, w zależności od jego właściwości

MaxSlopeAngle

Odczyt równoległy

Ten parametr określa maksymalny kąt nachylenia, który może zacząć wspinaczkasię po niedźwiedzia. Jeśli kąt nachylenia jest większy niż MaxSlopeAngle, po niedźwiedzia zaczną się po niedźwiedzia.

Gdy postać się pojawia, ta właściwość jest ustawiana zgodnie z wartością StarterPlayer.CharacterMaxSlopeAngle.

Wartość tego właściwości jest ograniczona do wartości pomiędzy 0 ° i 89 °. Domyślnie jest to 89 °, więc humanoidy mogą w górę prawie każdego kosza, którym domyślnie chcą.

Przykłady kodu

Limiting The Slope a Humanoid Can Walk Up

local player = game.Players.LocalPlayer
local char = player.CharacterAdded:wait()
local h = char:FindFirstChild("Humanoid")
h.MaxSlopeAngle = 30

MoveDirection

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Przenieś kierunek jest czytelną własnością, która opisuje kierunek, w którym Humanoid idzie, jako wartość wektora lub zero długości wektora. Kierunek jest opisany w przestrzeni świata.

Ponieważ ta właściwość jest tylko czytelna, nie może być ustawiona przez Script lub LocalScript.

Przykłady kodu

Walking Camera Bobble Effect

local RunService = game:GetService("RunService")
local playerModel = script.Parent
local humanoid = playerModel:WaitForChild("Humanoid")
local function updateBobbleEffect()
local now = tick()
if humanoid.MoveDirection.Magnitude > 0 then -- Is the character walking?
local velocity = humanoid.RootPart.Velocity
local bobble_X = math.cos(now * 9) / 5
local bobble_Y = math.abs(math.sin(now * 12)) / 5
local bobble = Vector3.new(bobble_X, bobble_Y, 0) * math.min(1, velocity.Magnitude / humanoid.WalkSpeed)
humanoid.CameraOffset = humanoid.CameraOffset:lerp(bobble, 0.25)
else
-- Scale down the CameraOffset so that it shifts back to its regular position.
humanoid.CameraOffset = humanoid.CameraOffset * 0.75
end
end
RunService.RenderStepped:Connect(updateBobbleEffect)

NameDisplayDistance

Odczyt równoległy

Właściwość NameDisplayDistance jest liczbą używaną wraz z właściwością Humanoid.DisplayDistanceType, aby kontrolować dystans, z którego można zobaczyć imię ludzkiego.

Zobacz Nazwa postaci/dyskretny wygląd zdrowia dla kompleksowej instrukcji kontroli wyglądu imion postaci i zdrowia balkonów.

NameOcclusion

Odczyt równoległy

Kontroluje, czy można zobaczyć imię i zdrowotną barwę kształtu ludzkiego za ścianami lub innymi obiektami. Ta właściwość jest wartością Enum.NameOcclusion i można ją skonfigurować, aby całkowicie zablokować wszystkie imiona, imiona wrogów lub wyłączyć ocłączenie.

W przypadkach, gdy LocalPlayer nie ma związanego z nim Humanoid, ta właściwość zastosowuje się zamiast tego do przedmiotu Humanoid.

Zobacz Nazwa postaci/dyskretny wygląd zdrowia dla kompleksowej instrukcji kontroli wyglądu imion postaci i zdrowia balkonów.

Przykłady kodu

Occlude Player Names

local Players = game:GetService("Players")
local function onCharacterAdded(character)
local humanoid = character:WaitForChild("Humanoid")
humanoid.NamOcclusion = Enum.NameOcclusion.OccludeAll
end
local function onPlayerAdded(player)
player.CharacterAdded:Connect(onCharacterAdded)
end
Players.PlayerAdded:Connect(onPlayerAdded)

PlatformStand

Odczyt równoległy

Określa, czy Humanoid jest obecnie w stanie Enum.HumanoidStateType.PlatformStanding. Gdy prawda, Humanoid jest w stanie, w którym jest bez wolnego upadku i nie może się poruszać. Ten stan zachowuje się podobnie do siedzenia, z wyjątkiem tego, że skaczanie nie uwalnia humanoid z stanu.

RequiresNeck

Odczyt równoległy

Pozwala rozwójcom wyłączyć zachowanie, w którym gracz Character|character umiera, jeśli Neck Motor6D jest usunięty lub odłączony nawet przez chwilę. Ta właściwość domyślnie ustawiona jest na prawdę.

Odczyt równoległy

RigType opisuje, czy Humanoid korzysta z wcześniejszego wersjera R6, czy wersji R15.

R6 rygiel używa 6 widocznych Parts podczas gdy R15 rygiel używa 15 widocznych Parts . R15 rygiele mają więcej łączeń niż rygiele R6, czyniąc je o wiele bardziej elastycznymi, gdy są animowane.

Uwaga, jeśli ta właściwość jest ustawiona nieprawidłowo, to Humanoid nie będzie działać poprawnie. Na przykład, jeśli R15 ludzkiego kształtu ustawiony jest na R6, Class.

RootPart

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Odnośnik do obiektu HumanoidRootPart ludoidu, części sterującej korzeniem, która kontroluje ruch ludoidu poprzez świat 3D. Ta część jest zwykle niewidoczna.

Uwaga, że w przypadku postaci graczy RootPart jest taki sam jak Model.PrimaryPart modelu.

SeatPart

Tylko do odczytu
Bez replikacji
Odczyt równoległy

SeatPart to odniesienie do siedzenia, które ma aktualnie Humanoid, jeśli jest jakiekolwiek. Wartość tej właściwości może być Seat lub VehicleSeat. Będzie to 1>nil1>, jeśli Humanoid nie siedzi na żadnym siedzeniu.

Notatka:

  • Dla prawdziwego bułki opisującej czy Humanoid jest obecnie siedzący czy nie, zobacz Humanoid.Sit

Sit

Odczyt równoległy

Właściwość sit może być ustawiona na true, aby sprawdzić, czy Humanoid jest obecnie siedzący. Humanoids może być zmuszony do stanu siedzenia poprzez ustawienie wartości tej właściwości na

Notatka:

  • Class.Humanoid.SeatPart1> właściwość można uzyskać używając właściwości VehicleSeat lub Humanoid
  • Możliwe jest wykrycie, gdy Humanoid siedzi poprzez połączenie się z wydarzeniem Humanoid.Seated.

TargetPoint

Odczyt równoległy

Nie używaj Ta właściwość działa tylko z włączonym trybem eksperymentalnym, który został całkowicie zgłoszony.

Ta właściwość opisuje pozycję 3D w przestrzeni, w której Player sterujący tym Humanoid ostatnio kliknął przy użyciu Tool z wyposażonym w niego.

Ten parametr jest głównie używany przez klasyczne narzędzia, aby określić, co kieruje się w kierunku człowieka, gdy aktywują narzędzie. Jeśli dasz NPC klasyczny rockietLauncher, ustaw jego TargetPoint i następnie wezwij funkcję Tool:Activate() narzędzia, aby spalić rockietę na punkt docelowy.

UseJumpPower

Odczyt równoległy

Gdy postać się pojawia, ta właściwość jest ustawiana zgodnie z wartością StarterPlayer.CharacterUseJumpPower, która domyślnie wynosi prawdę.

Podczas skoku, z tym ustawieniem na prawdę, wartość Humanoid.JumpHeight jest używana do zapewnienia, że skoki humanoidy do tej wysokości. Z tym ustawieniem na fałszywy, wartość Humanoid.JumpPower jest używana do zastosowania siły w górę.

WalkSpeed

Odczyt równoległy

Ta właściwość opisuje, jak szybko Humanoid jest w stanie chód, w studs pro sek. Domyślnie ma wartość StarterPlayer.CharacterWalkSpeed (16), co oznacza, że każdy postać gracza może poruszać się 16 studs w każdym kierunku każdej sekundy.

Notatki

  • Kiedy kontrolowany na urządzeniu mobilnym lub gamepadzie, kształt może chodzić wolniej niż jego WalkSpeed jeśli kształtujący joystick jest poruszony tylko stopniowo od centrum.
  • Możesz zamrozić humanoidę, ustawiając WalkSpeed na 0; to zapobiega kontrolerowi przesuwania go poprzez domyślne mechanizmy ruchu.
  • Domyślny skrypt animacji skaluje animacje ruchu latającego człowieka w zależności od tego, jak szybko się porusza w stosunku do domyślnej prędkości 16 stud/sek.
  • Prędkość, w której Humanoid obecnie chodzi, można uzyskać używając wydarzenia Running.

WalkToPart

Odczyt równoległy

WalkToPart to odniesienie do części, do której próbuje dotrzeć człowiek. Ta właściwość jest ustawiana zwykle, gdy część jest przekazana jako drugi argument funkcji Humanoid:MoveTo() człowiek.

Gdy WalkToPart jest ustawiony, a humanoid aktywnie próbuje dotrzeć do części, będzie nadal aktualizować swój cel Vector3, aby być pozycją części, plus the Humanoid.WalkToPoint przetłumaczony w przestrzeni obiektu w odniesieniu do rotacji części.

Można to opisać w Lua jako:


goal = humanoid.WalkToPart.CFrame:pointToObjectSpace(humanoid.WalkToPoint)

Ograniczenia

  • Ustawienie wartości WalkToPart nie jest wystarczające, aby wywołać humanoidowy start po części.
  • Pomocniczka jest proszona o uruchomienie próby dotarcia do celu, gdy wartość WalkToPoint zostanie zmieniona.
  • Może to być zmienione w przyszłości.
  • Stan dotarcia do celu ludoidu przestanie być poprawny po 8 sekund, jeśli nie osiągnie celu.
  • Zrobiłem to, aby NPC nie zaciągnęli się, czekając na Humanoid.MoveToFinished, aby wystrzelić.
  • Jeśli nie chcesz, aby się to zdarzyło, powinieneś wielokrotnie wzywać MoveTo, aby reset czasu trwania przesunięcia się nie zachodził.

WalkToPoint

Odczyt równoległy

WalkToPoint opisuje 3D pozycję w przestrzeni, do której dąży człowiek, po zostanie poproszony o to przez funkcję Humanoid:MoveTo() człowiek.

Jeśli Humanoid.WalkToPart ludoidu jest ustawiać, cel jest ustawiony poprzez przesunięcie WalkToPoint w stosunku do pozycji i obrotu części. Jeśli WalkToPart nie jest ustawiać, to ludoid będzie próbował bezpośrednio dotrzeć do pozycji 3D określonej przez WalkToPoint.

Ograniczenia

  • Wartość WalkToPoint musi zostać zmieniona na inną wartość, aby humanoid rozpoczął chodzenie w kierunku niego.
  • Jeśli chcesz stworzyć ludzką spacer do 0,0,0 , powinieneś użyć funkcji Ruchu ludzkiego.
  • Może to być zmienione w przyszłości.
  • Stan dotarcia do celu ludoidu przestanie być poprawny po 8 sekund, jeśli nie osiągnie celu.
  • Zrobiłem to, aby NPC nie zaciągnęli się, czekając na Humanoid.MoveToFinished, aby wystrzelić.
  • Jeśli nie chcesz, aby się to zdarzyło, powinieneś wielokrotnie wzywać MoveTo, aby reset czasu trwania przesunięcia się nie zachodził.

Przykłady kodu

Humanoid MoveTo Without Time out

local function moveTo(humanoid, targetPoint, andThen)
local targetReached = false
-- listen for the humanoid reaching its target
local connection
connection = humanoid.MoveToFinished:Connect(function(reached)
targetReached = true
connection:Disconnect()
connection = nil
if andThen then
andThen(reached)
end
end)
-- start walking
humanoid:MoveTo(targetPoint)
-- execute on a new thread so as to not yield function
task.spawn(function()
while not targetReached do
-- does the humanoid still exist?
if not (humanoid and humanoid.Parent) then
break
end
-- has the target changed?
if humanoid.WalkToPoint ~= targetPoint then
break
end
-- refresh the timeout
humanoid:MoveTo(targetPoint)
task.wait(6)
end
-- disconnect the connection if it is still connected
if connection then
connection:Disconnect()
connection = nil
end
end)
end
local function andThen(reached)
print((reached and "Destination reached!") or "Failed to reach destination!")
end
moveTo(script.Parent:WaitForChild("Humanoid"), Vector3.new(50, 0, 50), andThen)

Metody

AddAccessory

void

Ten metod przywiązuje określony Accessory do rodzica kształtu ludzkiego.

Kiedy ten metod jest wyzwany, zostaje przyczepiony do znaku Accessory do znaku

Jeśli wymagany Attachment nie może zostać znaleziony, to Accessory pozostanie związany z rodzicem kształtu człowieka, ale zostanie odłączony.

Zwykle wiązania akcesoria są tworzone na serwerze, ale można je utworzyć na klientach pod pewnymi warunkami. W tych sytuacjach wiązania stron klienta do AddAccessory() mogą nie zawsze produkować pożądanego zachowania i można użyć Class.Humanoid:BuildRig

Parametry

accessory: Instance

Class.Accessory do załączenia.


Zwroty

void

Przykłady kodu

[Humanoid] AddAccessory Example

local playerModel = script.Parent
local humanoid = playerModel:WaitForChild("Humanoid")
local clockworksShades = Instance.new("Accessory")
clockworksShades.Name = "ClockworksShades"
local handle = Instance.new("Part")
handle.Name = "Handle"
handle.Size = Vector3.new(1, 1.6, 1)
handle.Parent = clockworksShades
local faceFrontAttachment = Instance.new("Attachment")
faceFrontAttachment.Name = "FaceFrontAttachment"
faceFrontAttachment.Position = Vector3.new(0, -0.24, -0.45)
faceFrontAttachment.Parent = handle
local mesh = Instance.new("SpecialMesh")
mesh.Name = "Mesh"
mesh.Scale = Vector3.new(1, 1.3, 1)
mesh.MeshId = "rbxassetid://1577360"
mesh.TextureId = "rbxassetid://1577349"
mesh.Parent = handle
humanoid:AddAccessory(clockworksShades)

BuildRigFromAttachments

void

Ten metodzie ma Motor6D łączące drzewa dla Humanoid . Motor6D łączące drzewa są wymagane do odtwarzania 1> Class.Animation|Animations1> .

Począwszy od RootPart ludzkiego, ten metodę zbiera wszystkie Attachments związane z obecną częścią, które koń

Humanoid:BuildRigFromAttachments() skala również postać i ustawia kolory ciała.


Zwroty

void

Przykłady kodu

Lua Port of BuildRigFromAttachments

local function createJoint(jointName, att0, att1)
local part0, part1 = att0.Parent, att1.Parent
local newMotor = part1:FindFirstChild(jointName)
if not (newMotor and newMotor:IsA("Motor6D")) then
newMotor = Instance.new("Motor6D")
end
newMotor.Name = jointName
newMotor.Part0 = part0
newMotor.Part1 = part1
newMotor.C0 = att0.CFrame
newMotor.C1 = att1.CFrame
newMotor.Parent = part1
end
local function buildJointsFromAttachments(part, characterParts)
if not part then
return
end
-- first, loop thru all of the part's children to find attachments
for _, attachment in pairs(part:GetChildren()) do
if attachment:IsA("Attachment") then
-- only do joint build from "RigAttachments"
local attachmentName = attachment.Name
local findPos = attachmentName:find("RigAttachment")
if findPos then
-- also don't make double joints (there is the same named
-- rigattachment under two parts)
local jointName = attachmentName:sub(1, findPos - 1)
if not part:FindFirstChild(jointName) then
-- try to find other part with same rig attachment name
for _, characterPart in pairs(characterParts) do
if part ~= characterPart then
local matchingAttachment = characterPart:FindFirstChild(attachmentName)
if matchingAttachment and matchingAttachment:IsA("Attachment") then
createJoint(jointName, attachment, matchingAttachment)
buildJointsFromAttachments(characterPart, characterParts)
break
end
end
end
end
end
end
end
end
local function buildRigFromAttachments(humanoid)
local rootPart = humanoid.RootPart
assert(rootPart, "Humanoid has no HumanoidRootPart.")
local characterParts = {}
for _, descendant in ipairs(humanoid.Parent:GetDescendants()) do
if descendant:IsA("BasePart") then
table.insert(characterParts, descendant)
end
end
buildJointsFromAttachments(rootPart, characterParts)
end
local humanoid = script.Parent:WaitForChild("Humanoid")
buildRigFromAttachments(humanoid)
R15 Package Importer

local AssetService = game:GetService("AssetService")
local InsertService = game:GetService("InsertService")
local MarketplaceService = game:GetService("MarketplaceService")
local PACKAGE_ASSET_ID = 193700907 -- Circuit Breaker
local function addAttachment(part, name, position, orientation)
local attachment = Instance.new("Attachment")
attachment.Name = name
attachment.Parent = part
if position then
attachment.Position = position
end
if orientation then
attachment.Orientation = orientation
end
return attachment
end
local function createBaseCharacter()
local character = Instance.new("Model")
local humanoid = Instance.new("Humanoid")
humanoid.Parent = character
local rootPart = Instance.new("Part")
rootPart.Name = "HumanoidRootPart"
rootPart.Size = Vector3.new(2, 2, 1)
rootPart.Transparency = 1
rootPart.Parent = character
addAttachment(rootPart, "RootRigAttachment")
local head = Instance.new("Part")
head.Name = "Head"
head.Size = Vector3.new(2, 1, 1)
head.Parent = character
local headMesh = Instance.new("SpecialMesh")
headMesh.Scale = Vector3.new(1.25, 1.25, 1.25)
headMesh.MeshType = Enum.MeshType.Head
headMesh.Parent = head
local face = Instance.new("Decal")
face.Name = "face"
face.Texture = "rbxasset://textures/face.png"
face.Parent = head
addAttachment(head, "FaceCenterAttachment")
addAttachment(head, "FaceFrontAttachment", Vector3.new(0, 0, -0.6))
addAttachment(head, "HairAttachment", Vector3.new(0, 0.6, 0))
addAttachment(head, "HatAttachment", Vector3.new(0, 0.6, 0))
addAttachment(head, "NeckRigAttachment", Vector3.new(0, -0.5, 0))
return character, humanoid
end
local function createR15Package(packageAssetId)
local packageAssetInfo = MarketplaceService:GetProductInfo(packageAssetId)
local character, humanoid = createBaseCharacter()
character.Name = packageAssetInfo.Name
local assetIds = AssetService:GetAssetIdsForPackage(packageAssetId)
for _, assetId in pairs(assetIds) do
local limb = InsertService:LoadAsset(assetId)
local r15 = limb:FindFirstChild("R15")
if r15 then
for _, part in pairs(r15:GetChildren()) do
part.Parent = character
end
else
for _, child in pairs(limb:GetChildren()) do
child.Parent = character
end
end
end
humanoid:BuildRigFromAttachments()
return character
end
local r15Package = createR15Package(PACKAGE_ASSET_ID)
r15Package.Parent = workspace

ChangeState

void

Funkcja ta powoduje, że Humanoid wpisuje się do danej Enum.HumanoidStateType, opisując działalność, którą Humanoid wykonuje.

Proszę przeglądać stronę Enum.HumanoidStateType po więcej informacji na temat poszczególnych stanów, ponieważ niektóre mają nieintuicyjne nazwy. Na przykład, Enum.HumanoidStateType.Running opisuje stan, w którym legi humanoid'a są na ziemi, w tym gdy są nieaktywne.

Ze względu na domyślną zachowanie Humanoid niektóre stanów zostaną automatycznie zmienione po ustawieniu. Na przykład:

Zobacz również Humanoid:SetStateEnabled() aby włączyć lub wyłączyć określony stan, a Humanoid:GetState() aby uzyskać obecny stan humanoidu.

Parametry

Class.Humanoid Class.Humanoid jest w stanie wykonania.

Wartość domyślna: "None"

Zwroty

void

Przykłady kodu

Double Jump

local UserInputService = game:GetService("UserInputService")
local character = script.Parent
local humanoid = character:WaitForChild("Humanoid")
local doubleJumpEnabled = false
humanoid.StateChanged:Connect(function(_oldState, newState)
if newState == Enum.HumanoidStateType.Jumping then
if not doubleJumpEnabled then
task.wait(0.2)
if humanoid:GetState() == Enum.HumanoidStateType.Freefall then
doubleJumpEnabled = true
end
end
elseif newState == Enum.HumanoidStateType.Landed then
doubleJumpEnabled = false
end
end)
UserInputService.InputBegan:Connect(function(inputObject)
if inputObject.KeyCode == Enum.KeyCode.Space then
if doubleJumpEnabled then
if humanoid:GetState() ~= Enum.HumanoidStateType.Jumping then
humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
task.spawn(function()
doubleJumpEnabled = false
end)
end
end
end
end)

EquipTool

void

Ta funkcja sprawia, że Humanoid założy dany Tool.

Poniższy przykład spowodował, że Player założy narzędzie w Workspace z nazwą Narzędzie.


local Players = game:GetService("Players")
local player = Players:FindFirstChildOfClass("Player")
if player and player.Character then
local humanoid = player.Character:FindFirstChildWhichIsA("Humanoid")
if humanoid then
local tool = workspace:FindFirstChild("Tool")
if tool then
humanoid:EquipTool(tool)
end
end
end

Gdy ta funkcja zostanie wywołana, humanoid automatycznie zdjąłby każde Tools , które ma obecnie założone

Chociaż będą one wyposażone, Tools dla których Tool.RequiresHandle jest prawdziwy nie będą działać, jeśli nie mają uchwytu, niezależnie czy ta funkcja jest używana do ich wyposażenia czy nie

Zobacz również:

Parametry

tool: Instance

Narzędzie Tool do wyposażenia.


Zwroty

void

GetAccessories

Funkcja ta zwraca Accessory obiektów, które obecnie nosi rodzic humanoidu. Wszystkie takie Accessory obiekty zostaną uwzględnione, niezależnie od tego, czy są one załączone czy nie.

Jeśli Humanoid nie ma obiektów Accessory, pusty zapis zostanie zwrócony.

Zobacz również Humanoid:AddAccessory(), aby załączyć Accessory z rodzicem kształtu.


Zwroty

Materiały Accessory obiektów, które są związane z rodzicem kształtu ludzkiego.

Przykłady kodu

Remove Accessories After Loading

local Players = game:GetService("Players")
local function onPlayerAddedAsync(player)
local connection = player.CharacterAppearanceLoaded:Connect(function(character)
-- All accessories have loaded at this point
local humanoid = character:FindFirstChildOfClass("Humanoid")
local numAccessories = #humanoid:GetAccessories()
print(("Destroying %d accessories for %s"):format(numAccessories, player.Name))
humanoid:RemoveAccessories()
end)
-- Make sure we disconnect our connection to the player after they leave
-- to allow the player to get garbage collected
player.AncestryChanged:Wait()
connection:Disconnect()
end
for _, player in Players:GetPlayers() do
task.spawn(onPlayerAddedAsync, player)
end
Players.PlayerAdded:Connect(onPlayerAddedAsync)

GetAppliedDescription

Funkcja ta zwraca kopię zapisu HumanoidDescription zlokalizowanego w pamięci Humanoid:ApplyDescription(), który opisuje jego obecny wygląd. Można go używać do szybkiego określenia wyglądu znaczącego znaczenia dla znaku znaku Class.Humanoid:ApplyDescription i przypisania jego wyglądu innym znakom używając funkcji 2>Class.Humanoid:ApplyDescription2>.

Zobacz również


Zwroty

GetBodyPartR15

Funkcja ta zwraca to, co Enum.BodyPartR15 jest, lub Part jest, lub Enum.BodyPartR15.Unknown jeśli część nie jest częścią ciała R15. Ta funkcja umożliwia rozwój programistów, aby odzyskać części ciała gracza bez względu na to, jakie są nazwy części ciała rzeczywistych, zamiast zwracając

Można go używać wraz z Humanoid:ReplaceBodyPartR15(). Na przykład, jeśli część ciała gracza dotyka czegoś, funkcja ta zwraca instancję części. Rozwójcy mogą wtedy sprawdzić, która część ciała była, na przykład, jak głowa lub ramię. Następnie w zależności od tego, która część była, rozwójcy mogą wy

Funkcja ta może być przydatna w grach, w których ważne jest to, gdzie lokalizacja trafienia. Na przykład można ją użyć, aby określić, czy gracz został ranny w końcu i spowolnić go w zależności od rany.

Parametry

part: Instance

Określona część jest sprawdzana, aby ujrzeć, czy jest to część ciała R15.


Zwroty

Typ części R15 określonej części lub nieznany, jeśli część nie jest częścią ciała.

GetLimb

Funkcja ta zwraca Enum.Limb funkcję, która jest związana z Part . Działa dla obu r15 i r6 rygów, na przykład:


-- Dla R15
print(humanoid:GetLimb(character.LeftUpperLeg)) -- Lista.Limb.LeftLeg
print(humanoid:GetLimb(character.LeftLowerLeg)) -- Lista.Limb.LeftLeg
print(humanoid:GetLimb(character.LeftFoot)) -- Lista.Limb.LeftLeg
-- Dla R6
print(humanoid:GetLimb(character:FindFirstChild("Left Leg"))) -- Enum.Limb.LeftLeg

Uwaga, że Humanoid:GetLimb() będzie rzucać błędem, jeśli rodzic części nie jest ustawiony na rodzica humanoidu.

Parametry

part: Instance

Class.Part dla którego Enum.Limb ma być odzyskany.


Zwroty

The Enum.Limb the part correspond with.

Przykłady kodu

Getting a Humanoid's Limbs

local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
for _, child in pairs(character:GetChildren()) do
local limb = humanoid:GetLimb(child)
if limb ~= Enum.Limb.Unknown then
print(child.Name .. " is part of limb " .. limb.Name)
end
end

GetMoveVelocity


Zwroty

Zapis równoległy

Funkcja ta powoduje, że ​​człowiekoida obecnie wykonuje Enum.HumanoidStateType, opisując działanie, które Humanoid wykonuje obecnie, takie jak skaczanie lub pływanie.

Zobacz również Humanoid:SetStateEnabled() aby włączyć lub wyłączyć określony stan, a Humanoid:ChangeState() aby zmienić obecny stan humanoidu.


Zwroty

Obecny Enum.HumanoidStateType``Class.Humanoid .

Przykłady kodu

Double Jump

local UserInputService = game:GetService("UserInputService")
local character = script.Parent
local humanoid = character:WaitForChild("Humanoid")
local doubleJumpEnabled = false
humanoid.StateChanged:Connect(function(_oldState, newState)
if newState == Enum.HumanoidStateType.Jumping then
if not doubleJumpEnabled then
task.wait(0.2)
if humanoid:GetState() == Enum.HumanoidStateType.Freefall then
doubleJumpEnabled = true
end
end
elseif newState == Enum.HumanoidStateType.Landed then
doubleJumpEnabled = false
end
end)
UserInputService.InputBegan:Connect(function(inputObject)
if inputObject.KeyCode == Enum.KeyCode.Space then
if doubleJumpEnabled then
if humanoid:GetState() ~= Enum.HumanoidStateType.Jumping then
humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
task.spawn(function()
doubleJumpEnabled = false
end)
end
end
end
end)

GetStateEnabled

Zapis równoległy

Funkcja GetStateEnabled zwraca, czy Enum.HumanoidStateType jest włączony dla Humanoid .

Stanoidy opisują aktywność, którą wykonuje człowiek.

Gdy szczególny Enum.HumanoidStateType jest wyłączony, humanoid nigdy nie może wejść w ten stan. To prawda, niezależnie czy próba zmiany stanu zostanie wykonana przy użyciu Humanoid:ChangeState() lub wewnętrznego kodu humanoid Roblox.

Zobacz również:

Parametry


Zwroty

Czy dany Enum.HumanoidStateType jest włączony.

Przykłady kodu

Setting and Getting Humanoid States

local humanoid = script.Parent:WaitForChild("Humanoid")
-- Set state
humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, false)
-- Get state
print(humanoid:GetStateEnabled(Enum.HumanoidStateType.Jumping)) -- false

Move

void

Funkcja ta powoduje, że Humanoid chodzi w podanym kierunku Vector3.

Domyślnie kierunek jest w warunkiświata, ale jeśli parametr relativeToCamera jest true, kierunek jest w kierunku CFrame Class.Workspace.CurrentCamera|CurrentCamera . Ponieważ negatywny kierun


humanoid:Move(Vector3.new(0, 0, -1), true)

Gdy ta funkcja jest wzywana, Humanoid będzie się poruszać, aż funkcja zostanie ponownie wywołana. Jeśli jednak używane są domyślne skrypty kontrolne, funkcja zostanie ponownie napisana, gdy zostanie wzywana na graczu Characters . Można tego unik

Funkcja ta może być wywołana na serwerze, ale powinna być wykonana tylko wtedy, gdy serwer ma własność sieci z zestawienia człowieka.

Zobacz również Humanoid:MoveTo() , które sprawia, że Humanoid chodzi do punktu, i Player:Move() , co skutecznie wzywa tę funkcję.

Parametry

moveDirection: Vector3

Kierunek do chodzenia w.

relativeToCamera: bool

Ustawić na true jeśli parametr moveDirection powinien być używany w odniesieniu do CurrentCamera.

Wartość domyślna: false

Zwroty

void

Przykłady kodu

Moving a Humanoid Forwards

local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
RunService:BindToRenderStep("move", Enum.RenderPriority.Character.Value + 1, function()
if player.Character then
local humanoid = player.Character:FindFirstChild("Humanoid")
if humanoid then
humanoid:Move(Vector3.new(0, 0, -1), true)
end
end
end)

MoveTo

void

Funkcja ta powoduje, że Humanoid próbuje przejść do danej lokalizacji ustawiając właściwości Humanoid.WalkToPoint i Humanoid.WalkToPart.

Parametry lokalizacja i część odpowiadają tym, co Humanoid.WalkToPoint i 1> Class.Humanoid.WalkToPart1> zostaną ustawione.

Jeśli parametr części jest określony, to Humanoid będzie nadal próbował przejść do punktu. Jeśli część się porusza, to punkt Humanoid będzie się poruszać, aby być w tej samej pozycji

Stan dotrzeć do celu ludoidu będzie skończony po 8 sekundach, jeśli nie osiągnie swojego celu. To jest zrobione, aby NPC nie zaciągnęli się, czekając na Humanoid.MoveToFinished do uruchomienia. Jeśli nie chcesz, aby to się stało, powinieneś regularnie wzywać MoveTo, aby czas odliczania się resetował.

MoveTo() kończy się, jeśli spełnione zostaną następujące warunki:

Parametry

location: Vector3

Pozycja do ustawienia Humanoid.WalkToPoint na.

part: Instance
Wartość domyślna: "nil"

Zwroty

void

Przykłady kodu

Humanoid MoveTo Without Time out

local function moveTo(humanoid, targetPoint, andThen)
local targetReached = false
-- listen for the humanoid reaching its target
local connection
connection = humanoid.MoveToFinished:Connect(function(reached)
targetReached = true
connection:Disconnect()
connection = nil
if andThen then
andThen(reached)
end
end)
-- start walking
humanoid:MoveTo(targetPoint)
-- execute on a new thread so as to not yield function
task.spawn(function()
while not targetReached do
-- does the humanoid still exist?
if not (humanoid and humanoid.Parent) then
break
end
-- has the target changed?
if humanoid.WalkToPoint ~= targetPoint then
break
end
-- refresh the timeout
humanoid:MoveTo(targetPoint)
task.wait(6)
end
-- disconnect the connection if it is still connected
if connection then
connection:Disconnect()
connection = nil
end
end)
end
local function andThen(reached)
print((reached and "Destination reached!") or "Failed to reach destination!")
end
moveTo(script.Parent:WaitForChild("Humanoid"), Vector3.new(50, 0, 50), andThen)

RemoveAccessories

void

Funkcja ta usuwa wszystkie Accessory obiekty noszone przez rodzica humanoidu. Dla gracza Characters , usunie to wszystkie kapelusze i inne akcesoria.

Funkcja ta usuwa obiekt Accessory przez wezwanie Instance:Destroy() na nich, co oznacza, że Parent akcesoriów jest ustawiony na 2>nil2> i zablokowany.

Zobacz również Humanoid:AddAccessory() , aby załączyć Accessory i Humanoid:GetAccessories() , aby uzyskać wszystkie obiekty 1> Class.Accessory1> należące do 4> Class.Humanoid4> .


Zwroty

void

Przykłady kodu

Remove Accessories After Loading

local Players = game:GetService("Players")
local function onPlayerAddedAsync(player)
local connection = player.CharacterAppearanceLoaded:Connect(function(character)
-- All accessories have loaded at this point
local humanoid = character:FindFirstChildOfClass("Humanoid")
local numAccessories = #humanoid:GetAccessories()
print(("Destroying %d accessories for %s"):format(numAccessories, player.Name))
humanoid:RemoveAccessories()
end)
-- Make sure we disconnect our connection to the player after they leave
-- to allow the player to get garbage collected
player.AncestryChanged:Wait()
connection:Disconnect()
end
for _, player in Players:GetPlayers() do
task.spawn(onPlayerAddedAsync, player)
end
Players.PlayerAdded:Connect(onPlayerAddedAsync)

ReplaceBodyPartR15

Dynamicznie zastępuje część kończyny R15/Rthro w człowiekujaku przez inną część. Część jest skalowana automatycznie jako normalna.

Funkcja ta jest przydatna do modyfikacji postaci podczas gry lub budowania postaci z bazy rury. Powiązana funkcja GetBodyPartR15 może przydać się, gdy używasz tej funkcji.

Nazwa części, która przeszła, powinna zgadzać się z nazwą BodyPartR15 Enum.

Parametry

Część ciała do zastąpienia. Enum.BodyPartR15.Unknown nie będzie działać.

part: BasePart

Class.PartInstance będące w stosunku do postaci.


Zwroty

SetStateEnabled

void

Funkcja ta ustawia, czy dany Enum.HumanoidStateType jest włączony dla Humanoid. Gdy określony Enum.HumanoidStateType jest wyłączony, 1> Class.Humanoid1>

Uwaga, że używanie SetStateEnabled() na serwerze nie replikuje zmiany na klienta, ani vice versa.

Parametry

Menu.HumanoidStateType do włączenia lub wyłączenia.

enabled: bool

true jeśli state ma być włączony, false jeśli 0> state0> ma być wyłączony.


Zwroty

void

Przykłady kodu

Jump Cooldown

local character = script.Parent
local JUMP_DEBOUNCE = 1
local humanoid = character:WaitForChild("Humanoid")
local isJumping = false
humanoid.StateChanged:Connect(function(_oldState, newState)
if newState == Enum.HumanoidStateType.Jumping then
if not isJumping then
isJumping = true
humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, false)
end
elseif newState == Enum.HumanoidStateType.Landed then
if isJumping then
isJumping = false
task.wait(JUMP_DEBOUNCE)
humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, true)
end
end
end)

TakeDamage

void

Funkcja ta zmniejsza Humanoid.Health Class.Humanoid przez podany Humanoid

Funkcja ta akceptuje negatywne wartości dla parametru ilość. Będzie to zwiększać Humanoid.Health humanoidu. Ale będzie to miało tylko wpływ, jeśli nie ma ForceField.

Jak ForceBlocks chroni przed TakeDamage

A Humanoid jest chroniony przez ForceField, jeśli ForceField spełnia jeden z następujących kryteriów:

Aby zadać obrażenia Humanoid bez względu na obecność ForceFields , ustaw Humanoid.Health bezpośrednio.

Dla więcej informacji o tym, jak ForceFields chroni Humanoids zobacz stronę ForceField

Parametry

amount: number

obrażenia, lub kwota do odliczenia z Class.Humanoid.Health .


Zwroty

void

Przykłady kodu

Damaging a Humanoid

local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
humanoid:TakeDamage(99)

UnequipTools

void

Funkcja ta zdjąłaby dowolne Tool obecnie noszone przez Humanoid

Niezałożony Tool będzie związany z Backpack związanym z Player związanym z 1> Class.Humanoid1> .

Jeśli nie jest założone Tool, ta funkcja nie zrobi nic.

Chociaż Tools może być założony przez NPC (nichta gracza), ta funkcja działa tylko na Humanoids z odpowiednim Player . To jest, ponieważ obiekt 2>Class.Backpack2> wymaga, aby założyć niezałożony 5>

Zobacz również:


Zwroty

void

Przykłady kodu

Unequip Tool Keybind

local Players = game:GetService("Players")
local ContextActionService = game:GetService("ContextActionService")
local player = Players.LocalPlayer
ContextActionService:BindAction("unequipTools", function(_, userInputState)
if userInputState == Enum.UserInputState.Begin then
if player.Character then
local humanoid = player.Character:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid:UnequipTools()
end
end
end
end, false, Enum.KeyCode.U)

ApplyDescription

void
Wynik

Funkcja ta wytwarza charakter, który pasuje do tego, co przeprowadzono HumanoidDescription . Kopia przeprowadzonego HumanoidDescription jest zapisana jako HumanoidDescription dla 1> Class.Humanoid1> .

Funkcja ta jest optymalizowana poprzez założenie, że tylko ta funkcja jest używana do zmiany wyglądu postaci, a żadne zmiany nie są dokonywane poprzez inne środki między wezwania. Jeśli zmiany są dokonywane w postaci między wezwania

Zobacz również

Parametry

humanoidDescription: HumanoidDescription

Instancja HumanoidDescription, do której chcesz ustawić postać.

assetTypeVerification: Enum.AssetTypeVerification
Wartość domyślna: "Default"

Zwroty

void

ApplyDescriptionReset

void
Wynik

Funkcja ta zwraca charakterowi wygląd zgodny z tym, co było w HumanoidDescription , nawet po zmianach zewnętrznych. Kopia przesłanego HumanoidDescription jest zapisana jako HumanoidDescription dla 2>Class.Humanoid2> .

Ta funkcja zawsze zapewni, że charakter odzwierciedla przeprowadzony w

Parametry

humanoidDescription: HumanoidDescription

Instancja HumanoidDescription, do której chcesz ustawić postać.

assetTypeVerification: Enum.AssetTypeVerification
Wartość domyślna: "Default"

Zwroty

void

PlayEmote

Wynik

Jeśli emote nie może zostać odtwarzony, ponieważ emoteName nie jest znaleziony w HumanoidDescription, ten API będzie błędem. API będzie zwracać prawdę, aby zaznaczyć, że emote został pomyślnie odtwarzony.

Parametry

emoteName: string

nazwa emotki do grać.


Zwroty

udanej gry.

Zdarzenia

ApplyDescriptionFinished

Parametry

description: HumanoidDescription

Climbing

Wystrzela, gdy szybkość, z jaką Humanoid wzrasta.

Humanoids może wspiąć się po schody wykonane z Parts lub TrussParts.

Humanoids wzrastają w 70% ich Humanoid.WalkSpeed .

Ten ewent nie zawsze będzie się palił z prędkością 0, gdy Humanoid przestanie wspinac się.

Zobacz również:

Parametry

speed: number

Prędkość, w której obecnie Humanoid wzrasta.


Przykłady kodu

Humanoid.Climbing

local Players = game:GetService("Players")
local function onCharacterClimbing(character, speed)
print(character.Name, "is climbing at a speed of", speed, "studs / second.")
end
local function onCharacterAdded(character)
character.Humanoid.Climbing:Connect(function(speed)
onCharacterClimbing(character, speed)
end)
end
local function onPlayerAdded(player)
player.CharacterAdded:Connect(onCharacterAdded)
end
Players.PlayerAdded:Connect(onPlayerAdded)

Died

Ten wąż się łączy z Humanoid , który umożliwia ustawienie połączenia z Humanoid.Health . Może to być spowodowane przez odłączenie ich głowy od ich Humanoid.Torso lub bezpośrednie ustawienie właściwości zdrowia.

Ten wątek tylko się uruchomia, jeśli Humanoid jest potomstwem Workspace. Jeśli Dead2>Ennum.HumanoidStateType2> jest wyłączony, nie będzie on uruchomiony.


Przykłady kodu

Humanoid.Died

local Players = game:GetService("Players")
local function onPlayerAdded(player)
local function onCharacterAdded(character)
local humanoid = character:WaitForChild("Humanoid")
local function onDied()
print(player.Name, "has died!")
end
humanoid.Died:Connect(onDied)
end
player.CharacterAdded:Connect(onCharacterAdded)
end
Players.PlayerAdded:Connect(onPlayerAdded)

FallingDown

Wydarzenie FallingDown występuje, gdy Humanoid wchodzi i wychodzi z FallingDown``Enum.HumanoidStateType .

Wystąpi GettingUp po wejściu w stan FallingDown po 3 sekundach po włączeniu stanu 1>FallingDown1>. Gdy to się stanie, wydarzy to wydarzenie z aktywną wartością 4>FallingDown4> i <

Parametry

active: bool

Opisuje, czy Humanoid wchodzi lub wychodzi z FallingDown``Enum.HumanoidStateType .


FreeFalling

Ten wąż pojawia się, gdy Humanoid wchodzi lub wychodzi z Freefall``Enum.HumanoidStateType.

Parametr aktywny określa, czy Humanoid wchodzi lub wychodzi z stanu Freefall.

Chociaż stan Freefall ogólnie kończy się, gdy stan Humanoid dotrze do ziemi, ten zdarza się z uruchomieniem active równy 2>

Parametry

active: bool

Czy Humanoid wchodzi lub wychodzi z Freefall``Enum.HumanoidStateType .


GettingUp

Ten ewent wyrzuca się, gdy Humanoid wchodzi lub wychodzi z stanu Enum.HumanoidStateType.GettingUp, stanu przejściowego, który jest aktywowany wkrótce po wejściu Humanoid do stanu

Gdy Humanoid próbuje się podnieść, ten wątek wydarzy się najpierw za pomocą parametru active z true przed chwilą po ponownym uruchomieniu z parametrem 2>active2> przed chwilą po ponownym uruchomieniu z parametrem 5>force5>.

Aby zmusić Humanoid do upadku, użyj funkcji Humanoid:ChangeState() z Enum.HumanoidStateType.FallingDown.

Parametry

active: bool

Czy Humanoid wchodzi lub wychodzi z GettingUp``Enum.HumanoidStateType .


HealthChanged

Ten wąż się urywuje, gdy Humanoid.Health zmienia się. Nie będzie on jednak działać, jeśli zdrowie wzrasta z wartości równej lub większej niż Humanoid.MaxHealth.

Gdy Humanoid.Health osiągnie zero, Humanoid umrze, a wydarzenie Humanoid.Died zostanie uruchomione. Ten wydarzenie będzie się łączyć z wartością zero.

Parametry

health: number

Nowa wartość Humanoid.Health .


Przykłady kodu

Humanoid.HealthChanged

local Players = game:GetService("Players")
local player = Players.LocalPlayer
local function onCharacterAdded(character)
local humanoid = character:WaitForChild("Humanoid")
local currentHealth = humanoid.Health
local function onHealthChanged(health)
local change = math.abs(currentHealth - health)
print("The humanoid's health", (currentHealth > health and "decreased by" or "increased by"), change)
currentHealth = health
end
humanoid.HealthChanged:Connect(onHealthChanged)
end
player.CharacterAdded:Connect(onCharacterAdded)
Health Bar

local Players = game:GetService("Players")
local player = Players.LocalPlayer
-- Paste script into a LocalScript that is
-- parented to a Frame within a Frame
local frame = script.Parent
local container = frame.Parent
container.BackgroundColor3 = Color3.new(0, 0, 0) -- black
-- This function is called when the humanoid's health changes
local function onHealthChanged()
local human = player.Character.Humanoid
local percent = human.Health / human.MaxHealth
-- Change the size of the inner bar
frame.Size = UDim2.new(percent, 0, 1, 0)
-- Change the color of the health bar
if percent < 0.1 then
frame.BackgroundColor3 = Color3.new(1, 0, 0) -- black
elseif percent < 0.4 then
frame.BackgroundColor3 = Color3.new(1, 1, 0) -- yellow
else
frame.BackgroundColor3 = Color3.new(0, 1, 0) -- green
end
end
-- This function runs is called the player spawns in
local function onCharacterAdded(character)
local human = character:WaitForChild("Humanoid")
-- Pattern: update once now, then any time the health changes
human.HealthChanged:Connect(onHealthChanged)
onHealthChanged()
end
-- Connect our spawn listener; call it if already spawned
player.CharacterAdded:Connect(onCharacterAdded)
if player.Character then
onCharacterAdded(player.Character)
end

Jumping

Ten wąż pojawia się, gdy Humanoid wchodzi i wychodzi z Jumping``Enum.HumanoidStateType .

Gdy Humanoid skaczy, ten ewent zostaje uruchomiony z active parametrem true Class.Humanoid przed chwilą następ

Możesz wyłączyć skaczanie używając funkcji Humanoid:SetStateEnabled() .

Parametry

active: bool

Czy Humanoid wchodzi lub wychodzi z Jumping``Enum.HumanoidStateType .


MoveToFinished

Ten wąż pojawia się, gdy Humanoid kończy chód do celu zadeklarowanego przez Humanoid.WalkToPoint i Humanoid.WalkToPart właściwości.

Właściwości Humanoid.WalkToPoint i Humanoid.WalkToPart można ustawić osobno lub używając funkcji Humanoid:MoveTo().

Jeśli Humanoid osiągnie swój cel w ciągu 8 sekund, ten wydarzenie zwróci osiągnął jako prawdziwy. Jeśli cel nie zostanie osiągnięty w ciągu 8 sekund, Humanoid przestanie chodzić i 2> osiągnięto</

Parametry

reached: bool

Boolean wskazujący, czy Humanoid osiągnął cel. Prawdziwy jeśli Humanoid osiągnął cel, 2>Fałszywy2> jeśli czas chodzenia przekroczył przed upływem celu.


Przykłady kodu

Humanoid MoveTo Without Time out

local function moveTo(humanoid, targetPoint, andThen)
local targetReached = false
-- listen for the humanoid reaching its target
local connection
connection = humanoid.MoveToFinished:Connect(function(reached)
targetReached = true
connection:Disconnect()
connection = nil
if andThen then
andThen(reached)
end
end)
-- start walking
humanoid:MoveTo(targetPoint)
-- execute on a new thread so as to not yield function
task.spawn(function()
while not targetReached do
-- does the humanoid still exist?
if not (humanoid and humanoid.Parent) then
break
end
-- has the target changed?
if humanoid.WalkToPoint ~= targetPoint then
break
end
-- refresh the timeout
humanoid:MoveTo(targetPoint)
task.wait(6)
end
-- disconnect the connection if it is still connected
if connection then
connection:Disconnect()
connection = nil
end
end)
end
local function andThen(reached)
print((reached and "Destination reached!") or "Failed to reach destination!")
end
moveTo(script.Parent:WaitForChild("Humanoid"), Vector3.new(50, 0, 50), andThen)

PlatformStanding

Ten wąż pojawia się, gdy Humanoid wchodzi lub wychodzi z PlatformStanding``Enum.HumanoidStateType .

Podczas gdy Humanoid jest w stanie PlatformStanding, właściwość Humanoid.PlatformStand będzie 2> prawdziwa2>.

Podczas gdy Humanoid.PlatformStand ustawiony na Prawdziwy, Humanoid nie będzie w stanie się poruszać. For more information, please see the page for 2>Class.Humanoid.PlatformStand2>.

PlatformStand Enum.HumanoidStateType była powiązana z teraz wyłączoną częścią Platform. Mimo to nadal można ją używać przez rozwój.

Parametry

active: bool

Czy Humanoid wchodzi lub wychodzi z PlatformStanding``Enum.HumanoidStateType .


Ragdoll

Ten wąż pojawia się, gdy Humanoid wchodzi lub wychodzi z Ragdoll``Enum.HumanoidStateType .

Parametr active będzie miał wartość true lub false, aby określić wejście lub wyjście.

Użyj Humanoid:SetStateEnabled() , aby wyłączyć stan GettingUp, aby pozostać w stanie Ragdoll.

Zobacz również:

Parametry

active: bool

Czy Humanoid wchodzi lub wychodzi z Ragdoll``Enum.HumanoidStateType .


Running

Ten wąż pojawia się, gdy prędkość, z jaką Humanoid dokonuje zmian, przekracza wartość progu.

Podczas uruchomienia Humanoids pokrywy, na ogół, ich Humanoid.WalkSpeed w studs pro sekundę.

Gdy Humanoid przestanie działać w ten incydent, będzie on działać z prędkością 0.

Zobacz również:

Parametry

speed: number

Prędkość, w której Humanoid biega.


Przykłady kodu

Humanoid Running

local Players = game:GetService("Players")
local localPlayer = Players.LocalPlayer
local character = localPlayer.Character or localPlayer.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local function onRunning(speed: number)
if speed > 0 then
print(`{localPlayer.Name} is running`)
else
print(`{localPlayer.Name} has stopped`)
end
end
humanoid.Running:Connect(function(speed: number)
onRunning(speed)
end)

Seated

Ten ewent zostaje uruchomiony, gdy Humanoid albo Seat lub VehicleSeat leży w odległości.

Gdy postać kontaktuje się z siedzeniem, jest ona przywiązana do siedzenia i odtwarza animacja siedzenia. Dla więcej informacji na ten temat, zobacz stronę Seat.

  • Jeśli znak jest siedzący, parametr active będzie prawdziwy i currentSeatPart będzie siedzeniem, w którym się obecnie siedzą.
  • Jeśli znak znajduje się z góry siedzenia, parametr active będzie fałszywy i currentSeatPart będzie nil.

Zobacz również:

  • Humanoid.Sit , co wskazuje, czy Humanoid jest obecnie siedzący
  • Humanoid.SeatPart , co wskazuje na to, na którym siedzeniu jest obecnie Humanoid, jeśli jest jakakolwiek.

Parametry

active: bool

Prawdziwy, jeśli Humanoid siedzi.

currentSeatPart: BasePart

Siedzenie Humanoid jest zaciskane, jeśli siedzi.


Przykłady kodu

Finding a Player's Seat

local character = script.Parent
local humanoid = character:WaitForChild("Humanoid")
local function onSeated(isSeated, seat)
if isSeated then
print("I'm now sitting on: " .. seat.Name .. "!")
else
print("I'm not sitting on anything")
end
end
humanoid.Seated:Connect(onSeated)

StateChanged

Ten wążek zdarzeń wygrywa się, gdy stan Humanoid jest zmieniony.

Ponieważ nie ma stanu "bezczynność" ludzkiego, powinieneś zamiast tego użyć wydarzenia Humanoid.Running lub słuchać części RootPart, aby pracować, gdy Velocity stoi nieruchomo.

Zobacz również

Parametry

wpisywaćpoprzedniego stanu ludzkiego.

wpisywaćaktualnego stanu człowiekoidu.


Przykłady kodu

Jumping Particles

local character = script.Parent
local primaryPart = character.PrimaryPart
-- create particles
local particles = Instance.new("ParticleEmitter")
particles.Size = NumberSequence.new(1)
particles.Transparency = NumberSequence.new(0, 1)
particles.Acceleration = Vector3.new(0, -10, 0)
particles.Lifetime = NumberRange.new(1)
particles.Rate = 20
particles.EmissionDirection = Enum.NormalId.Back
particles.Enabled = false
particles.Parent = primaryPart
local humanoid = character:WaitForChild("Humanoid")
local isJumping = false
-- listen to humanoid state
local function onStateChanged(_oldState, newState)
if newState == Enum.HumanoidStateType.Jumping then
if not isJumping then
isJumping = true
particles.Enabled = true
end
elseif newState == Enum.HumanoidStateType.Landed then
if isJumping then
isJumping = false
particles.Enabled = false
end
end
end
humanoid.StateChanged:Connect(onStateChanged)
Jump Cooldown

local character = script.Parent
local JUMP_DEBOUNCE = 1
local humanoid = character:WaitForChild("Humanoid")
local isJumping = false
humanoid.StateChanged:Connect(function(_oldState, newState)
if newState == Enum.HumanoidStateType.Jumping then
if not isJumping then
isJumping = true
humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, false)
end
elseif newState == Enum.HumanoidStateType.Landed then
if isJumping then
isJumping = false
task.wait(JUMP_DEBOUNCE)
humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, true)
end
end
end)

StateEnabledChanged

Wydarzenie StateEnableChanged występuje, gdy Humanoid:SetStateEnabled() jest wzywane na Humanoid .

Parametry obejmują Enum.HumanoidStateType w kwestii, wraz z bułką, która wskazuje, czy ten stan jest teraz włączony.

Zobacz również:

Parametry

enum.HumanoidStateType dla którego nastąpił zmiany stanu włączonego.

isEnabled: bool

Prawdziwy, jeśli teraz jest włączony stan.


Przykłady kodu

Humanoid State Change Detector

local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local function onStateEnabledChanged(state, enabled)
if enabled then
print(state.Name .. " has been enabled")
else
print(state.Name .. " has been disabled")
end
end
humanoid.StateEnabledChanged:Connect(onStateEnabledChanged)

Strafing

Ten wąż nie zostanie wywołany, gdy Humanoid będzie bombardował i nie należy go używać przez rozwój

Ten ewent jest uruchomiony, gdy Humanoid wchodzi lub wychodzi z StrafingNoPhysics``Enum.HumanoidStateType.

Gdy Humanoid wchodzi w stan StrafingNoPhysics, ten ewent zostanie uruchomiony z aktywnym parametrem prawdziwy . Wystąpi ewent ponownie z aktywnym parametrem 2>aktywny2>, r

Ten wątek jest powiązany z StrafingNoPhysics``Class.Humanoid stanem i nie wstrzyma się nie wstrzyma się pojawia się, gdy 2>Class.Humanoid2> porusza się perpendicularnie do kierunku, w którym się znajdu

Parametry

active: bool

Czy Humanoid wchodzi lub wychodzi z StrafingNoPhysics``Enum.HumanoidStateType .


Swimming

Ten wąż pojawia się, gdy prędkość, w jakiej pływa Humanoid w wodach Terrain zmienia się.

Humanoids pływają na 87,5% swojego Humanoid.WalkSpeed .

Ten wątek nie zawsze będzie się wstrzymywał z prędkością 0, gdy Humanoid przestanie pływać.

Zobacz również:

Parametry

speed: number

Prędkość, którą Humanoid aktualnie pływa.


Touched

Ten wąż pojawia się, gdy jeden z limboidów kontaktuje się z innym BasePart. Class.BasePart , który dotyka limba, wraz z limbem samym w sobie, jest podawany.

Ten wąż nie zostanie wywołany, gdy Humanoid dostanie się w kontakt z samym sobą.

Alternatywy

Chociaż wydarzenie Humanoid.Touched jest użyteczne, powinieneś rozważyć, czy istnieją alternatywy, które lepiej odpowiadają Twoim potrzebom.

  • W większości przypadków zaleca się połączenie BasePart.Touched wydarzenia dla BaseParts zainteresowania, zamiast tego, że wydarzenie Class.Human
  • Gdy próbujesz pracować, gdy Humanoid wylądował na ziemi, wydarzenie Humanoid.StateChanged jest bardziej odpowiednie. Alternatywnie możesz sprawdzić Humanoid.FloorMaterial, aby zobaczyć, czy humanoid stoi na jakimkolwiek nie powietrznym materiale.

Notatki

Parametry

touchingPart: BasePart

Class.BasePartHumanoid konsakt z.

humanoidPart: BasePart

Limba Humanoid , która została dotknięta.


Przykłady kodu

Midas Touch

local character = script.Parent
local humanoid = character:WaitForChild("Humanoid")
local partInfo = {}
local debounce = false
local function onHumanoidTouched(hit, _limb)
if debounce then
return
end
if not hit.CanCollide or hit.Transparency ~= 0 then
return
end
if not partInfo[hit] then
partInfo[hit] = {
BrickColor = hit.BrickColor,
Material = hit.Material,
}
hit.BrickColor = BrickColor.new("Gold")
hit.Material = Enum.Material.Ice
debounce = true
task.wait(0.2)
debounce = false
end
end
local touchedConnection = humanoid.Touched:Connect(onHumanoidTouched)
local function onHumanoidDied()
if touchedConnection then
touchedConnection:Disconnect()
end
-- undo all of the gold
for part, info in pairs(partInfo) do
if part and part.Parent then
part.BrickColor = info.BrickColor
part.Material = info.Material
end
end
end
humanoid.Died:Connect(onHumanoidDied)