人形是一种特殊对象,它使模型具有角色的功能。它向模型授予物理上走
R6
- 使用 6 个部件为手臂的基本角色网格。
- Head 零件必须附于名为 Torso 的零件,否则人形即将立即死亡。
- BodyPart 外观使用 CharacterMesh 对象应用。
- 某些属性,例如 Humanoid.LeftLeg 和 Humanoid.RightLeg,只能使用 R6。
R15 列车
- 比 R6 复杂,但也更灵活和更稳定。
- 用 15 个零件为手臂。
- Head 部分必须附在 UpperTorso 或人形即将立即死亡。
- 身体部件的外观必须直接组装。
- 可以使用特殊的 NumberValue 对象在人形体内动态调整。
- 人形会自动创建 Vector3Value 个名为 OriginalSize 的对象,每个腿部内。
- 如果 NumberValue 在人形体内拥有父级,并且以关注中/正在关注列中命名,它将被用于控制缩放功能:
- 身体深度
- 身体高度
- 身体宽度
- 头部
代码示例
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)
概要
属性
设置角色在移动设备上击中障碍时是否会自动跳跃。
自动旋转将确定是否会自动旋转以面向他们所移动的方向。
启用时,AutomaticScalingEnabled 会在人形子的子弹数量更改时导致角色大小的变更。
决定是否在Enum.HumanoidStateType.Dead状态下人形的关节会断裂。
在 Camera 对象设置为此人形时,应用了 Offset 对相机的对象位置。
控制人形的名称和健康显示的距离行为。
设置人形体的文本,显示在他们头上。
描述 Enum.Material 当前上的 Humanoid。如果 Humanoid 未站在任何东西上,该属性的值将为 1>Air1>。
描述人形在范围上的当前健康状况[0,Humanoid.MaxHealth]。
与 DisplayDistanceType 属性一起使用,用于控制人形的生命值条可以从哪个距离显示的问题。
控制人形体的生命值条可以显示时。
确定Humanoid.RootPart应该从地面上的距离。
如果 true , Humanoid 跳跃向上。
提供对 Humanoid 跳跃高度的控制。
确定跳跃时Humanoid的上向力是多少。
人形的最大值是 Health 。
人形可以走的最大倾斜角。
描述 Humanoid 正在走的方向。
与 Humanoid.DisplayDistanceType 属性配合使用,用于控制人形名称可以从哪里查看的距离。
控制是否可以在墙壁或其他物体后看到人形的名称和健康条。
决定是否在 Humanoid 当前在 Enum.HumanoidStateType.PlatformStanding 状态。
允许开发人员禁用玩家 Character|character 在 Neck Motor6D 被移除或断开即死亡。
描述使用 legacy R6 角骨架 Rig 或新 R15 角色 Ri骨架 的是否。
一个引用人形的 人形根部分 对象的引用。
如果有的话,对座位 Humanoid 的引用。
描述 Humanoid 是否当前坐下。
描述使用 Class.Tool 控制世界上最后一个 Humanoid 的位置,以及使用 Tool 控制世界上最后一个 1> Class.Player1> 的位置。
确定是否使用 JumpHeight (否) 或 Humanoid.JumpPower (真实) 属性。
描述人形最大移动速度每秒钟的勾数。
一个指向一个人形体的位置的引用。
一个人形正在试图达到的位置,在调用 Humanoid:MoveTo() 后。
方法
将指定的 Accessory 附加到人形的父元素级。
通过在人形角色中添加 Class.Attendance 对象来组装一个 Class.Motor6D 的共同树。
将 Humanoid 设置为进入 Enum.HumanoidStateType 。
返回一个包含人形的父亲当前穿戴的Accessory对象的阵列。
返回一个人形的暂存 HumanoidDescription ,其描述了它的当前外观。
将身体部分传递给此功能(身体部分应该是Humanoid的子女,并且是Class.Part的子女)以获得Enum.BodyPartR15的Part。
返回人形当前的 Enum.HumanoidStateType 。
返回是否启用 Enum.HumanoidStateType 的 Humanoid。
使 Humanoid 走在指定的方向。
使 Humanoid 尝试通过设置 Humanoid.WalkToPoint 和 Humanoid.WalkToPart 属性来尝试走向指定位置。
移除所有 Accessory 穿戴的人形器的父元素亲。
动态地将人形身体部分替换为其他部分。
设置是否启用 Enum.HumanoidStateType 中的 Humanoid 。
将 Humanoid.Health 的 Humanoid 降低给给予的 number 如果它不受到 2>Class.ForceField2> 的保护。
- ApplyDescription(humanoidDescription : HumanoidDescription,assetTypeVerification : Enum.AssetTypeVerification):void
使其角色的外观与通过的 HumanoidDescription 一致。
- ApplyDescriptionReset(humanoidDescription : HumanoidDescription,assetTypeVerification : Enum.AssetTypeVerification):void
使角色的外观与通过 HumanoidDescription 中的匹配,即使是在外部更改后。
播放表情并返回,如果成功运行。
活动
当 Humanoid 正在快速上升时,它会发射。
在 Humanoid 死亡时触发。
当 Humanoid 进入或离开 FallingDown``Enum.HumanoidStateType 时。
当 Humanoid 进入或离开 Freefall``Enum.HumanoidStateType 时触发。
当 Humanoid 进入或离开 GettingUp``Enum.HumanoidStateType 时触发。
当 Humanoid.Health 更改(或设置 Humanoid.MaxHealth)时触发。
当 Humanoid 进入和离开 Jumping``Enum.HumanoidStateType 时。
当 Humanoid 完成行走至 Humanoid:MoveTo() 所声明的目标时,发生。
当 Humanoid 进入或离开 PlatformStanding``Enum.HumanoidStateType 时触发。
当 Humanoid 进入或离开 Ragdoll``Enum.HumanoidStateType 时触发。
当 Humanoid 运行时速度变化时触发。
发生了一个 Class.Humanoid 或 Seat 或 VehicleSeat 或 1> 起来了1> 或 4> 坐下了4> 或 7> 站了7> 或 0> 坐下了0> 或 3> 站了3> 或 6> 坐下了6> 或 Humanoid9> 或 2> 坐下了2> 或 5> 站了5> 或 8>
在 Humanoid 状态发生变更时触发。
在 Humanoid:SetStateEnabled() 被调用时,如果 Humanoid 被调用,
当 Humanoid 进入或离开 StrafingNoPhysics``Enum.HumanoidStateType 时。
在 Humanoid 水中游泳速度变化时触发。
当一个人形的手臂与另一个 BasePart 接触时,火焰会发生。
属性
AutoJumpEnabled
自动跳转启用 设置是否启用 Humanoid 在走向它所走向的障碍物时自动跳转。
当前属性只会在以下条件下工作:
- 人形的角色模型是一个 Player.Character 的 Class.Player 。
- 该玩家正在使用触摸控制。
当玩家的角色生成时,该属性的值与玩家的 Player.AutoJumpEnabled 属性匹配 - 这在 turn 的 Class.StarterPlayer.AutoJumpEnabled 属性。
代码示例
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>
旋转类型 | 行为 | 上下文 |
---|
代码示例
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
人形有六个子弹值包括 BodyDepthScale , BodyHeightScale , BodyProportionScale , 2> BodyTypeScale2> , 5> BodyWidthScale5> , 8> 8> HeadScale</
CameraOffset
CameraOffset 属性指定相镜头的主题位置的 Offset 当其 Camera.CameraSubject 设置为此 Humanoid 。
对象空间中的 Offset 适用于 (0, 10, 0) 的人形根部分。例如,一个 Offset Vector3 值的 (0, 10, 0) 将相玩家对人形根部分上移 10 格。
代码示例
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
DisplayDistanceType 属性控制人形的名称和健康显示的距离行为。此属性使用 Enum.HumanoidDisplayDistanceType 枚级配,其中每个值都有自己的一套规则:
- 当设置为 None 时,人形的名称和健康条不会在任何情况下显示。
请参阅角色名称/健康显示获取有关控制角色名称和生命值条的完整指南。
代码示例
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 当前所在位置。它与常规 Humanoid 和 Parts 体素 работа。它使用与 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 的角色模型必须能够与地面碰撞,否则它将不会被检测到。
- 您无法测试 Humanoid 是否使用此属性来游泳。您应该使用其 Humanoid:GetState() 函数。
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 属性与 人形图形.显示距离 属性共同使用的,用于控制人形图形的健康条可以从哪个距离看到。
请参阅角色名称/健康显示获取有关控制角色名称和生命值条的完整指南。
HealthDisplayType
此属性控制一个人形的生命值条可以显示。 默认情况下,此属性设置为 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
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°,因此人形可以攀爬任何他们想要的斜坡。
代码示例
local player = game.Players.LocalPlayer
local char = player.CharacterAdded:wait()
local h = char:FindFirstChild("Humanoid")
h.MaxSlopeAngle = 30
MoveDirection
移动方向 是一个只读的属性,描述一个 Humanoid 正在走路的方向,作为单位向量或零长度矢量力。方向在世界空间中描述。
因为这个属性是只读的,它不能由 Script 或 LocalScript 设置。
代码示例
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 。
请参阅角色名称/健康显示获取有关控制角色名称和生命值条的完整指南。
代码示例
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 时,人形在一个状态,其重力不能移动工具。 此状态与坐下类似,但跳跃会从人形状态中解除。
RigType
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> 如果人形未坐在座椅上。
注意:
- 对于描述 Humanoid 是否当前坐下或不坐下的Boolean,请参阅 Humanoid.Sit
Sit
坐下属性是一个Boolean,该属性表示是否有 Humanoid 正在坐下。 Humanoids 可以通过将此属性值设置为 true 被强迫到坐下状态。如果 Humanoid 不被附在座位上,它
注意:
- Class.Humanoid 可以使用 VehicleSeat 或 Humanoid 获取,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 度。
注释
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 以确保时间到过后仍会保持重置。
代码示例
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
此方法将指定的 Accessory 添加到人形的父元素级。
当此方法被调用时,一个 Accessory 会被附在角色上,通过搜索人形的父
如果找不到所需的 Attachment ,那么 Accessory 将继续作为人形的父级,但将不会被分离。
通常,配件焊接在服务器上创建,但它们可以在客户端在某些情况下创建。在这些情况下,客户端对 AddAccessory() 的调用可能无法产生所需的行为,您可以使用 BuildRigFromAttachments() 来
参数
返回
代码示例
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
此方法将 Motor6D 的树组成一个 Humanoid 的共同体。 需要 Motor6D 共同体才能播放 2>Class.Animation|Animations2> 。
从人形的 RootPart 开始,此方法收集所有 Attachments 在当前部分的父级,其名称以 装备附件 Humanoid: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)
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
此函数使 Humanoid 进入给定的 Enum.HumanoidStateType,描述 Humanoid 当前正在执行的活动。
请查看Enum.HumanoidStateType页面以获取更多关于特定状态的信息,因为有些状态的名称有些不直观。例如Enum.HumanoidStateType.Running描述了一个状态,其中人形的腿在地上,包括站立时。
由于 Humanoid 的默认行为,某些状态将在设置时自动更改。例如:
- 将状态设置为 Enum.HumanoidStateType.Swimming 时,当人形不在水中时,将自动设置为 Enum.HumanoidStateType.GettingUp。
- 未使用时,将状态设置为 Enum.HumanoidStateType.PlatformStanding 会导致人形状状态自动设置为 Enum.HumanoidStateType.Running。
还参阅Humanoid:SetStateEnabled()以启用或禁用特定状态,并参阅Humanoid:GetState()获取当前人形状状态。
参数
Class.Humanoid 要执行的 Humanoid。
返回
代码示例
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
下面的例子会导致一个 Player 装备一个名为 Workspace 的工具在 Class.Workspace 中。
local Players = game:GetService("Players")local player = Players:FindFirstChildOfClass("Player")if player and player.Character thenlocal humanoid = player.Character:FindFirstChildWhichIsA("Humanoid")if humanoid thenlocal tool = workspace:FindFirstChild("Tool")if tool thenhumanoid:EquipTool(tool)endendend
当这个函数调用时,人形会自动卸下其当前已装备的任何 Tools
虽然它们会被装备,但 Tools 的 Tool.RequiresHandle 不会 funcionar 如果没有把手柄,无论是否使用这个功能来装备它们
还请参阅:
- 要卸下工具,请使用 Humanoid:UnequipTools()
参数
Class.Tool 以装备。
返回
GetAccessories
此函数将返回一个 Accessory 对象,其父是当前穿戴的人形的对象。所有 such Accessory 对象将包含,无论是否附加。
如果 Humanoid 没有 Accessory 对象,将返回一个空的阵列。
还参阅Humanoid:AddAccessory()来将 Accessory 附加到一个人形的父元素。
返回
代码示例
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() 函数。
还见
- Players:GetHumanoidDescriptionFromUserId() 返回一个 HumanoidDescription 描述用户通过的头像。
- Players:GetHumanoidDescriptionFromOutfitId() 返回一个 HumanoidDescription whose 参数是初始化到服务器端服装资产的参数与其匹配。
- Player:LoadCharacterWithHumanoidDescription() 生成一个从通过的 HumanoidDescription 中获得的玩家。
返回
GetBodyPartR15
此函数返回 Enum.BodyPartR15 或 Part 是,或 Enum.BodyPartR15.Unknown 如果零件不是 R15 身体部分,此函数允许开发人员独立于实际身体部位名称,返回枚列。
它可以与 Humanoid:ReplaceBodyPartR15() 一起使用。例如,如果玩家的身体部位触摸到某个东西,此函数将返回获取一个部件实例。开发人员可以然后查看哪个部位是, 例如头或手臂。然后,根据那个部位是否显示伤害,开发人员可以执行一些游戏玩法行动或替换其部分 - 显示
此函数可能对于包含重要命中位置的游戏有用。例如,它可以用于确定玩家是否在腿上受伤,然后根据受伤进行慢速。
参数
检查指定部分是否为 R15 身体部件。
返回
如果部件不是身体部件,R15 零件类型或未知。
GetLimb
此函数返回与给定 Enum.Limb 函数相关的 Part 枚列表,其中 R15 和 R6 都有使用:
-- 对于 R15print(humanoid:GetLimb(character.LeftUpperLeg)) -- 左腿列表print(humanoid:GetLimb(character.LeftLowerLeg)) -- 左腿列表print(humanoid:GetLimb(character.LeftFoot)) -- 左腿列表-- 对于 R6print(humanoid:GetLimb(character:FindFirstChild("Left Leg"))) -- Enum.Limb.LeftLeg
注意,如果零件的父父元素未设置为人形,Humanoid:GetLimb() 将抛出一个错误。
参数
返回
Enuem.Limb 部分与 Enuem.Limb 部分相对应。
代码示例
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
GetState
此函数返回人形当前的 Enum.HumanoidStateType,描述人形当前正在执行的活动,例如跳跃或游泳。
还参阅Humanoid:SetStateEnabled()以启用或禁用特定状态,并参阅Humanoid:ChangeState()更改当前人形状态。
返回
代码示例
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.HumanoidStateType 的 Humanoid 。
人形状态描述人形当前正在执行的活动。
当特定 Enum.HumanoidStateType 被禁用时,人形始终无法进入该状态。这是无论使用 Humanoid:ChangeState() 或 Roblox 内部人形验证码进行状态更改的情况。
还请参阅:
- 当人形状状态启用或禁用时,发生的事件称为 Humanoid.StateEnabledChanged
- 要启用或禁用 Humanoid 状态,请使用 Humanoid:SetStateEnabled()
参数
返回
是否启用给出的 Enum.HumanoidStateType。
代码示例
local humanoid = script.Parent:WaitForChild("Humanoid")
-- Set state
humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, false)
-- Get state
print(humanoid:GetStateEnabled(Enum.HumanoidStateType.Jumping)) -- false
Move
此函数使 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 参数应该被视为相对于 CurrentCamera 的话,那么它就会设置为 2>true2>。
返回
代码示例
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
此函数使 Humanoid 尝试设置 Humanoid.WalkToPoint 和 Humanoid.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 参数。
参数
设置 Humanoid.WalkToPoint 的位置。
Class.BasePart 设置 Humanoid.WalkToPart 。
返回
代码示例
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
此功能将所有 Accessory 对象从人形的父元素亲身上移除。对于玩家 Characters,这将移除所有帽子和其他配件。
此函数将 Accessory 对象移除为 Instance:Destroy() ,意味着配件的父级 Parent 已设置为 2>nil2> 并锁定。
还参阅Humanoid:AddAccessory()以附加Accessory,并参阅Humanoid:GetAccessories()获取所有1>Class.Accessory1>对象。
返回
代码示例
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 将失败。
返回
SetStateEnabled
此函数设置是否启用 Enum.HumanoidStateType 中的 Humanoid 。当特定的 Enum.HumanoidStateType 被禁用时,2>Class.Humanoid2> 无法进入该状态。
请注意,使用 SetStateEnabled() 在服务器上不会复制更改到客户端,也不会相反。
参数
Enum.HumanoidStateType 将启用或禁用。
true 如果 state 要启用,false 如果 0> state0> 要禁用。
返回
代码示例
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
此函数将 Humanoid.Health 的 Humanoid 降低给予的 number 如果它不受到 2>Class.ForceField2> 的保护
此函数接受负值为 数量 参数。这将增加人形的 Humanoid.Health 。但是此只会有效,如果没有 ForceField 存在。
ForceField如何保护免受TakeDamage
Class.Humanoid 被视为受到保护,如果 ForceField 满足以下条件之一:
- Class.ForceField 与 Instance.Parent 共享相同的 Humanoid
- Class.ForceField 是 Humanoid.RootPart 的父级,Humanoid
无论任何 Humanoid 现有,设置 ForceFields 直接。
了解有关 ForceFields 如何保护 Humanoids 的更多信息,请参阅 ForceField 页面
参数
该伤害或者要从 Humanoid.Health 中扣除的金额。
返回
代码示例
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
未装备的 Tool 将被父级到 Backpack 的 Player 与 1> Class.Humanoid1> 的。
如果没有 Tool 装备,此功能将无法使用。
虽然 Tools 可以装备NPC(非玩家角色),但此功能仅在 Humanoids 与相应的 Player 上工作。 这是因为需要一个 1> Class.Backpack1> 对不装备的 4> Class.Tool4>
还请参阅:
- 要装备一个 Tool ,而不是使用 Humanoid:EquipTool()
返回
代码示例
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
这个生成函数使角色的外观与通过 HumanoidDescription 中传出的匹配。 一个复制传出的 HumanoidDescription 是为 HumanoidDescription 保留的 1> Class.Humanoid1> 。
此函数通过假设仅此函数用于更改角色的外观,而且在其他方式之间不会进行更改。 如果在更改角色之间进行更改。 那么此函数可能无法准确地反射在 HumanoidDescription 中所传达的内容。 如果您
还见
- Players:GetHumanoidDescriptionFromUserId() 返回一个 HumanoidDescription 描述用户通过的头像。
- Players:GetHumanoidDescriptionFromOutfitId() 返回一个 HumanoidDescription whose 参数是初始化到服务器端服装资产的参数与其匹配。
- Player:LoadCharacterWithHumanoidDescription() 生成一个从通过的 HumanoidDescription 中获得的玩家。
参数
您想要设置角色匹配的 HumanoidDescription 实例。
返回
ApplyDescriptionReset
这个输出函数使角色的外观与通过 HumanoidDescription 中的匹配,即使在外部更改后。一个通过 HumanoidDescription 传输的副本已作为 HumanoidDescription 的 1> Class.HumanoidDescription1> 在 4> Class.Humanoid4> 中保存。
此功能总是确保角色反映通过 HumanoidDescription 系统(例如
参数
您想要设置角色匹配的 HumanoidDescription 实例。
返回
活动
Climbing
当 Humanoid 正在快速上升时,它会发射。
Humanoids 可以攀爬由 Parts 或 TrussParts 制成的梯子。
Humanoids 攀爬 70% 的它们的 Humanoid.WalkSpeed .
此事件不会总是在 Humanoid 停止攀爬时发生。
还请参阅:
- 游泳和运行时,请参阅Humanoid.Swimming和Humanoid.Running事件
- 您还可以使用 Humanoid 事件来检测 Humanoid.StateChanged 是否正在攀爬
- 您可以使用 Humanoid:SetStateEnabled() 函数禁用攀爬
参数
Class.Humanoid 当前攀爬的速度。
代码示例
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 Humanoid 是 Workspace 的后代。如果 Dead2>枚列式.HumanoidStateType2> 已禁用,它将不会发触发。
代码示例
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> 值
参数
FreeFalling
此事件发生,当 Humanoid 进入或离开 Freefall``Enum.HumanoidStateType 。
aktiv 参数表示是否进入或离开 Humanoid 的状态。
虽然 Freefall 状态通常会在 Humanoid 到达地面时结束,但此事件可能会在 Class.Humanoid 正在下降时使用
参数
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。
参数
Class.Humanoid 是否正在进入或离开 GettingUp``Enum.HumanoidStateType。
HealthChanged
此事件发生当 Humanoid.Health 变更时。 但是,如果生命值增加为等值或大于 Humanoid.MaxHealth ,它不会发生。
当 Humanoid.Health 达到零时,Humanoid 将死触发,并且 Humanoid.Died 事件将发生。此事件将以零的价值发生。
参数
Class.Humanoid.Health 的新值。
代码示例
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)
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() 函数禁用跳跃。
参数
Class.Humanoid 是否正在进入或离开 Jumping``Enum.HumanoidStateType。
MoveToFinished
此事件触发时,Humanoid完成走向目标所需的步行走路,并且Humanoid.WalkToPoint和Humanoid.WalkToPart属性。
Class.Humanoid.WalkToPoint 和 Humanoid.WalkToPart 属性可以单独设置,或使用 Humanoid:MoveTo() 函数。
如果 Humanoid 在 8 秒内达到目标,此事件将返回 Class.Humanoid:Reached 作为真。如果目标未达到 8 秒,Humanoid 将停止走路,并且 2>Class.Humanoid:Reached2> 将变为错误。此时间可以通
参数
代码示例
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 。
当 Humanoid 在 PlatformStanding 状态时, Humanoid.PlatformStand 属性将是 1> 真的1> 。
虽然 Humanoid.PlatformStand 设置为 是,但 Humanoid 将无法移动工具。请参阅页面 1> Class.Humanoid.PlatformStand1> 获取更多信息。
平台站Enum.HumanoidStateType与现在已禁用的Platform部分相关。 不过它仍然可以由开发人员使用。
参数
Class.Humanoid 是否正在进入或离开 PlatformStanding``Enum.HumanoidStateType。
Ragdoll
这个事件发生 when the Humanoid 进入或离开 Ragdoll``Enum.HumanoidStateType 。
active 参数将有 true 或 false 来表示输入或离开。
使用 Humanoid:SetStateEnabled() 来禁用获取状态以保持在 Ragdoll 状态。
还请参阅:
参数
Class.Humanoid 是否正在进入或离开 Ragdoll``Enum.HumanoidStateType。
Running
此事件触发,当 Humanoid 正在运行更改时的速度。
在运行 Humanoids 覆盖时,它们的 Humanoid.WalkSpeed 在每秒钟 per 秒。
当 Humanoid 停止运行此事件时,它将以 0 的速度发射。
还请参阅:
- 游泳和攀爬的话,请参阅Humanoid.Swimming和Humanoid.Climbing事件
- 您还可以使用 Humanoid 事件检测到一个 Humanoid.StateChanged 是否运行
参数
Class.Humanoid 的运行速度。
代码示例
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
此事件发生,当 Humanoid 或 Seat 或 VehicleSeat 坐下或起来时。
当角色与座椅接触时,他们会被附在座椅上,并且会播放坐下动画。有关更多信息,请参阅Seat页面。
- 如果角色坐下,active 参数将是 真的 ,而 currentSeatPart 将是他们当前坐下的座位。
- 如果角色从座位上起来,active 参数将为 错误 ,而 currentSeatPart 为空。
还请参阅:
- Humanoid.Sit,表示是否有人当前坐下
- Humanoid.SeatPart,表示座椅目前正在坐的是一个人形,如果有。
参数
代码示例
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> 处于静止状态。
还见
- Humanoid:GetState() 和 Humanoid:ChangeState() 来获取和设置状态。
- Humanoid:SetStateEnabled() 用于启用或禁用特定状态。
参数
人形的以前状态输入。
人形当前状态类输入。
代码示例
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)
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。
还请参阅:
- 要找到当前状态是否启用,请使用 Humanoid:GetStateEnabled()
- 要听到 Humanoid 状态变更使用 Humanoid.StateChanged
参数
Enum.HumanoidStateType 为启用状态所变更的 EnуHumanoidStateType 。
启用状态的话,则真。
代码示例
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>
参数
Class.Humanoid 是否正在进入或离开 StrafingNoPhysics``Enum.HumanoidStateType。
Swimming
当 Humanoid 在 Terrain 水域游泳时,此事件会触发。
Humanoids 在 87.5% 的 Humanoid.WalkSpeed 下游泳。
当 Humanoid 停止游泳时,此事件不会总是以 0 的速度发射。
还请参阅:
- 运行和攀爬时请参阅<a href="https://developer.microsoft.com/en-us/microsoft-edge/ Running and Climbing" target="_blank">Class.Humanoid.Running</a>和<a href="https://developer.microsoft.com/en-us/microsoft-edge/Climbing\事件
- 您还可以使用 Humanoid 事件检测到一个 Humanoid.StateChanged 游泳
- 您可以使用 Humanoid:SetStateEnabled() 函数禁用游泳
参数
Class.Humanoid正在游泳的速度。
Touched
当一个人形的 limb 与另一个 BasePart 接触时,此事件会触发。 BasePart , которое接触到 limb ,以及 limb 本身,是给予的。
当 Humanoid 的手臂与自己接触时不会触发此事件。
替换
虽然 Humanoid.Touched 事件有用,但您应该考虑是否有更好的替代方案。
- 在大多数情况下,建议您连接一个 BasePart.Touched 事件为 BaseParts 的 interest,因为人形会在移动时不断发射。例如,在弹球游戏中,您将
- 当试图在 Class.Humanoid 落地时, Humanoid 事件更适合。或者,您可以检查 Humanoid.StateChanged 来确認是否有人正在使用非空氣材料。
注释
- 连接到此事件会导致每个手段在每个手段上创建一个 TouchTransmitter。
- 当前没有对于 BasePart.TouchEnded 的相当的 Humanoids 。
参数
代码示例
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)