如何给骨骼添加部件或移除指定部件
给骨骼添加部件
开发者可以通过给节点添加绑点,绑定模型来实现给骨骼添加部件的效果。
一、开发者可以通过 studio 直接添加绑点节点,然后修改绑点的骨骼属性的 modelid 来实现
在 场景管理器 窗口中,创建一个
Model
对象。将鼠标悬停在该对象上并单击圆圈
⊕
按钮。在弹出菜单中找到
BindAttachment
并选择它,这将在这个Model
对象上创建一个绑点对象。选中
BindAttachment
对象,重命名为RightHand
修改
RightHand
的BoneName
属性和ModelId
属性BoneName 属性设置为 101(系统模型默认值指向右手,也可以自定义)
BoneName = 101 (右手)
BoneName = 106(头部)
ModelId 属性修改为手持模型(独眼萌宠)
二、开发者也可以通过代码创建模型对象的绑点对象,通过修改绑点对象的子节点模型来实现
给玩家添加部件,代码示例
获取当前玩家的 Character
local myCharacter = game:GetService("Players").LocalPlayer.Character;
创建Actor模型,指定参数(模型id,父节点)
function CreatedActor(modeid,parent) local actor = SandboxNode.New('Actor', parent) actor.ModelId = modeid; local pos = myCharacter.Position local offsetX = math.random(-2000, 2000) local offsetZ = math.random(-2000, 2000) actor.Position = Vector3.New(pos.x + offsetX, pos.y+200, pos.z + offsetZ); actor.Health = 100 actor.MaxHealth = 200; actor.Movespeed = 10; return actor; end
给玩家绑定模型部件,指定参数(模型id,骨骼key)
function ActorBindBone(modeid,boneName) --给模型设置绑点 local attachment= SandboxNode.New('BindAttachment', myCharacter) attachment.BoneName = boneName attachment.Name = "rightHand" attachment.LocalPosition = Vector3.New(0, 0, 0) attachment.LocalScale = Vector3.New(1, 1, 1) local ModelId = string.format("sandboxSysId://entity/%d/body.omod",modeid); local actor = CreatedActor(ModelId,attachment) actor.LocalEuler = Vector3.New(90, 90, 0) actor.LocalPosition = Vector3.New(-80.00, 0, 120.00) end
运行结果
BoneName = 101 (右手)
BoneName = 106(头部)
移除指定部件
移除对象可以通过设置它的Parent=nil
来移除。如果这个对象具有多个子部件,要移除其中某一个,可以通过获取该模型对象的所有子节点(包括绑定的子节点),遍历该节点(创建时定义的绑点名)找到需要移除的指定节点。
代码示例:移除绑定的rightHand
绑点对象
function RemoveBone()
for i, v in ipairs(myCharacter.Children) do
if v.Name == "rightHand" then
v.Parent = nil
end
end
end
写一个键盘事件用来测试移除
local inputService = game:GetService("UserInputService");
function UserInputBegan(inputObj)
if inputObj.UserInputType == Enum.UserInputType.Keyboard.Value then
local nKey = inputObj.KeyCode
if(nKey==103)then --G
RemoveBone()
end
end
end
inputService.InputBegan:Connect( UserInputBegan )