Humanoid

显示已弃用

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

人形是一种特殊对象,它使模型具有角色的功能。它向模型授予物理上走

R6

  • 使用 6 个部件为手臂的基本角色网格。
  • Head 零件必须附于名为 Torso 的零件,否则人形即将立即死亡。
  • BodyPart 外观使用 CharacterMesh 对象应用。
  • 某些属性,例如 Humanoid.LeftLegHumanoid.RightLeg,只能使用 R6。

R15 列车

  • 比 R6 复杂,但也更灵活和更稳定。
  • 用 15 个零件为手臂。
  • Head 部分必须附在 UpperTorso 或人形即将立即死亡。
  • 身体部件的外观必须直接组装。
  • 可以使用特殊的 NumberValue 对象在人形体内动态调整。
  • 人形会自动创建 Vector3Value 个名为 OriginalSize 的对象,每个腿部内。
  • 如果 NumberValue 在人形体内拥有父级,并且以关注中/正在关注列中命名,它将被用于控制缩放功能:
    • 身体深度
    • 身体高度
    • 身体宽度
    • 头部

代码示例

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)

概要

属性

方法

活动

属性

AutoJumpEnabled

读取并联

自动跳转启用 设置是否启用 Humanoid 在走向它所走向的障碍物时自动跳转。

当前属性只会在以下条件下工作:

  • 人形的角色模型是一个 Player.Character 的 Class.Player 。
  • 该玩家正在使用触摸控制。

当玩家的角色生成时,该属性的值与玩家的 Player.AutoJumpEnabled 属性匹配 - 这在 turn 的 Class.StarterPlayer.AutoJumpEnabled 属性。

代码示例

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

读取并联

自动旋转属性描述是否设置人形会自动旋转以面向他们所移动的方向面向。当设置为“真”时,角色模型将逐渐旋转到人形在周围走动的方向面向。当设置为“错误”时,角色模型将保持在其当前旋转中,除非旋转力量已应用到HumanoidRootPart

如果角色模型发生在玩家的角色,那么人形的旋转会受到“用户游戏设置”的“旋转类型”属性的影响。

当自动旋转属性设置为“真”时,旋转类型属性对人形的旋转有以下效果:


<tbody>
<tr>
<td>移动相对</td>
<td />
<td />
</tr>
<tr>
<td>相机相对</td>
<td>角色会旋转面向相镜头的方向。</td>
<td>玩家的相机处于第一人称视角,或者处于 Shift 锁定模式。</td>
</tr>
</tbody>
旋转类型行为上下文

代码示例

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

读取并联

人形有六个子弹值包括 BodyDepthScaleBodyHeightScaleBodyProportionScale , 2> BodyTypeScale2> , 5> BodyWidthScale5> , 8> 8> HeadScale</

BreakJointsOnDeath

读取并联

Enum.HumanoidStateType.Dead 状态下是否会断裂人形的关节。默认为 true。

CameraOffset

读取并联

CameraOffset 属性指定相镜头的主题位置的 Offset 当其 Camera.CameraSubject 设置为此 Humanoid

对象空间中的 Offset 适用于 (0, 10, 0) 的人形根部分。例如,一个 Offset Vector3 值的 (0, 10, 0) 将相玩家对人形根部分上移 10 格。

代码示例

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)
读取并联

DisplayDistanceType 属性控制人形的名称和健康显示的距离行为。此属性使用 Enum.HumanoidDisplayDistanceType 枚级配,其中每个值都有自己的一套规则:

  • 当设置为 Viewer 时,人形看到其自己的 NameDisplayDistanceHealthDisplayDistance 范围内的其他人形的名称/健康。
  • 当设置为 Subject 时,人形体会通过其 NameDisplayDistanceNameDisplayDistance 值显示自己的名称和健康状态。
  • 当设置为 None 时,人形的名称和健康条不会在任何情况下显示。

请参阅角色名称/健康显示获取有关控制角色名称和生命值条的完整指南。

代码示例

Displaying a Humanoid's Health and Name

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

DisplayName

读取并联

DisplayName 是一个属性,可以在可见时确定人形怪的名称显示。默认情况下,新的人形怪的名称值为空。如果 DisplayName 是一个空子字符串,人形怪的名称显示将为人形怪的父父元素的名称属性默认。

玩家角色加载

当玩家加载他们的角色时,通过使用 LoadCharacter() 或自动通过使用 DisplayName 来设置其人形,创建的引擎会将其 DisplayName 属性设置为玩家的 1> DisplName1> 属性。

新手角色和新手人形

StarterHumanoid 命名为 StarterPlayer 时,或当 1> StarterCharacter

EvaluateStateMachine

读取并联

FloorMaterial

只读
未复制
读取并联

这是一个只读属性,描述 Enum.Material 当前所在位置。它与常规 HumanoidParts 体素 работа。它使用与 1> Class.Terrain1> 体素的所有常规 Class.BasePart|零件|部件|零件|零件|零件|零件|零件|零件|零件|零件|零件|零件|零件|零件|

下面的代码示例显示了如何使用 Object:GetPropertyChangedSignal() 来听取当这个属性改变时。当人形物体站在上面时,它会打印一个消息,表示新材料正在上面。


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

洞穴

  • Humanoid 不在楼上时,此属性的值将设置为 Air
    • 这是因为枚列属性不能有空值。
    • 如果零件的材料设置为“Air”,这可能会导致一些混乱,但在实际上,零件不应该使用该材料。
  • Class.Humanoid 的角色模型必须能够与地面碰撞,否则它将不会被检测到。

Health

未复制
读取并联

这个属性代表 Humanoid 当前的健康状态。值是 0 和 MaxHealth 之间的范围。如果 humanoid 已死亡,此属性将被设置为 0 。

注意,TakeDamage() 函数可以用来从 Health 中减去,而不是直接设置属性。

生命值恢复

默认情况下,一个被动的生命恢复脚本将自动插入到人形。这会导致不死玩家角色在每秒钟内恢复 1% 的 MaxHealth 。要禁用此恢复行为,请将一个空的 Script 命名为 生命值 添加到 1> Class.StarterCharacterScripts

显示健康条

Health 小于 MaxHealth 时,体育健康条会在体验中显示。 显示健康条的显示行为取决于 HealthDisplayDistance 和 1> Class.Humanoid.HealthDisplayType|HealthDisplayType1>

请参阅角色名称/健康显示获取有关控制角色名称和生命值条的完整指南。

死亡

当角色的健康值达到 0 时,Humanoid 会自动转换为Enum.HumanoidStateType.Dead状态。在此状态下,Health 锁定为 0,但是没有错误或警告设置死亡人形的1>

HealthDisplayDistance

读取并联

此属性是 DisplayDistanceType 属性与 人形图形.显示距离 属性共同使用的,用于控制人形图形的健康条可以从哪个距离看到。

请参阅角色名称/健康显示获取有关控制角色名称和生命值条的完整指南。

读取并联

此属性控制一个人形的生命值条可以显示。 默认情况下,此属性设置为 DisplayWhenDamaged ,以便显示人形

注意,这个属性与 HealthDisplayDistance 属性,负责在特定距离上使健康条消失。如果 Humanoid.HealthDisplayType|HealthDisplayType 设置为 AlwaysOn,它仍然会

请参阅角色名称/健康显示获取有关控制角色名称和生命值条的完整指南。

HipHeight

读取并联

确定地面上的 RootPart 距离,当人类站立时,RigType 会影响此属性的行为。

对于 R15 装备,预设适合的臀部高度,以确保 RootPart 的高度正确。腿高度不使用。人oid 的总高度可以用以下方式描述:


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

对于 R6 装备,HipHeight 而不是相对偏移值。人形高度可以在以下方式中描述:


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

Jump

未复制
读取并联

如果 true ,上向力与 HumanoidHumanoid.JumpPower 的值等同,或 2>Class.Humanoid.UseJumpPower2> 。

JumpHeight

读取并联

提供对 Humanoid 跳跃的高度的控制,以 StarterPlayer.CharacterJumpHeight 。该值由 Class.StarterPlayer.CharacterJumpHeight 的值决定,默认为 7.2。

虽然将此属性设置为 0 将有效地防止人形跳跃,但通过禁用 Enum.HumanoidStateType.Jumping 中的 Humanoid:SetStateEnabled() 状态来禁用跳跃通过 Class.Humanoid:SetState 来禁用。

此属性仅在 属性 窗口中,如果 Humanoid.UseJumpPower 设置为 关闭,因为它不会在其他情况下相关 (而是使用 2>Class.Humanoid.JumpPower2> )。

JumpPower

读取并联

在跳跃时应用的上向力Humanoid的上限。该属性的起始值由StarterPlayer.CharacterJumpPower的值决定,其默认值为50,并且在0和1000之间受到限制。注意,跳跃还受到<a href=\"#Class.Workspace.Gravity\">Class.Workspace.Gravity</a>属

虽然将此属性设置为 0 将有效地防止人形跳跃,但通过禁用 Enum.HumanoidStateType.Jumping 中的 Humanoid:SetStateEnabled() 状态来禁用跳跃通过 Class.Humanoid:SetState 来禁用。

此属性仅在 属性 窗口中,如果 Humanoid.UseJumpPower 设置为 真,因为它不会在其他情况下相关 (而是在 2>Class.Humanoid.JumpHeight2> 是使用)。

MaxHealth

读取并联

人形的最大值是 Health

值 在 Health 属性旁边使用,用于调整默认健康条显示。当人形的 Health 达到 MaxHealth 时,其健康条可能不会显示,这取决于它的 1>Class.Humanoid.

MaxSlopeAngle

读取并联

这个属性确定人形可以攀爬的最大斜角。如果斜角的角度大于人形的最大斜角,人形将向下滑动。

当角色生成时,这个属性按照 StarterPlayer.CharacterMaxSlopeAngle 的值设置。

该值的值域为 0° 到 89° 之间。默认为 89°,因此人形可以攀爬任何他们想要的斜坡。

代码示例

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

只读
未复制
读取并联

移动方向 是一个只读的属性,描述一个 Humanoid 正在走路的方向,作为单位向量或零长度矢量力。方向在世界空间中描述。

因为这个属性是只读的,它不能由 ScriptLocalScript 设置。

代码示例

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

读取并联

NameDisplayDistance 属性是与 Humanoid.DisplayDistanceType 属性共用的一个数字,用于控制人形的名称在哪里可以看到的距离。

请参阅角色名称/健康显示获取有关控制角色名称和生命值条的完整指南。

NameOcclusion

读取并联

控制是否可以在墙壁或其他对象后面看到人形名称和健康条。 此属性是一个 Enum.NameOcclusion 值,可以配置为包含所有名称、敌人名称或禁用闭包。

LocalPlayer 没有 Humanoid 的情况下,此属性适用于该主题 Humanoid

请参阅角色名称/健康显示获取有关控制角色名称和生命值条的完整指南。

代码示例

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

读取并联

确定 Humanoid 是否当前在 Enum.HumanoidStateType.PlatformStanding 状态。 当 true 时,人形在一个状态,其重力不能移动工具。 此状态与坐下类似,但跳跃会从人形状态中解除。

RequiresNeck

读取并联

允许开发人员禁用玩家 Character|character 死亡,如果 Neck Motor6D 被移除或断开,甚至在一瞬间。此属性默认为 true。

读取并联

RigType 描述是否使用 Humanoid 使用旧 R6 角色的骨架,或是新的 R15 角色的装备。

R6 装备使用 6 个可见的 Parts 而 R15 装备使用 15 个可见的 Parts。R15 装备的端面比 R6 装备的端面多,使它们在动画时更加灵活。

注意,如果此属性设置不正确,Humanoid 将无法正常

RootPart

只读
未复制
读取并联

一个引用人形根的 人形根部分 对象,是控制人形移动通过 3D 世界的根驱动部分的根驱动部分。 此部分通常是隐藏的。

注意,在玩家角色的情况下, 根部分Model.PrimaryPart 模型的Player.Character 相同。

SeatPart

只读
未复制
读取并联

SeatPart 是一个引用座椅,其中 Humanoid 当前正在坐落的座椅,如果有。 值 Seat 可以是 VehicleSeat 。它将在 2> 零2> 如果人形未坐在座椅上。

注意:

Sit

读取并联

坐下属性是一个Boolean,该属性表示是否有 Humanoid 正在坐下。 Humanoids 可以通过将此属性值设置为 true 被强迫到坐下状态。如果 Humanoid 不被附在座位上,它

注意:

  • Class.Humanoid 可以使用 VehicleSeatHumanoid 获取,1> Class.Humanoid.SeatPart1> 可以使用 4> Class.Humanoid.Seat4> 属性
  • 您可以检测到人形坐下时通过连接到 Humanoid.Seated 事件。

TargetPoint

读取并联

不要使用 此属性仅适用于启用实验模式的情况下,此模式已被完全终止。

这个属性描述在空间中的 3D 位置,其中 Player 控制这个 Humanoid 上一次使用 Tool 装备。

此属性通常由类型工具用于确定人形标记在激活工具时瞄准什么时候。如果您给NPC一个经典火箭发射器,设置其目标点,然后调用工具的Tool:Activate()函数,NPC就会发射一个火箭到目标点。

UseJumpPower

读取并联

当角色生成时,这个属性按照 StarterPlayer.CharacterUseJumpPower 的值设置,其默认值为 true。

跳跃时,使用这个设置为真,Humanoid.JumpHeight 值可确保人形跳跃到那个高度。 使用这个设置为 false,Humanoid.JumpPower 值可应用向上的力。

WalkSpeed

读取并联

此属性描述Humanoid 的行走路速度,以每秒计时。默认为 StarterPlayer.CharacterWalkSpeed (16),意味着玩家角色每秒可以移动 16 度。

注释

  • 当在移动设备或游戏手柄上控制时,人形可以比其 WalkSpeed 慢走,如果控制手柄的移动中心度是一个渐变的度数,从中心移动。
  • 您可以通过将 WalkSpeed 设置为 0 来将人形冷冻在原地,这使得控制玩家无法通过默认移动机制将其移动。
  • 默认动画脚本根据人形的移动速度对其进行调整,以 16 每秒速度的默认速度。
  • Class.Humanoid 当前走路的速度可以使用 Running 事件来获取。

WalkToPart

读取并联

WalkToPart 是一个人形尝试到达的部分的引用。 此属性通常设置为人形的第 2 个参数,当人形的 Humanoid:MoveTo() 函数传递为第 2 个参数时。

当 WalkToPart 设置,一个人形正在主动尝试将零件移动到零件,它将继续更新其 Vector3 目标为零件的位置,加上 Humanoid.WalkToPoint 在对象空间中相对于零件旋转的位置。

这可以用 Lua 描述为:


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

洞穴

  • 设置 WalkToPart 的值不足以使人形开始跟随零件。
  • 人形提示开始尝试达到目标,当WalkToPoint的值发生变化时。
  • 这可能在未来更改。
  • 如果人形体不能达到目标,人形体的 达到目标状态 将在 8 秒后过期。
  • 这是为了防止 NPC 卡在等待 Humanoid.MoveToFinished 发触发时被卡住。
  • 如果您不想让这种情况发生,您应该反复调用 MoveTo 以确保时间到过后仍会保持重置。

WalkToPoint

读取并联

WalkToPoint 描述一个人形正在试图达到的3D位置,它的Humanoid:MoveTo()函数被提示为它所做的。

如果设置了一个人形的 Humanoid.WalkToPart,目标由变形 WalkToPoint 与零件位置和旋转相对于设置。如果未设置 WalkToPart ,人形将试图直接到达指定的 3D 位置。

洞穴

  • WalkToPoint 的值必须更改为不同的值,以便人形向它开始走路。
  • 如果您想要使人形生成到0,0,0,您应该使用人形的移动到功能。
  • 这可能在未来更改。
  • 如果人形体不能达到目标,人形体的 达到目标状态 将在 8 秒后过期。
  • 这是为了防止 NPC 卡在等待 Humanoid.MoveToFinished 发触发时被卡住。
  • 如果您不想让这种情况发生,您应该反复调用 MoveTo 以确保时间到过后仍会保持重置。

代码示例

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)

方法

AddAccessory

void

此方法将指定的 Accessory 添加到人形的父元素级。

当此方法被调用时,一个 Accessory 会被附在角色上,通过搜索人形的父

如果找不到所需的 Attachment ,那么 Accessory 将继续作为人形的父级,但将不会被分离。

通常,配件焊接在服务器上创建,但它们可以在客户端在某些情况下创建。在这些情况下,客户端对 AddAccessory() 的调用可能无法产生所需的行为,您可以使用 BuildRigFromAttachments()

参数

accessory: Instance

将要附加的 Accessory


返回

void

代码示例

[Humanoid] AddAccessory Example

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

BuildRigFromAttachments

void

此方法将 Motor6D 的树组成一个 Humanoid 的共同体。 需要 Motor6D 共同体才能播放 2>Class.Animation|Animations2> 。

从人形的 RootPart 开始,此方法收集所有 Attachments 在当前部分的父级,其名称以 装备附件 Humanoid:BuildRigFromAttachments() 还可以缩放角色并设置身体颜色。


返回

void

代码示例

Lua Port of BuildRigFromAttachments

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

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

ChangeState

void

此函数使 Humanoid 进入给定的 Enum.HumanoidStateType,描述 Humanoid 当前正在执行的活动。

请查看Enum.HumanoidStateType页面以获取更多关于特定状态的信息,因为有些状态的名称有些不直观。例如Enum.HumanoidStateType.Running描述了一个状态,其中人形的腿在地上,包括站立时。

由于 Humanoid 的默认行为,某些状态将在设置时自动更改。例如:

还参阅Humanoid:SetStateEnabled()以启用或禁用特定状态,并参阅Humanoid:GetState()获取当前人形状状态。

参数

Class.Humanoid 要执行的 Humanoid

默认值:"None"

返回

void

代码示例

Double Jump

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

EquipTool

void

此函数使 Humanoid 装备所给予的 Tool

下面的例子会导致一个 Player 装备一个名为 Workspace 的工具在 Class.Workspace 中。


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

当这个函数调用时,人形会自动卸下其当前已装备的任何 Tools

虽然它们会被装备,但 ToolsTool.RequiresHandle 不会 funcionar 如果没有把手柄,无论是否使用这个功能来装备它们

还请参阅:

参数

tool: Instance

Class.Tool 以装备。


返回

void

GetAccessories

此函数将返回一个 Accessory 对象,其父是当前穿戴的人形的对象。所有 such Accessory 对象将包含,无论是否附加。

如果 Humanoid 没有 Accessory 对象,将返回一个空的阵列。

还参阅Humanoid:AddAccessory()来将 Accessory 附加到一个人形的父元素。


返回

一个用于父亲的 Accessory 对象,可以作为父亲的父元素亲。

代码示例

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

此函数返回一个人形的暂存 HumanoidDescription 复制,其描述其当前外观。这可以用于快速确定角色的外观并将其分配给其他角色使用 Humanoid:ApplyDescription() 函数。

还见


返回

GetBodyPartR15

此函数返回 Enum.BodyPartR15Part 是,或 Enum.BodyPartR15.Unknown 如果零件不是 R15 身体部分,此函数允许开发人员独立于实际身体部位名称,返回枚列。

它可以与 Humanoid:ReplaceBodyPartR15() 一起使用。例如,如果玩家的身体部位触摸到某个东西,此函数将返回获取一个部件实例。开发人员可以然后查看哪个部位是, 例如头或手臂。然后,根据那个部位是否显示伤害,开发人员可以执行一些游戏玩法行动或替换其部分 - 显示

此函数可能对于包含重要命中位置的游戏有用。例如,它可以用于确定玩家是否在腿上受伤,然后根据受伤进行慢速。

参数

part: Instance

检查指定部分是否为 R15 身体部件。


返回

如果部件不是身体部件,R15 零件类型或未知。

GetLimb

此函数返回与给定 Enum.Limb 函数相关的 Part 枚列表,其中 R15 和 R6 都有使用:


-- 对于 R15
print(humanoid:GetLimb(character.LeftUpperLeg)) -- 左腿列表
print(humanoid:GetLimb(character.LeftLowerLeg)) -- 左腿列表
print(humanoid:GetLimb(character.LeftFoot)) -- 左腿列表
-- 对于 R6
print(humanoid:GetLimb(character:FindFirstChild("Left Leg"))) -- Enum.Limb.LeftLeg

注意,如果零件的父父元素未设置为人形,Humanoid:GetLimb() 将抛出一个错误。

参数

part: Instance

Class.Part 的 Enum.Limb 将要被检索。


返回

Enuem.Limb 部分与 Enuem.Limb 部分相对应。

代码示例

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


返回

写入并联

此函数返回人形当前的 Enum.HumanoidStateType,描述人形当前正在执行的活动,例如跳跃或游泳。

还参阅Humanoid:SetStateEnabled()以启用或禁用特定状态,并参阅Humanoid:ChangeState()更改当前人形状态。


返回

代码示例

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

写入并联

GetStateEnabled 函数返回是否启用 Enum.HumanoidStateTypeHumanoid

人形状态描述人形当前正在执行的活动。

当特定 Enum.HumanoidStateType 被禁用时,人形始终无法进入该状态。这是无论使用 Humanoid:ChangeState() 或 Roblox 内部人形验证码进行状态更改的情况。

还请参阅:

参数


返回

是否启用给出的 Enum.HumanoidStateType

代码示例

Setting and Getting Humanoid States

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

Move

void

此函数使 Humanoid 走在指定的 Vector3 方向。

默认情况下,方向是世界术条款,但如果 relativeToCamera 参数是 true,方向是相对于 CFrame 的 2>Class.Workspace.CurrentCamera|CurrentCamera2> 的。 作为 Roblox 中的负


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

当此函数调用时,Humanoid将移动直到函数再次调用。但如果使用默认控制脚本,则在玩家Characters上调用时,此函数将被覆盖。这可以通过使用默认控制脚本或使用 RunService:BindToRenderStep() (见示例)来避免。

此函数可以在服务器上调用,但这只能在服务器拥有 网络所有权 的人形组合的情况下进行。

还请参阅 Humanoid:MoveTo() 使 Humanoid 走到一个点,并 Player:Move() 使这个函数具有效力。

参数

moveDirection: Vector3

向内走的方向。

relativeToCamera: bool

如果 moveDirection 参数应该被视为相对于 CurrentCamera 的话,那么它就会设置为 2>true2>。

默认值:false

返回

void

代码示例

Moving a Humanoid Forwards

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

MoveTo

void

此函数使 Humanoid 尝试设置 Humanoid.WalkToPointHumanoid.WalkToPart 属性,以便走向指定位置。

位置 和 零件 参数与 Humanoid.WalkToPoint 和 1>Class.Humanoid.WalkToPart1> 将设置。

如果 零件 参数是指定的,Humanoid 仍然会尝试走到点。 但如果零件移动,那个点的 Humanoid 将会移动到同一位置 1> 相对于零件1>。 如

人形体的 达到目标状态 将在 8 秒后结束,如果它没有达到目标。这是为了确保 NPC 不会被卡住等待 Humanoid.MoveToFinished 发触发。如果您不想让这种情况发生,您应该反复调用 MoveTo 以使时间保持重置。

MoveTo() 结束,如果满足以下任意条件:

  • 角色到达目的地。

  • 角色卡住,八秒计时器结束。

  • Class.Humanoid.WalkToPoint 或 Humanoid.WalkToPart 的值。

  • 一个脚本调用 Humanoid:Move() 使用新的 moveDirection 参数。

  • 一个脚本更改 CFrame 属性, RootPart

参数

location: Vector3

设置 Humanoid.WalkToPoint 的位置。

part: Instance

Class.BasePart 设置 Humanoid.WalkToPart

默认值:"nil"

返回

void

代码示例

Humanoid MoveTo Without Time out

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

RemoveAccessories

void

此功能将所有 Accessory 对象从人形的父元素亲身上移除。对于玩家 Characters,这将移除所有帽子和其他配件。

此函数将 Accessory 对象移除为 Instance:Destroy() ,意味着配件的父级 Parent 已设置为 2>nil2> 并锁定。

还参阅Humanoid:AddAccessory()以附加Accessory,并参阅Humanoid:GetAccessories()获取所有1>Class.Accessory1>对象。


返回

void

代码示例

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

在人形体中,动态地将 R15/Rthro 腿部部分替换为另一部分。该部分将自动缩放为正常。

此函数有助于在游戏中修改角色或从基地骨架中建立角色。相关函数 GetBodyPartR15 可以在使用此函数时来到帮助。

零件的名称应与 BodyPartR15 枚列中的名称匹配。

参数

要替换的身体部分。Enum.BodyPartR15.Unknown 将失败。

part: BasePart

Class.Part Instance 将对角色的父级。


返回

SetStateEnabled

void

此函数设置是否启用 Enum.HumanoidStateType 中的 Humanoid 。当特定的 Enum.HumanoidStateType 被禁用时,2>Class.Humanoid2> 无法进入该状态。

请注意,使用 SetStateEnabled() 在服务器上不会复制更改到客户端,也不会相反。

参数

enabled: bool

true 如果 state 要启用,false 如果 0> state0> 要禁用。


返回

void

代码示例

Jump Cooldown

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

TakeDamage

void

此函数将 Humanoid.HealthHumanoid 降低给予的 number 如果它不受到 2>Class.ForceField2> 的保护

此函数接受负值为 数量 参数。这将增加人形的 Humanoid.Health 。但是此只会有效,如果没有 ForceField 存在。

ForceField如何保护免受TakeDamage

Class.Humanoid 被视为受到保护,如果 ForceField 满足以下条件之一:

无论任何 Humanoid 现有,设置 ForceFields 直接。

了解有关 ForceFields 如何保护 Humanoids 的更多信息,请参阅 ForceField 页面

参数

amount: number

该伤害或者要从 Humanoid.Health 中扣除的金额。


返回

void

代码示例

Damaging a Humanoid

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

UnequipTools

void

此功能使用 Tool 当前装备的任何 Humanoid

未装备的 Tool 将被父级到 BackpackPlayer 与 1> Class.Humanoid1> 的。

如果没有 Tool 装备,此功能将无法使用。

虽然 Tools 可以装备NPC(非玩家角色),但此功能仅在 Humanoids 与相应的 Player 上工作。 这是因为需要一个 1> Class.Backpack1> 对不装备的 4> Class.Tool4>

还请参阅:


返回

void

代码示例

Unequip Tool Keybind

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

ApplyDescription

void
暂停

这个生成函数使角色的外观与通过 HumanoidDescription 中传出的匹配。 一个复制传出的 HumanoidDescription 是为 HumanoidDescription 保留的 1> Class.Humanoid1> 。

此函数通过假设仅此函数用于更改角色的外观,而且在其他方式之间不会进行更改。 如果在更改角色之间进行更改。 那么此函数可能无法准确地反射在 HumanoidDescription 中所传达的内容。 如果您

还见

参数

humanoidDescription: HumanoidDescription

您想要设置角色匹配的 HumanoidDescription 实例。

assetTypeVerification: Enum.AssetTypeVerification
默认值:"Default"

返回

void

ApplyDescriptionReset

void
暂停

这个输出函数使角色的外观与通过 HumanoidDescription 中的匹配,即使在外部更改后。一个通过 HumanoidDescription 传输的副本已作为 HumanoidDescription 的 1> Class.HumanoidDescription1> 在 4> Class.Humanoid4> 中保存。

此功能总是确保角色反映通过 HumanoidDescription 系统(例如

参数

humanoidDescription: HumanoidDescription

您想要设置角色匹配的 HumanoidDescription 实例。

assetTypeVerification: Enum.AssetTypeVerification
默认值:"Default"

返回

void

PlayEmote

暂停

如果表情因素不能播放,因为人形描述中找不到表情名,这个 API 将显示错误。 API 将返回 true 表示表情成功播放。

参数

emoteName: string

游玩放表情的 emote 的名称。


返回

成功播放。

活动

ApplyDescriptionFinished

参数

description: HumanoidDescription

Climbing

Humanoid 正在快速上升时,它会发射。

Humanoids 可以攀爬由 PartsTrussParts 制成的梯子。

Humanoids 攀爬 70% 的它们的 Humanoid.WalkSpeed .

此事件不会总是在 Humanoid 停止攀爬时发生。

还请参阅:

参数

speed: number

Class.Humanoid 当前攀爬的速度。


代码示例

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

这个事件会触发,当 Humanoid 死亡,通常是 Humanoid.Health 达到 0 时。 这可能是由于将他们的头从他们的 Humanoid.Torso 中分离或直接设置健康属性。

此事件仅发生 if the HumanoidWorkspace 的后代。如果 Dead2>枚列式.HumanoidStateType2> 已禁用,它将不会发触发。


代码示例

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

下降事件发生,当 Humanoid 进入和离开 FallingDown``Enum.HumanoidStateType

GettingUp 状态启用后 3 秒后, FallingDown 将进入 1> GettingUp1> 状态。当此事件发生时,此事件将发生一个 4> 有效值为4> 的 7> 值

参数

active: bool

描述Humanoid是否正在进入或离开FallingDown``Enum.HumanoidStateType


FreeFalling

此事件发生,当 Humanoid 进入或离开 Freefall``Enum.HumanoidStateType

aktiv 参数表示是否进入或离开 Humanoid 的状态。

虽然 Freefall 状态通常会在 Humanoid 到达地面时结束,但此事件可能会在 Class.Humanoid 正在下降时使用

参数

active: bool

Class.Humanoid 是否正在进入或离开 Freefall``Enum.HumanoidStateType


GettingUp

此事件发生,当 Humanoid 进入或离开 Enum.HumanoidStateType.GettingUp 状态,这是激活 Humanoid 很快之后的过渡状态,也就是 1>Class.Humanoid1> 进入

Humanoid 尝试重新启动时,此事件首先发生使用 active 参数的 true 在稍后再次启动时使用 2>active2> 参数的 5>force5> 。

要强制一个 Humanoid 落下,请使用 Humanoid:ChangeState() 函数,其中包含 Enum.HumanoidStateType.FallingDown

参数

active: bool

Class.Humanoid 是否正在进入或离开 GettingUp``Enum.HumanoidStateType


HealthChanged

此事件发生当 Humanoid.Health 变更时。 但是,如果生命值增加为等值或大于 Humanoid.MaxHealth ,它不会发生。

Humanoid.Health 达到零时,Humanoid 将死触发,并且 Humanoid.Died 事件将发生。此事件将以零的价值发生。

参数

health: number

Class.Humanoid.Health 的新值。


代码示例

Humanoid.HealthChanged

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

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

Jumping

这个事件发生 when the Humanoid 进入和离开 Jumping``Enum.HumanoidStateType

Humanoid 跳跃时,此事件会触发一个 active 参数的 true 之前稍后再次触发一个 <

您可以使用 Humanoid:SetStateEnabled() 函数禁用跳跃。

参数

active: bool

Class.Humanoid 是否正在进入或离开 Jumping``Enum.HumanoidStateType


MoveToFinished

此事件触发时,Humanoid完成走向目标所需的步行走路,并且Humanoid.WalkToPointHumanoid.WalkToPart属性。

Class.Humanoid.WalkToPoint 和 Humanoid.WalkToPart 属性可以单独设置,或使用 Humanoid:MoveTo() 函数。

如果 Humanoid 在 8 秒内达到目标,此事件将返回 Class.Humanoid:Reached 作为真。如果目标未达到 8 秒,Humanoid 将停止走路,并且 2>Class.Humanoid:Reached2> 将变为错误。此时间可以通

参数

reached: bool

一个Boolean指示是否达到Humanoid 是否达到目标。 如果Humanoid 超过目标,1> 否1> 如果目标在沿途时间超过目标,4> 不4> 如果目标在沿途时间超过目标,7> 不7> 如果目标在沿途时间超过目标,0> 不0> 如果目标在


代码示例

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

此事件发生 when the Humanoid 进入或离开 PlatformStanding``Enum.HumanoidStateType

HumanoidPlatformStanding 状态时, Humanoid.PlatformStand 属性将是 1> 真的1> 。

虽然 Humanoid.PlatformStand 设置为 ,但 Humanoid 将无法移动工具。请参阅页面 1> Class.Humanoid.PlatformStand1> 获取更多信息。

平台站Enum.HumanoidStateType与现在已禁用的Platform部分相关。 不过它仍然可以由开发人员使用。

参数

active: bool

Class.Humanoid 是否正在进入或离开 PlatformStanding``Enum.HumanoidStateType


Ragdoll

这个事件发生 when the Humanoid 进入或离开 Ragdoll``Enum.HumanoidStateType

active 参数将有 truefalse 来表示输入或离开。

使用 Humanoid:SetStateEnabled() 来禁用获取状态以保持在 Ragdoll 状态。

还请参阅:

参数

active: bool

Class.Humanoid 是否正在进入或离开 Ragdoll``Enum.HumanoidStateType


Running

此事件触发,当 Humanoid 正在运行更改时的速度。

在运行 Humanoids 覆盖时,它们的 Humanoid.WalkSpeed 在每秒钟 per 秒。

Humanoid 停止运行此事件时,它将以 0 的速度发射。

还请参阅:

参数

speed: number

Class.Humanoid 的运行速度。


代码示例

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

此事件发生,当 HumanoidSeatVehicleSeat 坐下或起来时。

当角色与座椅接触时,他们会被附在座椅上,并且会播放坐下动画。有关更多信息,请参阅Seat页面。

  • 如果角色坐下,active 参数将是 真的 ,而 currentSeatPart 将是他们当前坐下的座位。
  • 如果角色从座位上起来,active 参数将为 错误 ,而 currentSeatPart 为空。

还请参阅:

参数

active: bool

Class.Humanoid 坐下时是真的。

currentSeatPart: BasePart

如果座位坐下,Humanoid就会坐下。


代码示例

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

Humanoid 状态发生变更时,此事件会触发。

由于没有闲置空闲”的人形状态,您应该使用 Humanoid.Running 事件或听 RootPart 部分的 Velocity 来确定工作时间,当 2> Class.Humanoid2> 处于静止状态。

还见

参数

人形的以前状态输入。

人形当前状态类输入。


代码示例

Jumping Particles

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

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

StateEnabledChanged

Humanoid:SetStateEnabled() 被调用时,状态更改事件触发。

参数包括Enum.HumanoidStateType 以及一个指示此状态是否已启用的Boolean。

还请参阅:

参数

Enum.HumanoidStateType 为启用状态所变更的 EnуHumanoidStateType 。

isEnabled: bool

启用状态的话,则真。


代码示例

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

Humanoid 正在搞破坏时,此事件不会发生,并且不应该由开发人员使用

这个事件是发生在 Humanoid 进入或离开 StrafingNoPhysics``Enum.HumanoidStateType 时。

Humanoid 进入 StrafingNoPhysics 状态时,此事件会发生在 使用 2> 激活2> 参数的 5> true5> 。 事件会再次发生,直到 8>Class.Humanoid</

这个事件与 StrafingNoPhysics Humanoid 状态相关,在 Class.Humanoid:ChangeState() 使用时不会发生 1> 火灾1> ,当 4> Class.Humanoid4>

参数

active: bool

Class.Humanoid 是否正在进入或离开 StrafingNoPhysics``Enum.HumanoidStateType


Swimming

HumanoidTerrain 水域游泳时,此事件会触发。

Humanoids 在 87.5% 的 Humanoid.WalkSpeed 下游泳。

Humanoid 停止游泳时,此事件不会总是以 0 的速度发射。

还请参阅:

参数

speed: number

Class.Humanoid正在游泳的速度。


Touched

当一个人形的 limb 与另一个 BasePart 接触时,此事件会触发。 BasePart , которое接触到 limb ,以及 limb 本身,是给予的。

Humanoid 的手臂与自己接触时不会触发此事件。

替换

虽然 Humanoid.Touched 事件有用,但您应该考虑是否有更好的替代方案。

  • 在大多数情况下,建议您连接一个 BasePart.Touched 事件为 BaseParts 的 interest,因为人形会在移动时不断发射。例如,在弹球游戏中,您将
  • 当试图在 Class.Humanoid 落地时, Humanoid 事件更适合。或者,您可以检查 Humanoid.StateChanged 来确認是否有人正在使用非空氣材料。

注释

参数

touchingPart: BasePart

Class.BasePart 与 Humanoid 已经接触。

humanoidPart: BasePart

被触摸的 Humanoid 的臂部。


代码示例

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)