Humanoid

Hiển Thị Bản Đã Lỗi Thời

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Humanoid là một đối tượng đặc biệt cung cấp chức năng của một nhân vật cho các mô hình.Nó cấp cho mô hình khả năng đi bộ vật lý và tương tác với các thành phần khác nhau của trải nghiệm Roblox. Humanoids luôn được cha mẹ bên trong một Model , và mô hình dự kiến sẽ là một tập hợp của BasePartMotor6D ; phần gốc của tập hợp dự kiến sẽ được đặt tên là HumanoidRootPart .Nó cũng mong đợi một phần có tên là Head được kết nối với phần thân của nhân vật, trực tiếp hoặc gián tiếp.Mặc định, có hai loại nhân vật chính thức được cung cấp bởi Roblox, mỗi loại có bộ quy tắc riêng:

R6

  • Một cấu hình nhân vật cơ bản sử dụng 6 phần cho các chi.
  • Phần Head phải được gắn vào một phần có tên là Torso , hoặc Humanoid sẽ chết ngay lập tức.
  • Các xuất hiện của BodyPart được áp dụng bằng cách sử dụng CharacterMesh đối tượng.
  • Một số thuộc tính, chẳng hạn như Humanoid.LeftLegHumanoid.RightLeg, chỉ hoạt động với R6.

R15

  • Phức tạp hơn R6, nhưng cũng rất linh hoạt và bền vững.
  • Sử dụng 15 bộ phận cho các chi.
  • Phần Head phải được gắn vào một phần có tên là UpperTorso hoặc Humanoid sẽ chết ngay lập tức.
  • Các xuất hiện của BodyPart phải được tổng hợp trực tiếp.
  • Có thể được thay đổi kích thước năng động bằng cách sử dụng các đối tượng đặc biệt NumberValue bên trong Humanoid.
  • Humanoid sẽ tự động tạo các đối tượng có tên bên trong mỗi chi.
  • Nếu một NumberValue được cha trong Humanoid và được đặt tên là một trong những điều theo dõi, nó sẽ được sử dụng để kiểm soát chức năng phóng to:
    • Tỉ lệ độ sâu cơ thể
    • Tỉ lệ chiều cao cơ thể
    • Tỷ lệ chiều rộng cơ thể
    • Tỉ lệ đầu

Mẫu mã

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)

Tóm Tắt

Thuộc Tính

Phương Pháp

Sự Kiện

Thuộc Tính

AutoJumpEnabled

Đọc Song Song

AutoJumpEnabled đặt xem có hay không có Humanoid sẽ cố gắng tự động nhảy qua chướng ngại vật mà nó đang đi tới.

Hiện tại, tính năng này chỉ hoạt động khi các điều kiện sau đây là đúng:

  • Mô hình nhân vật của Humanoid là Player.Character của một Player .
  • Người chơi trong câu hỏi đang sử dụng điều khiển cảm ứng.

Khi nhân vật của một người chơi xuất hiện, giá trị của thuộc tính phù hợp với thuộc tính Player.AutoJumpEnabled của người chơi - mà lại phù hợp với thuộc tính StarterPlayer.AutoJumpEnabled .

Mẫu mã

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

Đọc Song Song

Tính năng AutoRotate mô tả xem Humanoid có tự động quay theo hướng mà họ đang di chuyển hay không.Khi được đặt thành true, mô hình nhân vật sẽ dần dần quay về hướng di chuyển của họ khi Nhân Bản đi dạo xung quanh.Khi được đặt thành false, mô hình nhân vật sẽ vẫn cố định trong vòng xoay hiện tại, trừ khi một lực xoay được áp dụng cho HumanoidRootPart.

Nếu mô hình nhân vật là nhân vật của một người chơi, thì hành vi của sự xoay của Humanoid bị ảnh hưởng bởi thuộc tính RotateType của UserGameSetting.

Khi tính năng AutoRotate được đặt thành true, tính năng RotateType có các hiệu ứng sau trên sự xoay của Humanoid:


<th>Hành vi</th>
<th>Bối cảnh</th>
</tr>
</thead>
<tbody>
<tr>
<td>Di chuyểnRelative</td>
<td />
<td />
</tr>
<tr>
<td>Máy ảnhRelative</td>
<td>Nhân vật sẽ xoay để hướng về phía máy ảnh.</td>
<td>Người chơi có máy ảnh được phóng to vào người thứ nhất, hoặc họ đang ở trong chế độ khóa ca.</td>
</tr>
</tbody>
Loại xoay

Mẫu mã

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

Đọc Song Song

Humanoid có sáu giá trị thước con bao gồm BodyDepthScale , BodyHeightScale , BodyProportionScale , BodyTypeScale , BodyWidthScale , HeadScale .Thay đổi giá trị của bất kỳ nguyên nhân nào cũng làm thay đổi các phần thân và phụ kiện của nhân vật, nhưng chỉ khi AutomaticScalingEnabled là đúng.

BreakJointsOnDeath

Đọc Song Song

Xác định xem khớp của con người có bị phá vỡ khi ở trạng thái Enum.HumanoidStateType.Dead hay không. Mặc định là true.

CameraOffset

Đọc Song Song

Thuộc tính CameraOffset xác định một khoảng trừ bị cho vị trí chủ đề của camera khi Camera.CameraSubject được đặt thành Humanoid này.

Offset được áp dụng trong không gian đối tượng, so với hướng của Humanoid's HumanoidRootPart .Ví dụ, một giá trị offset Vector3(0, 10, 0) bù trừ giá trị camera của người chơi lên 10 đinh tán ở trên hình người chơi humanoid.

Mẫu mã

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)
Đọc Song Song

Thuộc tính DisplayDistanceType kiểm soát hành vi khoảng cách của tên và sức khỏe của con người được hiển thị.Thuộc tính này được đặt bằng cách sử dụng enum Enum.HumanoidDisplayDistanceType với ba giá trị có sẵn, mỗi giá trị có bộ quy tắc riêng:

  • Khi được đặt thành Viewer , con người nhìn thấy tên/sức khỏe của các con người khác trong phạm vi của chính nó NameDisplayDistanceHealthDisplayDistance .
  • Khi được đặt thành , con người nhận kiểm soát hoàn toàn về tên và sức khỏe của mình thông qua các giá trị và của nó.
  • Khi được đặt thành None, tên và thanh sức khỏe của con người không xuất hiện dưới bất kỳ hoàn cảnh nào.

Xem Tên nhân vật/Hiển thị sức khỏe để có một hướng dẫn chi tiết về việc kiểm soát sự xuất hiện của tên nhân vật và thanh sức khỏe.

Mẫu mã

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

Đọc Song Song

DisplayName là một thuộc tính xác định tên hiển thị của Humanoid khi có thể nhìn thấy.Mặc định, một Humanoid mới sẽ có giá trị của một chuỗi trống.Nếu DisplayName là một chuỗi trống, hiển thị tên của humanoid sẽ mặc định cho tên của cha của humanoid.

Tải nhân vật người chơi

Khi người chơi tải nhân vật của họ, hoặc tự động hoặc thông qua việc sử dụng LoadCharacter() , Humanoid được tạo bởi động cơ sẽ có bộ thuộc tính DisplayName của nó được đặt cho tài sản của người chơi DisplayName.

Nhân vật khởi động và StarterHumanoid

Khi một Humanoid có tên StarterHumanoid được gán cho StarterPlayer , hoặc khi một Humanoid có mặt trong một Model có tên StarterCharacter , thuộc tính DisplayName sẽ được tôn trọng khi các Nhân vật được tải bởi Người chơi trong trò chơi.Động cơ sẽ chỉ thay thế tính chất DisplayName của Humanoid với tính chất DisplayName của người chơi nếu Humanoid.DisplayName của StarterHumanoid là một chuỗi trống.

EvaluateStateMachine

Đọc Song Song

FloorMaterial

Chỉ Đọc
Không Sao Chép
Đọc Song Song

Đây là một tính năng chỉ đọc mô tả Enum.Material đang đứng trên Humanoid hiện tại.Nó hoạt động với cả voxel thường PartsTerrain voxel.

Ví dụ mã bên dưới cho thấy cách lắng nghe khi thuộc tính này thay đổi bằng cách sử dụng Object:GetPropertyChangedSignal() .Khi vật liệu mà hình người đang đứng thay đổi, nó sẽ in ra một thông điệp chỉ ra vật liệu mới đang được đứng trên.


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

Cảnh báo

  • Khi Humanoid không đứng trên tầng, giá trị của thuộc tính này sẽ được đặt thành Không khí.
    • Điều này xảy ra vì các thuộc tính Enum không thể có giá trị trống.
    • Điều này có thể gây ra một số lẫn lộn nếu một phần có vật liệu được đặt thành Không Khí, mặc dù trong thực tế, các bộ phận không nên sử dụng vật liệu đó lúc đầu.
  • Mô hình nhân vật của Humanoid phải có thể va chạm với sàn, nếu không sẽ không được phát hiện.
    • Bạn không thể kiểm tra xem Humanoid có bơi với thuộc tính này hay không. Bạn nên sử dụng chức năng Humanoid:GetState() của nó thay thế.

Health

Không Sao Chép
Đọc Song Song

Thuộc tính này đại diện cho sức khỏe hiện tại của Humanoid .Giá trị bị giới hạn trong phạm vi từ 0 đến MaxHealth .Nếu hình người chết, thuộc tính này sẽ liên tục được đặt thành 0.

Lưu ý rằng chức năng TakeDamage() có thể được sử dụng để trừ từ Health thay vì đặt thuộc tính trực tiếp.

Hồi phục sức khỏe

Mặc định, một kịch bản hồi phục sức khỏe thụ động được tự động chèn vào humanoids.Điều này gây ra các nhân vật người chơi không chết tái sinh 1% của MaxHealth mỗi giây.Để vô hiệu hóa hành vi tái sinh này, thêm một hàng trống Script có tên là Sức khỏe vào StarterCharacterScripts .

Hiển thị thanh sức khỏe

Khi Health nhỏ hơn MaxHealth, thanh sức khỏe được hiển thị trong kinh nghiệm.Hành vi hiển thị của thanh sức khỏe phụ thuộc vào HealthDisplayDistanceHealthDisplayType.

Xem Tên nhân vật/Hiển thị sức khỏe để có một hướng dẫn chi tiết về việc kiểm soát sự xuất hiện của tên nhân vật và thanh sức khỏe.

Cái chết

Khi giá trị sức khỏe của nhân vật đạt 0, Humanoid tự động chuyển sang trạng thái Enum.HumanoidStateType.Dead.Trong trạng thái này, Health được khóa lại thành 0; tuy nhiên, không có lỗi hoặc cảnh báo nào để đặt Health của một con người nhân tạo chết thành một giá trị dương tích cực.

HealthDisplayDistance

Đọc Song Song

Thuộc tính này là một số được sử dụng cùng với thuộc tính DisplayDistanceType để kiểm soát khoảng cách từ đó thanh sức khỏe của một con người có thể được nhìn thấy.

Xem Tên nhân vật/Hiển thị sức khỏe để có một hướng dẫn chi tiết về việc kiểm soát sự xuất hiện của tên nhân vật và thanh sức khỏe.

Đọc Song Song

Tính năng này kiểm soát khi thanh sức khỏe của một con người được phép hiển thị.Mặc định, thuộc tính này được đặt thành DisplayWhenDamaged , khiến thanh sức khỏe chỉ hiển thị khi humanoid của Health nhỏ hơn thanh MaxHealth của nó.Nó cũng có thể được đặt thành AlwaysOn , khiến thanh sức khỏe luôn hiển thị, hoặc AlwaysOff , ngăn chặn nó không bao giờ hiển thị.

Lưu ý rằng tính năng này hoạt động độc lập với tính năng HealthDisplayDistance của con người ở khoảng cách nhất định, có trách nhiệm làm cho thanh sức khỏe biến mất.Nếu Humanoid.HealthDisplayType|HealthDisplayType được đặt thành AlwaysOn , nó vẫn sẽ biến mất tùy thuộc vào cách HealthDisplayDistance được cấu hình.

Xem Tên nhân vật/Hiển thị sức khỏe để có một hướng dẫn chi tiết về việc kiểm soát sự xuất hiện của tên nhân vật và thanh sức khỏe.

HipHeight

Đọc Song Song

Xác định khoảng cách (bằng đinh tán) khỏi mặt đất mà RootPart nên có khi con người đang đứng.The RigType ảnh hưởng đến cách thức mà thuộc tính này hoạt động.

Đối với các giàn R15, chiều cao eo phù hợp được đặt sẵn để đảm bảo chiều cao của RootPart là chính xác.Chiều cao của chân không được sử dụng.Chiều cao tổng thể của con người có thể được mô tả trong công thức sau:


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

Đối với các giàn R6, HipHeight thay vào đó mô tả một độ mờ đối tượng tương đối. Chiều cao tổng thể của con người có thể được mô tả trong công thức sau:


Height = LeftLeg.Size.Y + (0.5 * RootPart.Size.Y) + HipHeight
Không Sao Chép
Đọc Song Song

Nếu true , Humanoid nhảy với lực lên tương đương với giá trị của Humanoid.JumpPower hoặc chiều cao của Humanoid.JumpHeight , tùy thuộc vào giá trị của Humanoid.UseJumpPower .

JumpHeight

Đọc Song Song

Cung cấp kiểm soát về chiều cao của một nhảy Humanoid , trong đinh tán.Giá trị khởi động của thuộc tính này được xác định bởi giá trị của StarterPlayer.CharacterJumpHeight mà mặc định là 7.2.

Mặc dù đặt thuộc tính này thành 0 sẽ hiệu quả ngăn chặn con người không nhảy, nhưng được khuyến khích vô hiệu hóa nhảy bằng cách vô hiệu hóa trạng thái Enum.HumanoidStateType.Jumping qua Humanoid:SetStateEnabled().

Thuộc tính này chỉ xuất hiện trong cửa sổ Tính năng nếu Humanoid.UseJumpPower được đặt thành giả mạo , bởi nó sẽ không liên quan nếu không (thay vào đó, Humanoid.JumpPower được sử dụng).

JumpPower

Đọc Song Song

Xác định lượng lực lên bao nhiêu được áp dụng cho Humanoid khi nhảy.Giá trị khởi động của thuộc tính này được xác định bởi giá trị của StarterPlayer.CharacterJumpPower mà mặc định là 50 và bị giới hạn giữa 0 và 1000.Lưu ý rằng nhảy cũng bị ảnh hưởng bởi thuộc tính Workspace.Gravity định vị tốc độ gia tốc do trọng lực.

Mặc dù đặt thuộc tính này thành 0 sẽ hiệu quả ngăn chặn con người không nhảy, nhưng được khuyến khích vô hiệu hóa nhảy bằng cách vô hiệu hóa trạng thái Enum.HumanoidStateType.Jumping qua Humanoid:SetStateEnabled().

Thuộc tính này chỉ xuất hiện trong cửa sổ Tính năng nếu Humanoid.UseJumpPower được đặt thành đúng , bởi vì nó sẽ không liên quan nếu không (thay vào đó, Humanoid.JumpHeight được sử dụng).

MaxHealth

Đọc Song Song

Giá trị tối đa của một humanoid's Health .

Giá trị của thuộc tính này được sử dụng cùng với thuộc tính Health để thay đổi kích thước màn hình hiển thị sức khỏe mặc định.Khi thanh sức khỏe của một humanoid Health đạt đến MaxHealth, thanh sức khỏe có thể không được hiển thị, tùy thuộc vào thuộc tính HealthDisplayType của nó.

MaxSlopeAngle

Đọc Song Song

Tính chất này xác định góc độ dốc tối đa mà một humanoid có thể leo lên.Nếu góc của một dốc lớn hơn góc tối đa của một humanoid, chúng sẽ trượt xuống dốc.

Khi một nhân vật xuất hiện, thuộc tính này được đặt theo giá trị của StarterPlayer.CharacterMaxSlopeAngle .

Giá trị của thuộc tính này bị giới hạn ở các giá trị từ 0° đến 89°.Nó mặc định là 89°, vì vậy humanoids có thể leo lên hầu hết mọi dốc mà họ muốn theo mặc định.

Mẫu mã

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

Chỉ Đọc
Không Sao Chép
Đọc Song Song

Hướng di chuyển là một tính năng chỉ đọc mô tả hướng mà Humanoid đang đi, như một vectơ đơn vị hoặc vectơ dài bằng không.Hướng được mô tả trong không gian thế giới.

Bởi vì thuộc tính này chỉ đọc, nó không thể được đặt bởi một Script hoặc LocalScript .

Mẫu mã

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

Đọc Song Song

Thuộc tính NameDisplayDistance là một số được sử dụng cùng với thuộc tính Humanoid.DisplayDistanceType để kiểm soát khoảng cách từ đó tên của một con người có thể được nhìn thấy.

Xem Tên nhân vật/Hiển thị sức khỏe để có một hướng dẫn chi tiết về việc kiểm soát sự xuất hiện của tên nhân vật và thanh sức khỏe.

NameOcclusion

Đọc Song Song

Kiểm soát xem tên và thanh sức khỏe của một con người có thể được nhìn thấy phía sau các bức tường hoặc các đối tượng khác hay không.Thuộc tính này là một giá trị Enum.NameOcclusion và có thể được cấu hình để bỏ tất cả các tên, tên kẻ thù hoặc vô hiệu hóa việc bỏ hoàn toàn.

Trong trường hợp LocalPlayer không có Humanoid liên quan đến nó, tính chất này thay vào đó áp dụng cho chủ đề Humanoid .

Xem Tên nhân vật/Hiển thị sức khỏe để có một hướng dẫn chi tiết về việc kiểm soát sự xuất hiện của tên nhân vật và thanh sức khỏe.

Mẫu mã

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

Đọc Song Song

Xác định xem Humanoid có đang ở trạng thái Enum.HumanoidStateType.PlatformStanding hay không.Khi đúng, Humanoid ở trong trạng thái mà nó đang rơi tự do và không thể di chuyển.Tình trạng này hành xử tương tự như ngồi, ngoại trừ việc nhảy không giải phóng humanoid khỏi trạng thái.

RequiresNeck

Đọc Song Song

Cho phép các nhà phát triển vô hiệu hóa hành vi mà một người chơi Character|character chết nếu Cổ Motor6D bị xóa hoặc thoát kết nối ngay cả trong giây lát.Thuộc tính này mặc định thành true.

Đọc Song Song

RigType mô tả xem có đang sử dụng Humanoid định dạng nhân vật di sản R6 hay không, hoặc định dạng nhân vật R15 mới hơn.

R6 giàn sử dụng 6 có thể nhìn thấy Parts trong khi R15 giàn sử dụng 15 có thể nhìn thấy Parts .Các giàn R15 có nhiều khớp hơn các giàn R6, làm cho chúng trở nên linh hoạt hơn nhiều khi được hoạt hình.

Lưu ý rằng nếu thuộc tính này được đặt sai, Humanoid sẽ không hoạt động đúng cách.Ví dụ, nếu R15 humanoid's RigType được đặt thành R6, Humanoid sẽ chết vì không có BasePart được gọi Torso được kết nối với một BasePart được gọi Đầu .

RootPart

Chỉ Đọc
Không Sao Chép
Đọc Song Song

Một tham chiếu đến đối tượng HumanoidRootPart của con người, phần điều khiển rễ của Humanoid kiểm soát chuyển động của một con người thông qua thế giới 3D.Phần này thường vô hình.

Đối với các nhân vật R15, Model.PrimaryPart của mô hình Player.Character được đặt thành HumanoidRootPart .

Đối với các nhân vật R6, Model.PrimaryPart được đặt vào phần Head .

SeatPart

Chỉ Đọc
Không Sao Chép
Đọc Song Song

SeatPart là một tham chiếu đến chỗ ngồi mà một Humanoid hiện đang ngồi, nếu có.Giá trị của thuộc tính này có thể là một Seat , hoặc một VehicleSeat .Nó sẽ là nil nếu Humanoid hiện không đang ngồi trong một chỗ ngồi.

Ghi chú:

  • Đối với một bool mô tả xem liệu Humanoid hiện đang ngồi hay không, xem Humanoid.Sit
Đọc Song Song

Thuộc tính Sit là một boolean cho thấy liệu Humanoid có đang ngồi hay không.Humanoids có thể bị buộc vào trạng thái ngồi bằng cách đặt giá trị của thuộc tính này thành true.Nếu Humanoid không được gắn vào một chỗ ngồi trong trạng thái ngồi của nó, nó sẽ vấp ngã mà không va chạm vào chân của nó.Một Humanoid có thể thoát khỏi trạng thái ngồi bằng cách nhảy.

Ghi chú:

TargetPoint

Đọc Song Song

Không sử dụng Đặc tính này chỉ hoạt động với Chế độ Thử nghiệm được bật, đã bị ngừng hoàn toàn.

Thuộc tính này mô tả vị trí 3D trong không gian mà Player điều khiển Humanoid cuối cùng đã được nhấp với một Tool được trang bị.

Tính năng này chủ yếu được sử dụng bởi các công cụ cổ điển để xác định những gì một humanoid đang nhắm khi họ kích hoạt một công cụ.Nếu bạn cho một NPC một phóng tên lửa cổ điển, thiết lập Điểm mục tiêu của họ, và sau đó gọi chức năng Tool:Activate(), bạn có thể khiến NPC bắn tên lửa vào điểm mục tiêu.

UseJumpPower

Đọc Song Song

Khi một nhân vật xuất hiện, thuộc tính này được đặt theo giá trị của StarterPlayer.CharacterUseJumpPower mà mặc định là true.

Khi nhảy, với giá trị này được đặt thành true, giá trị Humanoid.JumpHeight được sử dụng để đảm bảo nhảy humanoid lên đến độ cao đó.Với giá trị này được đặt thành false, giá trị Humanoid.JumpPower được sử dụng để áp dụng một lực lên.

WalkSpeed

Đọc Song Song

Thuộc tính này mô tả tốc độ mà Humanoid có thể đi bộ, bằng đơn vị stud mỗi giây.Nó mặc định cho giá trị của StarterPlayer.CharacterWalkSpeed (16), có nghĩa là một nhân vật người chơi có thể di chuyển 16 đinh tán trong bất kỳ hướng nào mỗi giây.

Ghi chú

  • Khi được kiểm soát trên thiết bị di động hoặc gamepad, một hình người có thể đi chậm hơn so với WalkSpeed nếu thanh điều khiển đang được di chuyển chỉ một độ dốc từ trung tâm.
  • Bạn có thể đóng băng một humanoid tại chỗ bằng cách đặt WalkSpeed đến 0; điều này ngăn chặn người điều khiển di chuyển nó thông qua các cơ chế di chuyển mặc định.
  • Tập lệnh hoạt hình mặc định thu nhỏ các hoạt hình di chuyển của con người dựa trên tốc độ di chuyển nhanh như thế nào so với tốc độ mặc định là 16 đinh tán/giây.
  • Tốc độ mà Humanoid hiện đang đi bộ có thể được thu được bằng cách sử dụng sự kiện Running.

WalkToPart

Đọc Song Song

WalkToPart là một tham chiếu đến một phần mà Humanoid đang cố gắng tiếp cận.Thuộc tính này thường được đặt khi một phần được truyền là tham số thứ hai của chức năng Humanoid:MoveTo() của Humanoid.

Khi WalkToPart được đặt và một hình người đang cố gắng chạm đến phần, nó sẽ tiếp tục cập nhật mục tiêu Vector3 của nó để là vị trí của phần, cộng với Humanoid.WalkToPoint được dịch trong không gian đối tượng so với sự xoay của phần.

Nó có thể được mô tả trong Luau như:


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

Cảnh báo

  • Đặt giá trị của WalkToPart không đủ để khiến một con người bắt đầu theo dõi một phần.
  • Humanoid được yêu cầu bắt đầu cố gắng đạt được mục tiêu khi giá trị của WalkToPoint thay đổi.
  • Điều này có thể thay đổi trong tương lai.
  • Tình trạng tiếp cận mục tiêu của một con người sẽ hết hạn sau 8 giây nếu nó không đạt được mục tiêu của nó.
  • Việc này được thực hiện để NPC không bị mắc kẹt chờ đợi Humanoid.MoveToFinished để bắn.
  • Nếu bạn không muốn điều này xảy ra, bạn nên lặp lại lệnh MoveTo để thời gian chờ sẽ tiếp tục được thiết lập lại.

WalkToPoint

Đọc Song Song

WalkToPoint mô tả vị trí 3D trong không gian mà một humanoid đang cố gắng đạt được, sau khi đã được yêu cầu làm như vậy bởi chức năng Humanoid:MoveTo() của Humanoid.

Nếu Humanoid.WalkToPart của một con người được cài đặt, mục tiêu được đặt bằng cách biến đổi WalkToPoint so với vị trí và độ xoay của các bộ phận.Nếu WalkToPart không được cài đặt, thì hình người sẽ cố gắng đến được vị trí 3D được chỉ định bởi WalkToPoint trực tiếp.

Cảnh báo

  • Giá trị của WalkToPoint phải được thay đổi thành một giá trị khác để con người bắt đầu đi bộ tới nó.
  • Nếu bạn muốn tạo một bước đi con người đến 0,0,0 , bạn nên sử dụng chức năng MoveTo của Humanoid.
  • Điều này có thể thay đổi trong tương lai.
  • Tình trạng tiếp cận mục tiêu của một con người sẽ hết hạn sau 8 giây nếu nó không đạt được mục tiêu của nó.
  • Việc này được thực hiện để NPC không bị mắc kẹt chờ đợi Humanoid.MoveToFinished để bắn.
  • Nếu bạn không muốn điều này xảy ra, bạn nên lặp lại lệnh MoveTo để thời gian chờ sẽ tiếp tục được thiết lập lại.

Mẫu mã

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)

Phương Pháp

AddAccessory

()

Phương pháp này gắn Accessory được định cấu vào cha của humanoid.

Khi phương pháp này được gọi, một được gắn vào nhân vật bằng cách tìm kiếm một trong cha của con người có cùng tên với một trong tay cầm của phụ kiện có cùng tên với một ở đầu truy cập.Nếu một được tìm thấy, phần Xử lý sẽ được kết nối với cha của Attachment bằng một Weld , và hàn sẽ được cấu hình để Attachments chiếm cùng một không gian.

Nếu không thể tìm thấy Attachment yêu cầu, thì Accessory sẽ vẫn là cha của con người nhưng nó sẽ không được kết nối.

Thông thường, các liên kết phụ được tạo trên máy chủ, nhưng chúng có thể được tạo trên máy khách trong một số trường hợp.Trong những tình huống này, các cuộc gọi bên khách tới AddAccessory() có thể không phải lúc nào cũng sản xuất hành vi mong muốn và bạn có thể sử dụng BuildRigFromAttachments() để buộc sản phẩmhàn mong đợi.

Tham Số

accessory: Instance

The Accessory để được gắn kết.

Giá Trị Mặc Định: ""

Lợi Nhuận

()

Mẫu mã

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

()

Phương pháp này tổng hợp một cây của Motor6D kết nối cho Humanoid . Motor6D kết nối là bắt buộc cho việc phát lại của Animations .

Bắt đầu từ humanoid's RootPart , phương pháp này thu thập tất cả Attachments cha có tên kết thúc bằng RigAttachment .Sau đó nó tìm kiếm một phần mở rộng phù hợp trong nhân vật có cùng tên với phần mở rộng.Sử dụng hai phụ kiện đó, một khớp Motor6D được tạo dựa trên các bộ phận liên quan đến hai phụ kiện và CFrame của các phụ kiện.

Humanoid:BuildRigFromAttachments() cũng thay đổi nhân vật và đặt màu cơ thể.


Lợi Nhuận

()

Mẫu mã

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

()

Phương pháp này khiến Humanoid đi vào Enum.HumanoidStateType được cho, mô tả hoạt động mà Humanoid đang thực hiện.

Vui lòng xem trang Enum.HumanoidStateType để có thêm thông tin về các trạng thái cụ thể, vì một số có tên không trực quan.Ví dụ, Enum.HumanoidStateType.Running mô tả một trạng thái mà chân của con người ở trên mặt đất, bao gồm cả khi dừng lại.

Do hành vi mặc định của Humanoid, một số trạng thái sẽ tự động thay đổi khi được cài đặt. Ví dụ:

Lưu ý rằng để đặt trạng thái Humanoid bằng cách sử dụng phương pháp này, bạn phải làm như vậy từ một LocalScript và khách hàng phải có quyền sở hữu mạng của Player.Character .Ngoài ra, bạn có thể gọi phương thức này từ phía máy chủ Script , nhưng máy chủ phải có quyền sở hữu mạng của nhân vật người chơi.

Xem thêm Humanoid:SetStateEnabled() để bật hoặc tắt một trạng thái cụ thể, và Humanoid:GetState() để nhận trạng thái humanoid hiện tại.

Tham Số

The Enum.HumanoidStateType mà the Humanoid sẽ thực hiện.

Giá Trị Mặc Định: "None"

Lợi Nhuận

()

Mẫu mã

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

()

Phương pháp này làm cho Humanoid trang bị cho Tool được cung cấp.

Ví dụ dưới đây sẽ gây ra một Player để trang bị một công cụ trong Workspace có tên là 'Công cụ' .


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

Khi phương pháp này được gọi, Humanoid sẽ đầu tiên tự động tháo tất cả Tools đã trang bị hiện tại.

Mặc dù chúng sẽ được trang bị, Tools đối với điều mà Tool.RequiresHandleđúng sẽ không hoạt động nếu chúng không có tay cầm, bất kể phương pháp này có được sử dụng để trang bị chúng hay không.

Xem thêm:

Tham Số

tool: Instance

The Tool để trang bị.

Giá Trị Mặc Định: ""

Lợi Nhuận

()

GetAccessories

Phương pháp này trả về một mảng các đối tượng Accessory mà cha của hình học đang mặc hiện tại.Tất cả các đối tượng như vậy Accessory sẽ được bao gồm, bất kể chúng có được gắn kết hay không.

Nếu Humanoid không có đối tượng Accessory, một mảng trống sẽ được trả về.

Xem thêm Humanoid:AddAccessory() để gắn Accessory vào cha của một con người nhân tạo.


Lợi Nhuận

Một mảng của Accessory đối tượng được gán cho cha của humanoid

Mẫu mã

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

Phương pháp này trả về một bản sao của humanoid được lưu trữ HumanoidDescription mô tả ngoại hình hiện tại của nó.Nó có thể được sử dụng để nhanh chóng xác định diện mạo của một nhân vật và gán diện mạo của họ cho nhân vật khác bằng cách sử dụng phương pháp Humanoid:ApplyDescription().

Xem thêm


Lợi Nhuận

GetBodyPartR15

Phương pháp này trả về những gì Enum.BodyPartR15 một Part là, hoặc Enum.BodyPartR15.Unknown nếu phần không phải là một phần thân R15.Phương pháp này cho phép các nhà phát triển lấy lại các phần cơ thể người độc lập với tên phần cơ thể thực tế, thay vì trả về một enum.

Nó có thể được sử dụng kết hợp với Humanoid:ReplaceBodyPartR15() .Ví dụ, nếu phần cơ thể của một người chơichạm vào thứ gì đó, chức năng này sẽ trả về một ví ví dụ / trường hợpphần.Sau đó, các nhà phát triển có thể tìm kiếm phần nào của cơ thể đã, như đầu hoặc tay.Sau đó tùy thuộc vào phần đó là gì, các nhà phát triển có thể thực hiện một số hành động chơi game hoặc thay thế phần đó bằng một phần khác - có thể hiển thị sát thương.

Phương pháp này có thể hữu ích cho các trò chơi mà vị trí bị trúng là quan trọng.Ví dụ, nó có thể được sử dụng để xác định xem một người chơi có bị đánh vào chân hay không và sau đó chậm lại dựa trên chấn thương.

Tham Số

part: Instance

Phần được chỉ định đang được kiểm tra xem nó có phải là một phần thân R15 không.

Giá Trị Mặc Định: ""

Lợi Nhuận

Loại thân R15 của phần được chỉ định hoặc không xác định nếu phần không phải là một phần thân.

GetLimb

Phương pháp này trả về enum Enum.Limb được liên kết với Part được cung cấp. Nó hoạt động cho cả R15 và R6 giàn, ví dụ:


-- Dành cho R15
print(humanoid:GetLimb(character.LeftUpperLeg)) -- Enum.Limb.LeftLeg Định nghĩa
print(humanoid:GetLimb(character.LeftLowerLeg)) -- Enum.Limb.LeftLeg Định nghĩa
print(humanoid:GetLimb(character.LeftFoot)) -- Enum.Limb.LeftLeg Định nghĩa
-- Dành cho R6
print(humanoid:GetLimb(character:FindFirstChild("Left Leg"))) -- Enum.Limb.LeftLeg

Lưu ý rằng Humanoid:GetLimb() sẽ ném một lỗi nếu cha của phần không được đặt thành cha của humanoid.

Tham Số

part: Instance

The Part đối với which the Enum.Limb is to be retrieved.

Giá Trị Mặc Định: ""

Lợi Nhuận

Phần Enum.Limb phù hợp với.

Mẫu mã

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


Lợi Nhuận

Ghi Song Song

Phương pháp này trả về Enum.HumanoidStateType, mô tả hoạt động mà Humanoid đang thực hiện, chẳng hạn như nhảy hoặc bơi.

Xem thêm Humanoid:SetStateEnabled() để bật hoặc tắt một trạng thái cụ thể, và Humanoid:ChangeState() để thay đổi trạng thái humanoid hiện tại.


Lợi Nhuận

Mẫu mã

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

Ghi Song Song

Phương pháp GetStateEnabled trả về xem có được bật kích hoạt Enum.HumanoidStateType cho Humanoid hay không.

Tình trạng humanoid mô tả hoạt động mà humanoid đang thực hiện hiện tại.

Khi một cụ thể Enum.HumanoidStateType bị vô hiệu hóa, con người không bao giờ có thể vào trạng thái đó.Điều này đúng ngay cả khi nỗ lực thay đổi trạng thái được thực hiện bằng cách sử dụng Humanoid:ChangeState() hoặc mã con người nội bộ của Roblox.

Xem thêm:

Tham Số

Các được cung cấp Enum.HumanoidStateType .

Giá Trị Mặc Định: ""

Lợi Nhuận

Whether the given Enum.HumanoidStateType được bật.

Mẫu mã

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

()

Phương pháp này khiến Humanoid đi bộ theo hướng Vector3 đã cho.

Mặc định, hướng là bằng tiền thế điều khoản, nhưng nếu tham số relativeToCameratrue, hướng là tương đối với CFrame của CurrentCamera .Vì hướng tiêu cực Z bị xem là "theo chiều từ trên xuống" trong Roblox, mã sau đây sẽ làm cho con người di chuyển theo hướng của CurrentCamera .


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

Khi phương pháp này được gọi, Humanoid sẽ di chuyển cho đến khi phương pháp được gọi lại.Tuy nhiên, phương pháp này sẽ bị thay thế trong khung tiếp theo bởi kịch bản điều khiển nhân vật mặc định của Roblox.Điều này có thể tránh được bằng cách gọi chức năng này mỗi khung bằng cách sử dụng RunService:BindToRenderStep() (xem ví dụ), hoặc viết lại các kịch bản điều khiển trong StarterPlayerScripts .

Phương pháp này có thể được gọi trên máy chủ, nhưng việc này chỉ nên được thực hiện khi máy chủ có sở hữu mạng của tập hợp humanoid.

Xem thêm Humanoid:MoveTo() which makes a Humanoid walk to a point, và Player:Move() which effectively calls this function.

Tham Số

moveDirection: Vector3

Hướng để đi bộ.

Giá Trị Mặc Định: ""
relativeToCamera: boolean

Đặt thành true nếu tham số moveDirection nên được coi là tương đối với CurrentCamera .

Giá Trị Mặc Định: false

Lợi Nhuận

()

Mẫu mã

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

()

Phương pháp này khiến Humanoid đi đến vị trí đã cho bằng cách thiết lập các thuộc tính Humanoid.WalkToPointHumanoid.WalkToPart.

Các tham số vị tríphần tương ứng với những gì Humanoid.WalkToPointHumanoid.WalkToPart sẽ được đặt.

Nếu tham số phần được xác định, Humanoid vẫn sẽ cố gắng đi đến điểm.Tuy nhiên, nếu phần di chuyển thì điểm Humanoid đang đi sẽ di chuyển đến vị trí tương tự so với phần .Nếu tham số phần không được xác định, vị trí mà Humanoid đang đi sẽ không thay đổi.

Tình trạng tiếp cận mục tiêu của một con người sẽ hết hạn sau 8 giây nếu nó không đạt được mục tiêu của nó.Việc này được thực hiện để NPC không bị mắc kẹt chờ đợi Humanoid.MoveToFinished để bắn.Nếu bạn không muốn điều này xảy ra, bạn nên lặp lại lệnh MoveTo để thời gian chờ sẽ tiếp tục được thiết lập lại.

MoveTo() kết thúc nếu bất kỳ điều kiện sau đây áp dụng:

Tham Số

location: Vector3

Vị trí để đặt Humanoid.WalkToPoint đến.

Giá Trị Mặc Định: ""
part: Instance

The BasePart để thiết lập Humanoid.WalkToPart để.

Giá Trị Mặc Định: "nil"

Lợi Nhuận

()

Mẫu mã

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

()

Phương pháp này loại bỏ tất cả các Accessory đối tượng được mặc bởi cha của hình học con người. Đối với người chơi Characters, điều này sẽ loại bỏ tất cả các mũ và phụ kiện khác.

Phương pháp này xóa đối tượng Accessory bằng cách gọi Instance:Destroy() trên chúng, có nghĩa là Parent của các phụ kiện được đặt thành nil và bị khóa.

Xem thêm Humanoid:AddAccessory() để gắn Accessory , và Humanoid:GetAccessories() để lấy tất cả các Accessory đối tượng thuộc về một Humanoid .


Lợi Nhuận

()

Mẫu mã

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

Thay thế một phần chi R15/Rthro năng động trong một Humanoid bằng một phần khác. Phần được tự động thay đổi theo cách bình thường.

Phương pháp này hữu ích để thay đổi nhân vật trong lúc chơi trò chơi hoặc xây dựng nhân vật từ một cấu hình cơ sở.Phương pháp liên quan GetBodyPartR15 có thể hữu ích khi sử dụng phương pháp này.

Tên của phần được truyền qua phải phù hợp với tên của BodyPartR15 Enum được truyền qua.

Tham Số

Phần cơ thể cần thay thế. Enum.BodyPartR15.Unknown sẽ thất bại.

Giá Trị Mặc Định: ""
part: BasePart

The Class.Part``Class.Instance mà sẽ được gán cho nhân vật.

Giá Trị Mặc Định: ""

Lợi Nhuận

SetStateEnabled

()

Phương pháp này xác định xem một được cho phép Enum.HumanoidStateType có bật cho Humanoid hay không.Khi một cụ thể Enum.HumanoidStateType bị vô hiệu hóa, Humanoid không bao giờ có thể vào trạng thái đó.Điều này là đúng ngay cả khi nỗ lực thay đổi trạng thái được thực hiện bằng cách sử dụng Humanoid:ChangeState() hoặc mã nội bộ Roblox Humanoid .

Lưu ý rằng sử dụng SetStateEnabled() trên máy chủ không sao chép thay đổi cho khách hàng, hoặc ngược lại.

Tham Số

Các Enum.HumanoidStateType được bật hoặc tắt.

Giá Trị Mặc Định: ""
enabled: boolean

true nếu state được bật, false nếu state bị vô hiệu hóa.

Giá Trị Mặc Định: ""

Lợi Nhuận

()

Mẫu mã

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

()

Phương pháp này làm giảm Humanoid.Health của Humanoid bởi số tiền được cho ** nếu nó không được bảo vệ bởi một ForceField

Phương pháp này chấp nhận các giá trị âm cho tham số số tiền.Điều này sẽ tăng độ con người của humanoid Humanoid.Health .Tuy nhiên, điều này chỉ có hiệu lực nếu không có ForceField .

Làm thế nào ForceFields bảo vệ chống lại TakeDamage

Một Humanoid được coi là được bảo vệ bởi một ForceField nếu một ForceField đáp ứng một trong những tiêu chí sau:

Để gây sát thương cho một Humanoid không phụ thuộc vào bất kỳ ForceFields hiện tại, hãy đặt Humanoid.Health trực tiếp.

Để biết thêm thông tin về cách ForceFields bảo vệ Humanoids xem trang ForceField.

Tham Số

amount: number

Thiệt hại, hoặc số tiền phải trừ từ Humanoid.Health .

Giá Trị Mặc Định: ""

Lợi Nhuận

()

Mẫu mã

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

()

Phương pháp này tháo tất cả các Tool hiện được trang bị bởi Humanoid

Các thẻ không trang bị Tool sẽ được gán cho cha của Backpack của Player liên quan đến Humanoid .

Nếu không có Tool được trang bị, phương pháp này sẽ không làm gì cả.

Mặc dù có thể được trang bị bởi NPCs (Nhân vật không người chơi), phương pháp này chỉ hoạt động trên với một tương ứng.Điều này là do một đối tượng Backpack được yêu cầu để làm cha cho một đối tượng không trang bị Tool .

Xem thêm:


Lợi Nhuận

()

Mẫu mã

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

()
Sinh Lợi

Phương pháp này từ bỏ khiến nhân vật trông phù hợp với những gì đã được chuyển trong HumanoidDescription .Một bản sao của đã truyền HumanoidDescription được lưu trữ như HumanoidDescription cho Humanoid .

Phương pháp này được tối ưu hóa bằng cách thực hiện giả định rằng chỉ phương pháp này được sử dụng để thay đổi sự xuất hiện của nhân vật, và không có bất kỳ thay đổi nào thông qua các phương tiện khác giữa các cuộc gọi.Nếu thay đổi được thực hiện cho nhân vật giữa các cuộc gọi, thì phương pháp này có thể không làm cho nhân vật phản ánh chính xác những gì đã được truyền đến trong HumanoidDescription .Nếu bạn muốn sử dụng phương pháp này kết hợp với các phương tiện khác để cập nhật nhân vật, Humanoid:ApplyDescriptionReset() sẽ luôn luôn đảm bảo nhân vật phản ánh được truyền đến HumanoidDescription .

Xem thêm

Tham Số

humanoidDescription: HumanoidDescription

Ví dụ HumanoidDescription Instances mà bạn muốn đặt nhân vật để tương thích.

Giá Trị Mặc Định: ""
assetTypeVerification: Enum.AssetTypeVerification
Giá Trị Mặc Định: "Default"

Lợi Nhuận

()

ApplyDescriptionReset

()
Sinh Lợi

Phương pháp này từ bỏ khiến nhân vật trông phù hợp với những gì đã được chuyển trong HumanoidDescription , ngay cả sau khi thay đổi bên ngoài.Một bản sao của đã truyền HumanoidDescription được lưu trữ như HumanoidDescription cho Humanoid .

Phương pháp này sẽ luôn luôn đảm bảo nhân vật phản ánh lại những thay đổi đã được thực hiện trong HumanoidDescription, ngay cả khi các thay đổi đã được thực hiện cho nhân vật không sử dụng hệ thống HumanoidDescription ( ví dụ không sử dụng ApplyDescriptionReset() hoặc ApplyDescription() ).Điều này trái ngược với ApplyDescription() được tối ưu hóa và có thể áp dụng sai lầm một HumanoidDescription nếu nhân vật đã được thay đổi bằng cách khác ngoài qua hệ thống HumanoidDescription .

Tham Số

humanoidDescription: HumanoidDescription

Ví dụ HumanoidDescription instance mà bạn muốn đặt nhân vật để tương thích.

Giá Trị Mặc Định: ""
assetTypeVerification: Enum.AssetTypeVerification
Giá Trị Mặc Định: "Default"

Lợi Nhuận

()

PlayEmote

Sinh Lợi

Nếu biểu cảm không thể được phát vì tên biểu cảm không được tìm thấy trong HumanoidDescription, phương pháp này sẽ gây ra lỗi.Phương thức sẽ trả về true để chỉ ra rằng biểu cảm đã được chơi thành công.

Tham Số

emoteName: string

tên của biểu tượng để chơi.

Giá Trị Mặc Định: ""

Lợi Nhuận

đã chơi thành công.

Sự Kiện

ApplyDescriptionFinished

Tham Số

description: HumanoidDescription

Climbing

Bắt lửa khi tốc độ mà một Humanoid đang tăng thay đổi.

Humanoids có thể leo lên các thang được làm từ Parts hoặc TrussParts .

Humanoids leo lên ở 70% của họ Humanoid.WalkSpeed .

Sự kiện này sẽ không phải lúc nào cũng bắn với tốc độ 0 khi Humanoid dừng leo trèo.

Xem thêm:

Tham Số

speed: number

Tốc độ mà Humanoid hiện đang leo trèo.


Mẫu mã

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

Sự kiện này bắt lửa khi Humanoid chết, thường là khi Humanoid.Health đạt đến 0.Điều này có thể xảy ra do ngắt kết nối đầu của chúng khỏi Humanoid.Torso của họ, hoặc trực tiếp đặt thuộc tính sức khỏe.

Sự kiện này chỉ bắt lửa nếu Humanoid là con cháu của Workspace . Nếu Dead``Enum.HumanoidStateType bị vô hiệu hóa, nó sẽ không bắt lửa.


Mẫu mã

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

Sự kiện FallingDown bắt lửa khi Humanoid vào và rời khỏi FallingDown``Enum.HumanoidStateType .

The Humanoid sẽ vào trạng thái GettingUp sau 3 giây khi trạng thái FallingDown được bật.Khi điều này xảy ra, sự kiện này sẽ bắn với một giá trị hoạt động của false , và Humanoid.GettingUp sẽ bắn với một giá trị hoạt động của true .

Tham Số

active: boolean

Mô tả xem liệu có đang vào hoặc rời khỏi .


FreeFalling

Sự kiện này bắt lửa khi Humanoid vào hoặc rời khỏi Freefall``Enum.HumanoidStateType .

Tham số hoạt động đại diện cho việc Humanoid có đang nhập hoặc rời khỏi trạng thái Freefall hay không.

Mặc dù tình trạng Freefall thường kết thúc khi Humanoid đạt đến mặt đất, sự kiện này có thể bắt lửa với active bằng đúng với false nếu tình trạng thay đổi trong khi Humanoid đang rơi.Vì lý do này, bạn nên sử dụng Humanoid.StateChanged và lắng nghe tình trạng Landed hoạt động khi một Humanoid đã hạ cánh.

Tham Số

active: boolean

Whether the Humanoid đang vào hoặc rời khỏi Freefall``Enum.HumanoidStateType .


GettingUp

Sự kiện này xảy ra khi Humanoid vào hoặc rời khỏi trạng thái Enum.HumanoidStateType.GettingUp , một trạng thái chuyển tiếp được kích hoạt ngay sau khi Humanoid vào trạng thái FallingDown (3 giây) hoặc Ragdoll (1 giây) trạng thái.

Khi một Humanoid cố gắng trở lại, sự kiện này sẽ bắn trước tiên với một tham số active của true trước khi không lâu sau đó bắn lại với một tham số active của false .

Để buộc một Humanoid rơi xuống, hãy sử dụng chức năng Humanoid:ChangeState() với Enum.HumanoidStateType.FallingDown.

Tham Số

active: boolean

Whether the Humanoid đang vào hoặc rời khỏi GettingUp``Enum.HumanoidStateType .


HealthChanged

Sự kiện này bắt lửa khi Humanoid.Health thay đổi.Tuy nhiên, nó sẽ không bắt lửa nếu sức khỏe tăng lên từ một giá trị bằng hoặc lớn hơn Humanoid.MaxHealth.

Khi Humanoid.Health đạt đến không, sự kiện Humanoid sẽ chết và sự kiện Humanoid.Died sẽ bắt lửa. Sự kiện này sẽ bắt lửa với giá trị bằng không.

Tham Số

health: number

Giá trị mới của Humanoid.Health .


Mẫu mã

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

Sự kiện này xảy ra khi Humanoid vào và rời khỏi Jumping``Enum.HumanoidStateType .

Khi một Humanoid, sự kiện này bắt lửa với một tham số active của true trước khi không lâu sau đó bắn lại với một tham số active của false .Phát bắn thứ hai này không phù hợp với một hạ cánh Humanoid ; để làm điều đó, hãy lắng nghe Landed``Enum.HumanoidStateType sử dụng Humanoid.StateChanged .

Bạn có thể vô hiệu hóa nhảy bằng cách sử dụng chức năng Humanoid:SetStateEnabled().

Tham Số

active: boolean

Whether the Humanoid đang vào hoặc rời khỏi Jumping``Enum.HumanoidStateType .


MoveToFinished

Sự kiện này bắt lửa khi Humanoid kết thúc đi bộ đến một mục tiêu được tuyên bố bởi Humanoid.WalkToPointHumanoid.WalkToPart tính năng.

Các thuộc tính Humanoid.WalkToPointHumanoid.WalkToPart có thể được đặt riêng lẻ hoặc sử dụng chức năng Humanoid:MoveTo().

Nếu Humanoid đạt được mục tiêu trong vòng 8 giây, sự kiện này sẽ trở lại với đạt là đúng.Nếu mục tiêu không được đạt được trong vòng 8 giây, Humanoid sẽ dừng đi bộ và đạt sẽ là sai.Thời gian chờ này có thể được đặt lại bằng cách gọi Humanoid:MoveTo() một lần nữa trong thời gian chờ.

Tham Số

reached: boolean

Một boolean chỉ ra liệu Humanoid có đạt được mục tiêu hay không.Đúng nếu Humanoid đạt được mục tiêu của nó, sai nếu cuộc đi bộ bị gián đoạn trước khi mục tiêu có thể đạt được.


Mẫu mã

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

Sự kiện này bắt lửa khi Humanoid vào hoặc rời khỏi PlatformStanding``Enum.HumanoidStateType .

Trong khi Humanoid đang ở trạng thái PlatformStanding, thuộc tính Humanoid.PlatformStand sẽ là true .

Trong khi Humanoid.PlatformStand được đặt thành true , Humanoid sẽ không thể di chuyển. Để biết thêm thông tin, vui lòng xem trang cho Humanoid.PlatformStand .

PlatformStand Enum.HumanoidStateType đã được liên kết với phần bị vô hiệu hóa hiện tại Platform . Mặc dù vậy, nó vẫn có thể được sử dụng bởi các nhà phát triển.

Tham Số

active: boolean

Whether the Humanoid đang vào hoặc rời khỏi PlatformStanding``Enum.HumanoidStateType .


Ragdoll

Sự kiện này bắt lửa khi Humanoid vào hoặc rời khỏi Ragdoll``Enum.HumanoidStateType .

Tham số active sẽ có giá trị true hoặc false để chỉ ra việc vào hoặc rời khỏi.

Sử dụng Humanoid:SetStateEnabled() để vô hiệu hóa trạng thái GettingUp để ở lại trạng thái Ragdoll.

Xem thêm:

Tham Số

active: boolean

Whether the Humanoid đang vào hoặc rời khỏi Ragdoll``Enum.HumanoidStateType .


Running

Sự kiện này bắt lửa khi tốc độ mà một Humanoid đang chạy thay đổi.

Trong khi chạy Humanoids tấm che, trung bình, Humanoid.WalkSpeed của họ trong đinh tán mỗi giây.

Khi Humanoid dừng chạy sự kiện này sẽ bắn với tốc độ 0.

Xem thêm:

Tham Số

speed: number

Tốc độ mà Humanoid đang chạy.


Mẫu mã

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

Sự kiện này bắt lửa khi một hoặc hoặc ngồi trong hoặc đứng dậy từ một .

Khi một nhân vật tiếp xúc với một chỗ ngồi, chúng được gắn vào chỗ ngồi và một hoạt hình ngồi được chơi.Để biết thêm thông tin về chủ đề này, hãy xem trang Seat .

  • Nếu nhân vật đang ngồi xuống, tham số active sẽ là truecurrentSeatPart sẽ là chỗ ngồi hiện tại họ đang ngồi.
  • Nếu nhân vật đứng dậy từ một chỗ ngồi, tham số active sẽ là saicurrentSeatPart sẽ là nil .

Xem thêm:

  • Humanoid.Sit , cho thấy nếu một Humanoid hiện đang ngồi
  • Humanoid.SeatPart , cho thấy chỗ ngồi mà một Humanoid hiện đang ngồi, nếu có.

Tham Số

active: boolean

Đúng nếu Humanoid đang ngồi xuống.

currentSeatPart: BasePart

Chỗ ngồi the Humanoid nếu nó ngồi xuống.


Mẫu mã

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

Sự kiện này bắt lửa khi trạng thái của Humanoid thay đổi.

Vì không có trạng thái "nhàn rỗi" của humanoid, bạn nên thay vào đó sử dụng sự kiện Humanoid.Running hoặc lắng nghe phần RootPart của Velocity để làm việc khi Humanoid đang đứng yên vị.

Xem thêm

Tham Số

Loại đánh máythái trước của con người.

Loại đánh máythái hiện tại của con người.


Mẫu mã

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

Sự kiện StateEnableChanged bắt lửa khi Humanoid:SetStateEnabled() được gọi trên Humanoid.

Các tham số bao gồm Enum.HumanoidStateType trong câu hỏi cùng với một bool chỉ ra nếu trạng thái này hiện đang được bật.

Xem thêm:

Tham Số

The Enum.HumanoidStateType for which the trạng thái được bật đã được thay đổi.

isEnabled: boolean

Đúng nếu trạng thái bây giờ đã được bật.


Mẫu mã

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

Sự kiện này không bắn khi Humanoid đang rải và không nên được các nhà phát triển sử dụng

Sự kiện này được kích hoạt khi Humanoid vào hoặc rời khỏi StrafingNoPhysics``Enum.HumanoidStateType .

Khi Humanoid vào trạng thái StrafingNoPhysics thì sự kiện này sẽ bắn với một tham số hoạt động của true .Sự kiện sẽ bắn lại với hoạt động bằng bằng 0 khi Humanoid rời khỏi trạng thái StrafingNoPhysics.

Sự kiện này được liên kết với trạng thái và không bắt lửa khi không đang di chuyển vuông góc với hướng mà nó đang đối mặt.Tình trạng này hiện đang chưa được sử dụng, nếu được đặt bằng Humanoid:ChangeState() tình trạng sẽ trở lại RunningNoPhysics .

Tham Số

active: boolean

Whether the Humanoid đang vào hoặc rời khỏi StrafingNoPhysics``Enum.HumanoidStateType .


Swimming

Sự kiện này bắt lửa khi tốc độ mà một Humanoid bơi trong Terrain nước thay đổi.

Humanoids bơi ở 87.5% của họ Humanoid.WalkSpeed .

Sự kiện này sẽ không phải lúc nào cũng bắn với tốc độ 0 khi Humanoid dừng bơi.

Xem thêm:

Tham Số

speed: number

Tốc độ mà Humanoid hiện đang bơi.


Touched

Sự kiện này bắt lửa khi một trong những chi của con người tiếp xúc với một khác BasePart .Cạnh BasePart mà chi thể đang chạm vào, cùng với chính chi thể, được cung cấp.

Sự kiện này sẽ không bắt lửa khi các chi thuộc về Humanoid bị tiếp xúc với chính nó.

Các lựa chọn

Mặc dù sự kiện Humanoid.Touched là hữu ích, bạn nên xem xét xem có những lựa chọn nào phù hợp hơn với nhu cầu của bạn.

  • Trong hầu hết các trường hợp, được khuyến khích kết nối một sự kiện BasePart.Touched cho BaseParts quan tâm thay vào đó, vì sự kiện Humanoid.Touched sẽ liên tục bắn khi con người di chuyển.Ví dụ, trong một trò chơi dodgeball, sẽ thực tế hơn khi kết nối một sự kiện Touched cho các quả bóng thay vì sử dụng Humanoid.Touched .
  • Khi cố gắng làm việc khi Humanoid đã hạ cánh xuống mặt đất, sự kiện Humanoid.StateChanged thích hợp hơn.Ngoài ra, bạn có thể kiểm tra Humanoid.FloorMaterial để xem liệu con người có đang đứng trên bất kỳ vật liệu không khí nào không.

Ghi chú

Tham Số

touchingPart: BasePart

The BasePart the Humanoid đã tiếp xúc với.

humanoidPart: BasePart

Phần chi của Humanoid đã được chạm vào.


Mẫu mã

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)