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 modelem funkcjonalność postaci.Zapewnia modelowi możliwość fizycznego chodzenia i interakcji z różnymi komponentami doświadczenia Roblox.Humanoidy zawsze są rodzicami w środku Model, a model jest oczekiwany jako zbiór BasePart i Motor6D, korzeń części zbioru ma być nazwany HumanoidRootPart.Oczekuje również, że część o nazwie Head zostanie połączona z częścią tułowia postaci bezpośrednio lub pośrednio.Domyślnie istnieją dwa oficjalne rodzaje postaci dostarczane przez Roblox, każdy z własnym zestawem zasad:

R6

  • Podstawowa rama postaci, która używa 6 części do kończyn.
  • Część Head musi być przymocowana do części o nazwie Torso, lub Humanoid natychmiast umrze.
  • Występy części ciała są stosowane 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 skomplikowany niż R6, ale również dużo bardziej elastyczny i wytrzymały.
  • Używa 15 części dla kończyn.
  • Część Head musi być przymocowana do części o nazwie UpperTorso lub Humanoid natychmiast umrze.
  • Występy części ciała muszą być złożone bezpośrednio.
  • Można dynamicznie skalować za pomocą specjalnych obiektów NumberValue wewnątrz Humanoida.
  • Humanoid automatycznie stworzy obiekty Vector3Value o nazwie OriginalSize wewnątrz każdej kończyny.
  • Jeśli wartość liczbowa jest powiązana wewnątrz Humanoida i nazywa się jedną z obserwuje, zostanie ona wykorzystana do kontroli funkcjonalności skalowania:
    • Skala głębi ciała
    • Skala wysokości ciała
    • Skala szerokości ciała
    • Skala głowy

Przykłady kodu

This LocalScript makes the camera bobble as the player's character walks around, utilizing both the Humanoid's CameraOffset and MoveDirection. It should be parented inside of the StarterCharacterScripts so that it is distributed into a player's character as expected.

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

AutoJumpEnabled określa, czy Humanoid będzie próbować automatycznie przeskoczyć przez przeszkodę, do której zmierza.

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

  • Model postaci humanoida jest Player.Character z Player .
  • Gracz w kwestii używa elementy sterującedotykowych.

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

Przykłady kodu

This code sample is meant for a TextButton. It allows the player to toggle the auto-jumping behavior while on a mobile device.

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 ludzik będzie się automatycznie obracać w kierunku, w którym się porusza.Gdy ustawiono na prawdę, model postaci będzie stopniowo odwracać się w kierunku ich ruchu, gdy Humanoid chodzi wokół.Gdy ustawiono na fałsz, model postaci pozostanie w obecnej rotacji, chyba że zostanie zastosowana siła obrotowa do HumanoidRootPart.

Jeśli model postaci jest postacią gracza, to zachowanie rotacji humanoida jest wpływane przez właściwość RotateType w ustawieniu gry użytkownika.

Gdy właściwość AutoRotate jest ustawiona na prawdę, właściwość RotateType ma następujące efekty na rotacji Humanoida:


<th>Zachowanie</th>
<th>Konttekst</th>
</tr>
</thead>
<tbody>
<tr>
<td>Poruszanie względne</td>
<td />
<td />
</tr>
<tr>
<td>KameraRelacyjna</td>
<td>Postać będzie się obracać, aby skierować się w kierunku kamery.</td>
<td>Gracz ma swoją kamerę skupioną w trybie pierwszej osoby, lub jest w trybie zmiany błędów.</td>
</tr>
</tbody>
Typ rotacji

Przykłady kodu

This script adds the functionality of a button to a part, which switches the AutoRotate property of whoever touches it.

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 skali dzieci, w tym BodyDepthScale, BodyHeightScale, BodyProportionScale, BodyTypeScale, BodyWidthScale, HeadScale.Zmiana wartości dowolnej z tych przyczyn powoduje, że części ciała i akcesoria postaci zmieniają rozmiar, ale tylko wtedy, gdy AutomaticScalingEnabled jest prawdą.

BreakJointsOnDeath

Odczyt równoległy

Określa, czy stawy humanoida pękają, gdy znajduje się w stanie Enum.HumanoidStateType.Dead. Domyślnie ustawia się na prawdę.

CameraOffset

Odczyt równoległy

Właściwość CameraOffset określa przesunięcie do pozycji tematu kamery, gdy jej Camera.CameraSubject jest ustawiona na tę Humanoid.

Odległość jest stosowana w przestrzeni obiektu w odniesieniu do orientacji HumanoidRootPart ludzkiego humanoida.Na przykład, wartość offsetu Vector3(0, 10, 0) odwraca kamerę gracza o 10 szpilkami powyżej ludoidu gracza.

Przykłady kodu

This LocalScript makes the camera bobble as the player's character walks around, utilizing both the Humanoid's CameraOffset and MoveDirection. It should be parented inside of the StarterCharacterScripts so that it is distributed into a player's character as expected.

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 odległości nazwy i wyświetlenia zdrowia humanoida.Właściwość ta jest ustawiana za pomocą Enum.HumanoidDisplayDistanceType enum z trzema dostępnymi wartościami, każda z własnym zestawem zasad:

  • Gdy ustawiono na Viewer, humanoid widzi nazwę/zdrowie innych humanoidów w zasięgu własnego NameDisplayDistance i HealthDisplayDistance .
  • Gdy ustawiono na Subject, humanoid przejmuje pełną kontrolę nad własną nazwą i wyświetlaniem zdrowia poprzez swoje NameDisplayDistance i HealthDisplayDistance wartości.
  • Gdy ustawiono na None, pasek nazwy i zdrowia humanoida nie pojawia się w żadnych przypadkach.

Zobacz Nazwę postaci/wygląd zdrowia dla szczegółowego przewodnika dotyczącego kontroli wyglądu nazw postaci i pasków zdrowia.

Przykłady kodu

This example demonstrates how to set a Humanoid's Humanoid.DisplayerDistanceType, Humanoid.HealthDisplayDistance, and Humanoid.NameDisplayDistance properties. These properties determine how a humanoid's healthbar and name are rendered for a player.

First, we change the DisplayDistanceType to Viewer using Enum.HumanoidDisplayDistanceType. When set to viewer, the humanoid's Name and healthbar will be displayed based on the distance settings of the humanoid viewing them.

Then, the humanoid's HealthDisplayDistance is set to 0. Setting the property to 0 hides the healthbar completely. It is not displayed at any distance.

Finally, the humanoid's NameDisplayDistance is set to 100. This means that the humanoid's name will be visible to other humanoid's within 100 studs.

This example should work as expected when placed inside a Script that is a child of the humanoid.

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 wyświetlanie nazwy Humanoida, gdy jest widoczny.Domyślnie nowy Humanoid będzie miał wartość pustej ciąg.Jeśli DisplayName jest pustą struną, wyświetlanie nazwy humanoida domyślnie zostanie zmienione na właściwość nazwy rodzica humanoida.

Ładowanie postaci gracza

Kiedy gracze wczytają swoją postać, automatycznie lub za pomocą użycia LoadCharacter(), humanoid stworzony przez silnik będzie miał ustawioną właściwość DisplayName na właściwość gracza DisplayName.

Początkowy postać i StarterHumanoid

Gdy Humanoid o nazwie StarterHumanoid jest powiązany z StarterPlayer, lub gdy istnieje Humanoid w Modelu o nazwie StarterCharacter, właściwość DisplayName zostanie uszanowana, gdy postacie zostaną załadowane przez Graczy w grze.Silnik będzie zastępował tylko właściwość DisplayName właściwości Humanoida właściwością DisplayName gracza, jeśli Humanoid.DisplayName z StarterHumanoid jest pustą ciąg.

EvaluateStateMachine

Odczyt równoległy

FloorMaterial

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Jest to właściwość tylko do odczytu, która opisuje Enum.Material aktualnie stojący Humanoid .Funkcjonuje zarówno z regularnymi Parts i Terrain wokselami.

Poniższy przykład kodu pokazuje, jak słuchać, gdy ta właściwość zmienia się za pomocą Object:GetPropertyChangedSignal() .Kiedy materiał, na którym stoi humanoid, zmieni się, wyświetli wiadomość wskazującą na nowy materiał, na którym stoi.


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

Ostrzeżenia

  • Gdy Humanoid nie stoi na podłodze, wartość tej właściwości zostanie ustawiona na Powietrze.
    • Występuje to dlatego, że właściwości Enum nie mogą mieć pustej wartości.
    • Może to powodować pewną zamieszanie, jeśli część ma ustawiony materiał na Powietrze, choć w praktyce części nie powinny używać tego materiału na początku.
  • Model postaci z Humanoid musi być w stanie zderzyć się z podłogą, w przeciwnym razie nie zostanie wykryty.
    • Nie możesz sprawdzić, czy Humanoid pływa z tą właściwością. Powinieneś zamiast tego użyć jego funkcji Humanoid:GetState().

Health

Bez replikacji
Odczyt równoległy

Ta właściwość reprezentuje obecne zdrowie Humanoid .Wartość jest ograniczona do zakresu pomiędzy 0 a MaxHealth.Jeśli humanoid nie żyje, ta właściwość jest stale ustawiona na 0.

Zauważ, że funkcja TakeDamage() może być użyta do odejmowania od Health zamiast ustawiać właściwość bezpośrednio.

Regeneracja zdrowia

Domyślnie aktywny skrypt regeneracji zdrowia jest automatycznie wstawiany do humanoidów.Spowoduje to, że nieumarłe postacie graczy regenerują 1% MaxHealth co sekundę.Aby wyłączyć to zachowanie regeneracji, dodaj puste Script o nazwie Zdrowie do StarterCharacterScripts.

Wyświetlanie paska zdrowia

Gdy Health jest mniejszy niż MaxHealth, pasek zdrowia jest wyświetlany w doświadczeniu.Zachowanie wyświetlania paska zdrowia zależy od HealthDisplayDistance i HealthDisplayType.

Zobacz Nazwę postaci/wygląd zdrowia dla szczegółowego przewodnika dotyczącego kontroli wyglądu nazw postaci i pasków zdrowia.

Śmierć

Gdy wartość zdrowia postaci osiągnie 0, Humanoid automatycznie przejdzie do stanu Enum.HumanoidStateType.Dead.W tym stanie Health jest zablokowane do 0; jednak nie ma błędu ani ostrzeżenia o ustawieniu Health martwego humanoida na pozytywną wartość niezerową.

HealthDisplayDistance

Odczyt równoległy

Właściwość ta jest liczbą używaną w połączeniu z właściwością DisplayDistanceType w celu kontrolowania odległości, z której można zobaczyć pasek zdrowia humanoida.

Zobacz Nazwę postaci/wygląd zdrowia dla szczegółowego przewodnika dotyczącego kontroli wyglądu nazw postaci i pasków zdrowia.

Odczyt równoległy

Właściwość ta kontroluje, kiedy pasek zdrowia humanoida może być wyświetlany.Domyślnie właściwość ta jest ustawiona na , co sprawia, że pasek zdrowia wyświetlany jest tylko wtedy, gdy zdrowie humanoida jest mniejsze niż jego .Można go również ustawić na AlwaysOn , co sprawia, że pasek zdrowia zawsze wyświetla się, lub AlwaysOff , który uniemożliwia jego wyświetlanie.

Zauważ, że ta właściwość działa niezależnie od właściwości humanoida HealthDisplayDistance, która jest odpowiedzialna za to, że pasek zdrowia znika na pewnych odległościach.Jeśli Humanoid.HealthDisplayType|HealthDisplayType jest ustawione na AlwaysOn, nadal zniknie, w zależności od tego, jak HealthDisplayDistance jest skonfigurowane.

Zobacz Nazwę postaci/wygląd zdrowia dla szczegółowego przewodnika dotyczącego kontroli wyglądu nazw postaci i pasków zdrowia.

HipHeight

Odczyt równoległy

Określa odległość (w szpilkach) od ziemi, na której powinien stać RootPart ludzoid, gdy stoi.The RigType wpływa na sposób działania tej właściwości.

Dla rigów R15 odpowiednia wysokość bioder jest zaprogramowana, aby zapewnić, że wysokość RootPart jest poprawna.Wysokość nóg nie jest używana.Ogólna wysokość humanoida można opisać za pomocą następującej formuły:


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

Dla rigów R6, HipHeight zamiast opisuje względny przesunięcie. Ogólna wysokość humanoida można opisać za pomocą następującej formuły:


Height = LeftLeg.Size.Y + (0.5 * RootPart.Size.Y) + HipHeight
Bez replikacji
Odczyt równoległy

Jeśli true , skoki Humanoid wykonują z siłą w górę równą wartości Humanoid.JumpPower lub wysokości Humanoid.JumpHeight , w zależności od wartości Humanoid.UseJumpPower .

JumpHeight

Odczyt równoległy

Zapewnia kontrolę nad wysokością skoku Humanoid w szpilkach.Początkowa wartość tej właściwości jest określana przez wartość StarterPlayer.CharacterJumpHeight, która domyślnie wynosi 7.2.

Chociaż ustawienie tej właściwości na 0 skutecznie uniemożliwi skok humanoida, zaleca się wyłączenie skoku poprzez wyłączenie stanu Enum.HumanoidStateType.Jumping poprzez Humanoid:SetStateEnabled().

Właściwość ta jest widoczna tylko w oknie Właściwości, jeśli Humanoid.UseJumpPower jest ustawiona na fałsz , ponieważ w przeciwnym razie nie byłaby istotna (zamiast tego używa się Humanoid.JumpPower).

JumpPower

Odczyt równoległy

Określa, ile siły w górę jest stosowane do Humanoid podczas skoku.Początkowa wartość tej właściwości jest określona przez wartość StarterPlayer.CharacterJumpPower, która domyślnie wynosi 50 i jest ograniczona między 0 a 1000.Zauważ, że skoki są również wpływane przez właściwość Workspace.Gravity, która określa przyspieszenie z powodu grawitacji.

Chociaż ustawienie tej właściwości na 0 skutecznie uniemożliwi skok humanoida, zaleca się wyłączenie skoku poprzez wyłączenie stanu Enum.HumanoidStateType.Jumping poprzez Humanoid:SetStateEnabled().

Właściwość ta jest widoczna tylko w oknie Właściwości, jeśli zostanie ustawiona na prawdę, ponieważ w przeciwnym razie nie byłaby istotna (zamiast tego używa się ).

MaxHealth

Odczyt równoległy

Maksymalna wartość humanoida Health .

Wartość tej właściwości jest używana wraz z właściwością Health w celu określenia rozmiaru domyślnego wyświetlenia paska zdrowia.Kiedy pasek zdrowia humanoida Health osiągnie MaxHealth, może nie zostać wyświetlony, w zależności od jego właściwości HealthDisplayType.

MaxSlopeAngle

Odczyt równoległy

Właściwość ta określa maksymalny kąt nachylenia, który może wspiąć się człowiek-oid.Jeśli kąt nachylenia jest większy niż kąt maksymalnego nachylenia humanoida, zejdą w dół po zboczu.

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

Wartość tej właściwości jest ograniczona do wartości pomiędzy 0° a 89°.Domyślnie wynosi 89°, więc ludzik może wspinąć się prawie każdą pochyłością, jaką chce domyślnie.

Przykłady kodu

The example below demonstrates the effect of the MaxSlopAngle property by limiting the maximum slope the Players.LocalPlayer can walk up to 30°. The local player will slide down any slope greater than 30°.

This code below works as expected when placed in a LocalScript.

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

Kierunek przesuwania jest właściwością tylko do odczytu, która opisuje kierunek, w którym Humanoid chodzi, jako wektor jednostkowy lub wektor o długości zera.Kierunek jest opisany w przestrzeni świata.

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

Przykłady kodu

This LocalScript makes the camera bobble as the player's character walks around, utilizing both the Humanoid's CameraOffset and MoveDirection. It should be parented inside of the StarterCharacterScripts so that it is distributed into a player's character as expected.

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ść Dystans wyświetlania nazwy jest liczbą używaną w połączeniu z właściwością Humanoid.DisplayDistanceType w celu kontrolowania odległości, z której można zobaczyć nazwę humanoida.

Zobacz Nazwę postaci/wygląd zdrowia dla szczegółowego przewodnika dotyczącego kontroli wyglądu nazw postaci i pasków zdrowia.

NameOcclusion

Odczyt równoległy

Kontroluje, czy nazwa i pasek zdrowia humanoida może być widoczny za ścianami lub innymi obiektami.Właściwość ta jest wartością Enum.NameOcclusion i może być skonfigurowana, aby wykluczać wszystkie nazwy, nazwy wrogów lub wyłączyć całkowicie wykluczanie.

W przypadkach, gdy LocalPlayer nie ma z nią powiązanej Humanoid , ta właściwość zamiast tego dotyczy przedmiotu Humanoid.

Zobacz Nazwę postaci/wygląd zdrowia dla szczegółowego przewodnika dotyczącego kontroli wyglądu nazw postaci i pasków zdrowia.

Przykłady kodu

In the below example, Player|Players will not be able to see each other's Player.Character names when they are obscured behind BasePart|BaseParts.

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, ludzkioid jest w stanie, w którym wolno spada i nie może się poruszać.Ten stan zachowuje się podobnie do siedzenia, z wyjątkiem tego, że skakanie nie uwalnia humanoida z tego stanu.

RequiresNeck

Odczyt równoległy

Pozwala programistom wyłączyć zachowanie, w którym gracz Character|character umiera, jeśli szyja Motor6D zostanie usunięta lub odłączona choćby na chwilę.Właściwość ta domyślnie wynosi prawda.

Odczyt równoległy

Typ postaci opisuje, czy Humanoid korzysta z przestarzałej postaci R6, czy nowszej postaci R15.

Sprzęt R6 używa 6 widocznych Parts, podczas gdy sprzęt R15 używa 15 widocznych Parts.Sprzęty R15 mają więcej stawów niż sprzęty R6, co czyni je o wiele bardziej wszechstronnymi podczas animacji.

Zauważ, że jeśli ta właściwość jest ustawiona nieprawidłowo, Humanoid nie będzie działać poprawnie.Na przykład, jeśli typ postaci R15 humanoida jest ustawiony na R6, umrze, ponieważ nie ma nazywanego tułowia połączonego z głową , która została nazwana .

RootPart

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Odwołanie do obiektu HumanoidRootPart ludzkiego humanoida, części sterującej korzeniem Humanoid, która kontroluje ruch ludzkiego humanoida w świecie 3D.Ta część jest zwykle niewidoczna.

Dla postaci R15, Model.PrimaryPart model Player.Character jest ustawiony na HumanoidRootPart .

Dla znaków R6, Model.PrimaryPart jest ustawiony na część Head.

SeatPart

Tylko do odczytu
Bez replikacji
Odczyt równoległy

SeatPart jest odniesieniem do siedzenia, na którym obecnie siedzi Humanoid , jeśli takie istnieje.Wartość tej właściwości może być albo Seat, albo VehicleSeat.Będzie to nil, jeśli Humanoid nie siedzi obecnie na siedzeniu.

Uwaga:

Odczyt równoległy

Właściwość Sit jest booleanem, który wskazuje, czy Humanoid jest obecnie siedzący.Humanoids można zmusić do siedzącego stanu, ustawiając wartość tej właściwości na prawdę.Jeśli Humanoid nie jest przymocowany do siedzenia w stanie siedzenia, ulegnie potknięciu bez kolizji w nogach.A Humanoid może uciec z siedzącego stanu, skacząc.

Uwaga:

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 wycofany.

Właściwość ta opisuje pozycję 3D w przestrzeni, w której Player kontroluje tę ostatnią za pomocą Humanoid wyposażonego Tool.

Właściwość ta jest głównie wykorzystywana przez klasyczne narzędzia do określenia, na co dąży humanoid, gdy aktywuje narzędzie.Jeśli dasz NPC klasyczną wyrzutnię rakiet, ustaw jego punkt docelowy i następnie wezwiesz funkcję narzędzia Tool:Activate(), możesz sprawić, że NPC wystrzeli rakietę w punkt docelowy.

UseJumpPower

Odczyt równoległy

Gdy pojawia się postać, właściwość ta jest ustawiona 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 skoków humanoidów do tej wysokości.Z tym ustawieniem na fałsz, wartość Humanoid.JumpPower jest używana do zastosowania siły w górę.

WalkSpeed

Odczyt równoległy

Właściwość ta opisuje, jak szybko Humanoid może chód, w szpilkach na sekundę.Domyślnie jest ustawiony na wartość StarterPlayer.CharacterWalkSpeed (16), co oznacza, że gracz może przesuwać 16 ćwieków w dowolnym kierunku co sekundę.

Notatki

  • Gdy kontrolowany na urządzeniu mobilnym lub gamepadzie, humanoid może chodzić wolniej niż jego WalkSpeed jeśli kontrolny joystick przesuwa się tylko o stopień stopniowy od środka.
  • Możesz zamrozić humanoida na miejscu, ustawiając WalkSpeed na 0; uniemożliwia to przemieszczanie go przez kontrolującego gracza poprzez domyślne mechanizmy ruchu.
  • Domyślny skrypt animacji skaluje animacje ruchu humanoida w oparciu o to, jak szybko porusza się w stosunku do domyślnej prędkości 16 ćwieków na sekundę.
  • Prędkość, z jaką obecnie chodzi Humanoid można uzyskać za pomocą wydarzenia Running.

WalkToPart

Odczyt równoległy

WalkToPart jest odniesieniem do części, do której próbuje dotrzeć Humanoid.Właściwość ta jest zwykle ustawiana, gdy część jest przekazywana jako drugi argument funkcji Humanoid:MoveTo() Humanoida.

Gdy ustawiono WalkToPart i istniejący humanoid aktywnie próbuje dotrzeć do części, będzie nadal aktualizować swój cel Vector3, aby był pozycją części, plus Humanoid.WalkToPoint przetłumaczonym w przestrzeni obiektu w odniesieniu do rotacji części.

Można to opisać w Luau jako:


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

Ostrzeżenia

  • Ustawienie wartości WalkToPart nie jest wystarczające, aby rozpocząć start humanoida po następującej części.
  • Humanoid jest poproszony o rozpoczęcie próby osiągnięcia celu, gdy zmieniona zostanie wartość WalkToPoint.
  • Może to zostać zmienione w przyszłości.
  • Stan docelowy osiągnięcia celu humanoida wygasa po 8 sekundach, jeśli nie osiągnie swojego celu.
  • Robi się to, aby NPC nie utknęły, czekając na Humanoid.MoveToFinished, aby wystrzelić.
  • Jeśli nie chcesz, aby to się stało, powinieneś wielokrotnie wezwać MoveTo, aby czas wygaśnięcia był nadal resetowany.

WalkToPoint

Odczyt równoległy

WalkToPoint opisuje pozycję 3D w przestrzeni, do której próbuje dotrzeć humanoid, po tym jak został poproszony o to przez funkcję Humanoid:MoveTo() ludzkiego humanoida.

Jeśli ustawiaćHumanoid.WalkToPart człowieka, cel jest ustawiony poprzez przekształcenie WalkToPoint względem pozycji i rotacji części.Jeśli nie zostanie ustawiaćfunkcja WalkToPart, wówczas humanoid spróbuje bezpośrednio dotrzeć do określonej pozycji 3D wskazanej przez WalkToPoint.

Ostrzeżenia

  • Wartość WalkToPoint musi zostać zmieniona na inną wartość, aby ludzoid zaczął chodzić w jej kierunku.
  • Jeśli chcesz zrobić humanoidowy spacer do 0,0,0, powinieneś użyć funkcji MoveTo ludzkiego humanoida.
  • Może to zostać zmienione w przyszłości.
  • Stan docelowy osiągnięcia celu humanoida wygasa po 8 sekundach, jeśli nie osiągnie swojego celu.
  • Robi się to, aby NPC nie utknęły, czekając na Humanoid.MoveToFinished, aby wystrzelić.
  • Jeśli nie chcesz, aby to się stało, powinieneś wielokrotnie wezwać MoveTo, aby czas wygaśnięcia był nadal resetowany.

Przykłady kodu

This code sample includes a function that avoids the 8 second timeout on Humanoid:MoveTo() by calling Humanoid:MoveTo() again before the timeout elapses. It also includes an optional andThen parameter where developers can pass a function to be called when the humanoid reaches its destination.

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

()

Ta metoda przypina określone Accessory do rodzica humanoida.

Gdy ta metoda jest wywoływana, Accessory jest przymocowany do postaci poprzez wyszukiwanie Attachment w rodzaju rodzica humanoida, który ma taką samą nazwę jak Attachment w akcesorium Handle Part.Jeśli jeden zostanie znaleziony, część Uchwyt zostanie połączona z rodzicem Attachment za pomocą Weld i spawanie zostanie skonfigurowane tak, aby Attachments zajmowała tę samą przestrzeń.

Jeśli nie można znaleźć wymaganego Attachment, wówczas Accessory pozostanie powiązany z rodzicem humanoida, ale będzie odłączony.

Zazwyczaj spawy akcesoriów są tworzone na serwerze, ale mogą być tworzone na klientzie w pewnych przypadkach.W tych sytuacjach połączenia strony klienta do AddAccessory() mogą nie zawsze produkować pożądane zachowanie, a możesz użyć BuildRigFromAttachments() , aby zmusić do dziełospawanych spoin.

Parametry

accessory: Instance

The Accessory do załączenia.

Wartość domyślna: ""

Zwroty

()

Przykłady kodu

This script generates the "Clockwork's Shades" Accessory from scratch, and then attaches it to the player's character using Humanoid.AddAccessory You should paste this code into a regular script, and then parent it inside of the StarterPlayer's StarterCharacterScripts folder.

[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

()

Ta metoda składa drzewo Motor6D połączeń dla Humanoid . Motor6D połączenia są wymagane do odtwarzania Animations .

Zaczynając od humanoida RootPart, ta metoda zbiera wszystkie Attachments rodzice w obecnej części, które kończą się na RigAttachment .Następnie wyszukuje pasujący załącznik w postaci, która ma taką samą nazwę jak załącznik.Używając tych dwóch załączników, stworzono stawę Motor6D wspólną w oparciu o części związane z tymi dwoma załącznikami i CFrame załącznikami.

Humanoid:BuildRigFromAttachments() również skaluje znak i ustawia kolory ciała.


Zwroty

()

Przykłady kodu

A Lua port of the Humanoid's BuildRigFromAttachments function, so that the recursive behavior of the function can be seen.

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)

A script that generates an R15 character from scratch using a package's assetId.

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

()

Ta metoda powoduje, że Humanoid wchodzi do podanego Enum.HumanoidStateType, opisującego aktywność, którą Humanoid wykonuje obecnie.

Proszę przejrzeć stronę Enum.HumanoidStateType dla więcej informacji o poszczególnych stanach, ponieważ niektóre mają niedostępne nazwy.Na przykład Enum.HumanoidStateType.Running opisuje stan, w którym nogi humanoida są na ziemi, w tym podczas postoju.

Z powodu domyślnego zachowania Humanoid niektóre stany zostaną automatycznie zmienione po ustawiać. Na przykład:

Zauważ, że aby ustawić stan Humanoid za pomocą tej metody, musisz to zrobić z LocalScript i klient musi mieć własność sieciową z Player.Character.Alternatywnie możesz wywołać tę metodę z boku serwera Script, ale serwer musi posiadać własność sieciową postaci gracza.

Zobacz także Humanoid:SetStateEnabled() , aby włączyć lub wyłączyć określony stan, oraz Humanoid:GetState() , aby uzyskać obecny stan humanoida.

Parametry

The Enum.HumanoidStateType który ma być wykonany przez Humanoid .

Wartość domyślna: "None"

Zwroty

()

Przykłady kodu

This code, when placed inside a LocalScript in StarterPlayer.StarterCharacterScripts, will allow the player's character to perform a double jump.

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

()

Ta metoda sprawia, że Humanoid wyposaża dany Tool .

Poniższy przykład spowodowałby, że Player wyposaży narzędzie w Workspace o nazwie 'Narzędzie' .


local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
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 metoda zostanie wywołana, Humanoid najpierw automatycznie zdobędzie wszystkie Tools, które obecnie ma wyposażone.

Chociaż będą wyposażone, Tools dla których Tool.RequiresHandle jest prawdą nie będzie funkcjonować, jeśli nie mają uchwytu, niezależnie od tego, czy metoda ta jest używana do ich wyposażenia, czy nie.

Zobacz także:

Parametry

tool: Instance

The Tool do wyposażenia.

Wartość domyślna: ""

Zwroty

()

GetAccessories

Ta metoda zwraca tablicę Accessory obiektów, które nosi obecnie rodzic humanoida.Wszystkie takie obiekty Accessory zostaną włączone, niezależnie od tego, czy są przymocowane, czy nie.

Jeśli Humanoid nie ma obiektów Accessory, zostanie zwrócona pusta lista.

Zobacz także Humanoid:AddAccessory() aby przymocować Accessory do rodzica humanoida.


Zwroty

Zbiór Accessory obiektów, które są powiązane z rodzicem humanoida.

Przykłady kodu

This code sample will wait for accessories to fully load, print out how many there are, and then destroy them all.

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

Ta metoda zwraca kopię zapamiętanego HumanoidDescription obrazu, który opisuje jego obecny wygląd.Można go użyć do szybkiego określenia wyglądu postaci i przypisania jej wyglądu innym postaciom za pomocą metody Humanoid:ApplyDescription().

Zobacz także


Zwroty

GetBodyPartR15

Ta metoda zwraca to, co Enum.BodyPartR15 jest Part lub Enum.BodyPartR15.Unknown jeśli część nie jest częścią ciała R15.Ta metoda pozwala programistom odzyskiwać części ciała gracza niezależnie od tego, jakie są rzeczywiste nazwy części ciała, zamiast zwracać enum.

Można go używać w połączeniu z Humanoid:ReplaceBodyPartR15().Na przykład, jeśli część ciała gracza dotknie czegoś, ta funkcja zwróci instancję części.Wówczas programiści mogą sprawdzić, jaką część ciała była, taką jak głowa lub ramię.Następnie w zależności od tego, jaka była ta część, programiści mogą wykonać jakąś akcję rozgrywkową lub zastąpić ją inną częścią - być może pokazując obrażenia.

Ta metoda może być przydatna w grach, w których ważne jest położenie trafienia.Na przykład można go użyć do określenia, czy gracz został trafiony w nogę, a następnie spowolnić go w oparciu o obrażenia.

Parametry

part: Instance

Wskazana część jest sprawdzana, aby sprawdzić, czy jest to część ciała R15.

Wartość domyślna: ""

Zwroty

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

GetLimb

Ta metoda zwraca enumerację Enum.Limb, która jest powiązana z danym Part. Działa zarówno dla rigów R15 i R6, na przykład:


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

Zauważ, że Humanoid:GetLimb() wyrzuci błąd, jeśli rodzic części nie jest ustawiony na rodzica humanoida.

Parametry

part: Instance

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

Wartość domyślna: ""

Zwroty

The Enum.Limb część odpowiada.

Przykłady kodu

Put this in a LocalScript. The output will vary based on if the humanoid is R6 or R15.

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

Ta metoda zwraca obecną Enum.HumanoidStateType ludzkiego humanoida, opisującą aktywność, którą Humanoid wykonuje obecnie, taką jak skakanie lub pływanie.

Zobacz także Humanoid:SetStateEnabled() , aby włączyć lub wyłączyć określony stan, oraz Humanoid:ChangeState() , aby zmienić obecny stan humanoida.


Zwroty

Przykłady kodu

This code, when placed inside a LocalScript in StarterPlayer.StarterCharacterScripts, will allow the player's character to perform a double jump.

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

Metoda GetStateEnabled zwraca, czy Enum.HumanoidStateType jest włączona dla Humanoid.

Stan humanoida opisuje aktywność, którą obecnie wykonuje humanoid.

Kiedy konkretny Enum.HumanoidStateType jest wyłączony, humanoid nigdy nie może wejść w ten stan.Jest to prawda niezależnie od tego, czy próba zmiany stanu jest wykonywana za pomocą Humanoid:ChangeState() lub wewnętrznego kodu ludzkiego Roblox.

Zobacz także:

Parametry

Wartość domyślna: ""

Zwroty

Czy podany Enum.HumanoidStateType jest włączony.

Przykłady kodu

The code below sets the value of the humanoid jumping state to false using Humanoid:SetStateEnabled() and then retrieves and prints the value of this state (false) using Humanoid:GetStateEnabled().

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

()

Ta metoda powoduje, że Humanoid chodzi w określonym kierunku Vector3.

Domyślnie kierunek jest w warunkiświata, ale jeśli parametr relativeToCamera jest true, kierunek jest względem CFrame z CurrentCamera.Ponieważ kierunek negatywny Z jest uważany za "w przód" w Roblox, następujący kod sprawi, że ludzki chód pójdzie w kierunku CurrentCamera.


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

Gdy ta metoda zostanie wywołana, Humanoid przeniesie się, dopóki metoda nie zostanie ponownie wywołana.Jednak ta metoda zostanie nadpisana w następnym ramie przez domyślną skrypt kontroli postaci Roblox.Można tego uniknąć, wywołując tę funkcję za każdym razem za pomocą RunService:BindToRenderStep() (patrz przykład) lub zastąpiając skrypty kontroli w StarterPlayerScripts .

Metoda ta może być wywołana na serwerze, ale powinno to być zrobione tylko wtedy, gdy serwer ma własność sieciową z montażem humanoida.

Zobacz także Humanoid:MoveTo(), który prowadzi do punktu Humanoid spacer, a Player:Move() który skutecznie wzywa tę funkcję.

Parametry

moveDirection: Vector3

Kierunek, w którym należy iść.

Wartość domyślna: ""
relativeToCamera: boolean

Ustaw na true, jeśli parametr moveDirection powinien być traktowany względem CurrentCamera.

Wartość domyślna: false

Zwroty

()

Przykłady kodu

This code sample uses the Humanoid:Move() function to make the player's Character walk in the direction of the Camera. RunService:BindToRenderStep() is required here as the default control scripts will overwrite the player's movement every frame.

To run this sample, place it inside a LocalScript parented to StarterCharacterScripts.

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

()

Ta metoda powoduje, że Humanoid próbuje przejść do określonej lokalizacji, ustawiając właściwości Humanoid.WalkToPoint i Humanoid.WalkToPart.

Parametry lokalizacji i części odpowiadają temu, co i zostanie ustawione.

Jeśli parametr część zostanie określony, Humanoid nadal będzie próbował przejść do punktu.Jeśli jednak część się porusza, to punkt , do którego chodzi, przeniesie się do tej samej pozycji względem części .Jeśli parametr część nie jest określony, pozycja, do której chodzi Humanoid nie zmieni się.

Stan docelowy osiągnięcia celu humanoida wygasa po 8 sekundach, jeśli nie osiągnie swojego celu.Robi się to, aby NPC nie utknęły, czekając na Humanoid.MoveToFinished, aby wystrzelić.Jeśli nie chcesz, aby to się stało, powinieneś wielokrotnie wezwać MoveTo, aby czas wygaśnięcia był nadal resetowany.

MoveTo() kończy się, jeśli którykolwiek z poniższych warunków ma zastosowanie:

Parametry

location: Vector3

Pozycja, do której należy ustawić Humanoid.WalkToPoint.

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

The BasePart do ustawienia Humanoid.WalkToPart.

Wartość domyślna: "nil"

Zwroty

()

Przykłady kodu

This code sample includes a function that avoids the 8 second timeout on Humanoid:MoveTo() by calling Humanoid:MoveTo() again before the timeout elapses. It also includes an optional andThen parameter where developers can pass a function to be called when the humanoid reaches its destination.

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

()

Ta metoda usuwa wszystkie Accessory obiekty noszone przez rodzica humanoida. Dla gracza Characters usunie to wszystkie czapki i inne akcesoria.

Ta metoda usuwa obiekt Accessory poprzez wezwanie Instance:Destroy() na nich, co oznacza, że Parent akcesoriów jest ustawionych na nil i zablokowanych.

Zobacz także Humanoid:AddAccessory() , aby przymocować Accessory i Humanoid:GetAccessories() , aby uzyskać wszystkie obiekty Accessory należące do Humanoid .


Zwroty

()

Przykłady kodu

This code sample will wait for accessories to fully load, print out how many there are, and then destroy them all.

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

Automatycznie zastępuje część kończyny R15/Rthro w Humanoide inną częścią. Część jest automatycznie skalowana jak zwykle.

Ta metoda jest przydatna do modyfikowania postaci podczas gry lub budowania postaci z podstawowego szablonu.Powiązana metoda GetBodyPartR15 może się przydać podczas używania tej metody.

Nazwa części przekazanej powinna pasować do nazwy BodyPartR15 Enum przekazanej.

Parametry

Część ciała do zastąpienia. Enum.BodyPartR15.Unknown nie powiedzie się.

Wartość domyślna: ""
part: BasePart

The Class.Part``Class.Instance które zostaną przypisane do postaci.

Wartość domyślna: ""

Zwroty

SetStateEnabled

()

Ta metoda ustawia, czy dany Enum.HumanoidStateType jest włączony dla Humanoid.Kiedy wyłączono określone Enum.HumanoidStateType, Humanoid nigdy nie może wejść w to stan.Jest to prawda niezależnie od tego, czy próba zmiany stanu jest wykonywana za pomocą Humanoid:ChangeState() lub wewnętrznego kodu Roblox Humanoid.

Zauważ, że używanie SetStateEnabled() na serwerze nie powiela zmiany do klienta, ani odwrotnie.

Parametry

The Enum.HumanoidStateType do włączenia lub wyłączenia.

Wartość domyślna: ""
enabled: boolean

true jeśli ma być włączone state jeśli false ma być wyłączone, state jeśli ma być wyłączone.

Wartość domyślna: ""

Zwroty

()

Przykłady kodu

The following sample will require a one second cooldown after a Humanoid has landed before it is able to jump again.

To try this sample, place it inside a LocalScript in StarterCharacterScripts|StarterPlayer.StarterCharacterScripts.

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

()

Ta metoda obniża Humanoid.Health z Humanoid o podanych kwotę jeśli nie jest chroniona przez ForceField

Ta metoda akceptuje ujemne wartości dla parametru kwoty.Zwiększy to Humanoid.Health ludzkiegooida.Jednak będzie to miało sens tylko wtedy, gdy nie ma obecnego ForceField .

W jaki sposób pola siły chronią przed obrażeniami TakeDamage

A Humanoid jest uważany za chroniony przez ForceField jeśli ForceField spełnia jedno z poniższych kryteriów:

Aby zadać obrażenia Humanoid niezależnie od obecnych ForceFields, ustaw Humanoid.Health bezpośrednio.

Aby uzyskać więcej informacji o tym, jak ForceFields chronić Humanoids zobacz stronę ForceField.

Parametry

amount: number

Obrażenia lub kwota, którą należy odliczyć od Humanoid.Health.

Wartość domyślna: ""

Zwroty

()

Przykłady kodu

This code, put in a LocalScript, would make the local player take 99 damage only if a ForceField wasn't present.

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

()

Ta metoda zdjęwa każdą Tool obecnie wyposażoną przez Humanoid

Niewyposażony Tool zostanie przypisany do Backpack związanego z Player związanego z Humanoid.

Jeśli nie zostanie wyposażony żaden Tool, ta metoda nic nie zrobi.

Chociaż Tools może być wyposażony przez NPC (Non Player Characters), ta metoda działa tylko na Humanoids z odpowiednim Player.Dzieje się tak, ponieważ potrzebny jest obiekt Backpack, aby przydzielić nieuzbrojonemu Tool .

Zobacz także:


Zwroty

()

Przykłady kodu

The following sample will bind the U key to unequip any Tool|Tools the Player currently has equipped.

To use this sample, place it inside a LocalScript within StarterPlayerScripts|StarterPlayer.StarterPlayerScripts.

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

()
Wynik

Ta metoda poddania sprawia, że wygląd postaci pasuje do wyglądu przekazanego w HumanoidDescription.Kopia przekazanej HumanoidDescription jest przechowywana jako HumanoidDescription dla Humanoid.

Metoda ta jest optymalizowana poprzez założenie, że tylko ta metoda jest używana do zmiany wyglądu postaci, a żadne zmiany nie są dokonywane za pomocą innych środków między wezwaniami.Jeśli dokonane zostaną zmiany w charakterze między wezwaniami, wówczas ta metoda może nie sprawić, że charakter odzwierciedla przekazane w HumanoidDescription dokładnie.Jeśli chcesz używać tej metody w połączeniu z innymi sposobami aktualizowania postaci, Humanoid:ApplyDescriptionReset() zawsze zapewni, że postać odzwierciedla przekazane w HumanoidDescription .

Zobacz także

Parametry

humanoidDescription: HumanoidDescription

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

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

Zwroty

()

ApplyDescriptionReset

()
Wynik

Ta metoda poddania sprawia, że wygląd postaci pasuje do wyglądu przekazanego w HumanoidDescription, nawet po zmianach zewnętrznych.Kopia przekazanej HumanoidDescription jest przechowywana jako HumanoidDescription dla Humanoid.

Ta metoda zawsze zapewni, że postać odzwierciedla przekazane w HumanoidDescription , nawet jeśli dokonano zmian w postaci nie korzystającej z systemu HumanoidDescription (na przykład nie używając ApplyDescriptionReset() lub ApplyDescription() ).Jest to w przeciwieństwie do ApplyDescription(), które jest zoptymalizowane i może nieprawidłowo zastosować HumanoidDescription, jeśli znak został zmieniony za pomocą innych środków niż za pośrednictwem systemu HumanoidDescription.

Parametry

humanoidDescription: HumanoidDescription

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

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

Zwroty

()

PlayEmote

Wynik

Jeśli emotka nie może zostać odtworzona, ponieważ emotkaName nie znajduje się w HumanoidDescription, metoda ta wyświetli błąd.Metoda zwróci prawdę, aby wskazać, że emotka została pomyślnie odtworzona.

Parametry

emoteName: string

nazwa emotki do grać.

Wartość domyślna: ""

Zwroty

udnio odtworzono.

Zdarzenia

ApplyDescriptionFinished

Parametry

description: HumanoidDescription

Climbing

Wybucha, gdy prędkość, z jaką wzrasta Humanoid zmienia się.

Humanoids może wspinać się po drabinach zrobionych z Parts lub TrussParts.

Humanoids wspinanie się na 70% ich Humanoid.WalkSpeed .

To wydarzenie nie zawsze będzie wystrzeliwane z prędkością 0, gdy Humanoid przestanie wspinanie się.

Zobacz także:

Parametry

speed: number

Prędkość, z jaką Humanoid obecnie wspinają się.


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

To wydarzenie wystrzeliwuje się, gdy Humanoid umiera, zwykle gdy Humanoid.Health osiąga 0.Może to być spowodowane albo odłączeniem ich głowy od ich Humanoid.Torso, albo bezpośrednim ustawieniem właściwości zdrowia.

To wydarzenie będzie wystrzeliwane tylko wtedy, gdy jest potomkiem . Jeśli jest wyłączone, nie będzie wystrzeliwane.


Przykłady kodu

The code below would print the player's name, followed by "has died!", whenever a player dies. For example, if the player was named "Shedletsky", "Shedletsky has died!" would be printed to the output when they died.

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 uruchamia się, gdy Humanoid wchodzi i opuszcza FallingDown``Enum.HumanoidStateType .

The Humanoid wejdzie do stanu GettingUp po 3 sekundach, gdy stan FallingDown zostanie włączony.Kiedy to się wydarzy, to wydarzenie wystrzeli z aktywną wartością aktywną wartością fałsz i wystrzeli z aktywną wartością prawdą .

Parametry

active: boolean

Opisuje, czy Humanoid wchodzi lub opuszcza FallingDown``Enum.HumanoidStateType.


FreeFalling

To wydarzenie wystrzeliwuje się, gdy Humanoid wchodzi lub wychodzi z Freefall``Enum.HumanoidStateType.

Parametr aktywny reprezentuje to, czy Humanoid wchodzi lub wychodzi ze stanu Freefall.

Chociaż stan kończy się ogólnie, gdy dotrze do ziemi, to wydarzenie może wystrzelić z aktywnym równym fałszu , jeśli stan zostanie zmieniony, gdy spada.Z tego powodu powinieneś używać Humanoid.StateChanged i słuchać stanu Landed, aby pracować, gdy Humanoid wyląduje.

Parametry

active: boolean

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


GettingUp

To wydarzenie wystrzeliwuje się, gdy Humanoid wchodzi lub opuszcza Enum.HumanoidStateType.GettingUp stan, stan przejściowy, który jest aktywowany krótko po wejściu Humanoid w stan FallingDown (3 sekund) lub Ragdoll (1 sekund) stanów.

Kiedy próbuje powrócić, to wydarzenie najpierw wystrzeli z parametrem przed krótkim czasem ponownie wystrzelić z parametrem .

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

Parametry

active: boolean

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


HealthChanged

To wydarzenie wystrzeliwuje się, gdy zmienia się Humanoid.Health .Jednak nie strzeli, jeśli zdrowie rośnie z wartością równą lub większą niż Humanoid.MaxHealth.

Kiedy Humanoid.Health osiągnie zero, Humanoid umrze, a wydarzenie Humanoid.Died wybuchnie. To wydarzenie wybuchnie z wartością zera.

Parametry

health: number

Nowa wartość Humanoid.Health .


Przykłady kodu

The following example determines the change in health, printing it to the output. It will only work in a LocalScript.

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)

This code sample allows you to create a simple color-changing health bar using two nested Frames. Paste this into a LocalScript on the inner frame.

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

To wydarzenie wystrzeliwuje się, gdy Humanoid wchodzi i opuszcza Jumping``Enum.HumanoidStateType .

Kiedy skok wystąpi, to wydarzenie uruchamia się z parametrem przed krótkim czasem ponownie wystrzelić z parametrem .Ten drugi strzał nie odpowiada lądowaniu Class.Humanoid``Landed``Enum.HumanoidStateType korzystającemu z Humanoid.StateChanged .

Możesz wyłączyć skakanie za pomocą funkcji Humanoid:SetStateEnabled().

Parametry

active: boolean

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


MoveToFinished

To wydarzenie wystrzeliwuje się, gdy Humanoid kończy chód do celu ogłoszonego przez Humanoid.WalkToPoint i Humanoid.WalkToPart właściwości.

Właściwości Humanoid.WalkToPoint i Humanoid.WalkToPart można ustawić indywidualnie lub za pomocą funkcji Humanoid:MoveTo().

Jeśli Humanoid dotrze do celu w ciągu 8 sekund, wydarzenie to powróci z osiągniętym jako prawdą.Jeśli cel nie zostanie osiągnięty w ciągu 8 sekund, Humanoid przestanie chodzić, a dotarł będzie fałszywy.Ten wygaśnięcie może zostać zresetowany, wywołując ponownie Humanoid:MoveTo() w okresie wygaśnięcia.

Parametry

reached: boolean

Boolean wskazujący, czy osiągnięto Humanoid jest celem.Prawda, jeśli Humanoid osiągnie swój cel, fałsz, jeśli spacer się skończył przed osiągnięciem celu.


Przykłady kodu

This code sample includes a function that avoids the 8 second timeout on Humanoid:MoveTo() by calling Humanoid:MoveTo() again before the timeout elapses. It also includes an optional andThen parameter where developers can pass a function to be called when the humanoid reaches its destination.

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

To wydarzenie wystrzeliwuje się, gdy Humanoid wchodzi lub wychodzi z PlatformStanding``Enum.HumanoidStateType.

Gdy jest w stanie , właściwość będzie prawdą .

Choć Humanoid.PlatformStand jest ustawiony na prawdę, Humanoid nie będzie mógł się poruszać. Aby uzyskać więcej informacji, zobacz stronę dla Humanoid.PlatformStand .

PlatformStand Enum.HumanoidStateType był powiązany z teraz wyłączoną częścią Platform. Mimo to nadal może być używany przez programistów.

Parametry

active: boolean

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


Ragdoll

To wydarzenie wystrzeliwuje się, gdy Humanoid wchodzi lub wychodzi z Ragdoll``Enum.HumanoidStateType.

Parametr active będzie miał wartość true lub false w celu wskazania wejścia lub wyjścia.

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

Zobacz także:

Parametry

active: boolean

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


Running

To wydarzenie wystrzeliwuje się, gdy prędkość, przy której uruchamiane są zmiany Humanoid, zmienia się.

Podczas uruchamiania Humanoids pokrycia średnio ich Humanoid.WalkSpeed w szpilkach na sekundę.

Kiedy Humanoid przestanie uruchamiać to wydarzenie, wystrzeli z prędkością 0.

Zobacz także:

Parametry

speed: number

Prędkość, z jaką działa Humanoid .


Przykłady kodu

Demonstrates connecting to the Humanoid.Running event. The event is connected to every player's humanoid that joins.

The function connected will print whether or not the humanoid is running based on the speed.

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

To wydarzenie wystrzeliwuje, gdy Humanoid siedzi lub wstaje z Seat lub VehicleSeat.

Kiedy postać wchodzi w kontakt z siedzeniem, są one przymocowane do siedzenia i odtwarzana jest animacja siedzenia.Aby uzyskać więcej informacji na ten temat, zobacz stronę Seat.

  • Jeśli postać siedzi, parametr active będzie prawdziwy i currentSeatPart będzie to siedzenie, na którym obecnie siedzą.
  • Jeśli postać wstała z siedzenia, parametr active będzie fałszywy i currentSeatPart będzie nil.

Zobacz także:

  • Humanoid.Sit , który wskazuje, czy Humanoid obecnie siedzi
  • Humanoid.SeatPart , który wskazuje na siedzenie, na którym obecnie siedzi Humanoid, jeśli takie istnieje.

Parametry

active: boolean

Prawda, jeśli Humanoid siedzi.

currentSeatPart: BasePart

Siedzenie, na którym Humanoid siedzisz, jeśli siedzisz.


Przykłady kodu

This code sample demonstrates when the local player's Character sits down or stands up. It should be placed inside a LocalScript within StarterCharacterScripts in order to run when the player's character spawns in.

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

To wydarzenie wystrzeliwuje, gdy zmieni się stan Humanoid.

Ponieważ nie ma stanu "bezczynność" humanoida, powinieneś zamiast tego użyć wydarzenia Humanoid.Running lub wysłuchać RootPart części Velocity, aby dowiedzieć się, kiedy Humanoid stoi w miejscu.

Zobacz także

Parametry

Poprzedni wpisywaćstanu humanoida.

wpisywaćobecnego stanu humanoida.


Przykłady kodu

Emits particles from the local player's Player.Character when they jump. To try this code sample, place it inside a LocalScript parented to StarterCharacterScripts.

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)

The following sample will require a one second cooldown after a Humanoid has landed before it is able to jump again.

To try this sample, place it inside a LocalScript in StarterCharacterScripts|StarterPlayer.StarterCharacterScripts.

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 pytaniu wraz z bool wskazującym, czy to stan jest teraz włączony.

Zobacz także:

Parametry

The Enum.HumanoidStateType dla którego zmieniono włączony stan.

isEnabled: boolean

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


Przykłady kodu

When a humanoid state changes for the Players.LocalPlayer, the code below prints whether the state has been enabled or disabled.

This code should work as expected when placed in a LocalScript.

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

To wydarzenie nie wystrzeliwuje, gdy Humanoid przechyla się i nie powinno być używane przez programistów

To wydarzenie jest uruchamiane, gdy Humanoid wchodzi lub wychodzi z StrafingNoPhysics``Enum.HumanoidStateType.

Kiedy Humanoid wchodzi w stan StrafingNoPhysics ten wydarzenie wystrzeli z aktywnym parametrem aktywnym**prawdą.Wydarzenie zostanie ponownie uruchomione z aktywnym równym fałszu gdy Humanoid opuści stan StrafingNoPhysics.

To wydarzenie jest związane ze stanem i nie strzela, gdy nie porusza się wzdłuż kąta, w którym jest skierowany.Ten stan jest obecnie niewykorzystywany, jeśli jest ustawiony za pomocą Humanoid:ChangeState() stan powróci do RunningNoPhysics.

Parametry

active: boolean

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


Swimming

To wydarzenie wystrzeliwuje się, gdy prędkość, z jaką pływa Humanoid w wodzie zmienia się Terrain.

Humanoids pływaj w 87,5% ich Humanoid.WalkSpeed .

To wydarzenie nie zawsze będzie wystrzeliwane z prędkością 0, gdy Humanoid przestanie pływać.

Zobacz także:

Parametry

speed: number

Prędkość, z jaką Humanoid pływa obecnie.


Touched

To wydarzenie wystrzeliwuje się, gdy jedna z kończyn humanoida wchodzi w kontakt z inną BasePart.Podana jest BasePart część, której kończyna dotyka, wraz z samą kończyną.

To wydarzenie nie wystrzeli, gdy kończyny należące do Humanoid wejdą w kontakt z samymi sobą.

Alternatywy

Chociaż wydarzenie Humanoid.Touched jest przydatne, powinieneś rozważyć, czy istnieją alternatywy lepiej pasujące do Twoich potrzeb.

  • W większości przypadków zaleca się połączenie wydarzenia BasePart.Touched zainteresowania BaseParts zamiast tego, ponieważ wydarzenie Humanoid.Touched będzie stale wystrzeliwane, gdy humanoid się porusza.Na przykład w graw dodgeball bardziej praktyczne byłoby połączenie wydarzenia Touched dla kulek, zamiast używać Humanoid.Touched.
  • Podczas próby ustalenia, kiedy Humanoid wylądował na ziemi, wydarzenie Humanoid.StateChanged jest bardziej odpowiednie.Alternatywnie możesz sprawdzić Humanoid.FloorMaterial, czy humanoid stoi na jakimkolwiek materiale nie powietrznym.

Notatki

Parametry

touchingPart: BasePart

The BasePart the Humanoid wszedł w kontakt z.

humanoidPart: BasePart

Kończyna Humanoid, która została dotknięta.


Przykłady kodu

When placed inside a Player.Character model this code will give a player the 'Midas touch'. Everything their character touches will change to gold.

When the Humanoid dies, this change is undone and the golden BasePart|BaseParts are returned to their original state.

To test this out, place this code inside a Script and place it in StarterCharacterScripts|StarterPlayer.StarterCharacterScripts.

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)