Godot Engine:用BoneAttachment节点为骨骼附加物

本文通过一个案例详细介绍如何在Godot游戏引擎中使用BoneAttachment节点,实现动态为骨骼模型添加附加物体,如武器或道具,使它们成为骨架中特定骨头的子物体。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

BoneAttachment是一个非常重要的节点,使用它可以在游戏运行时,动态地为骨骼添加附加物体,比如可以动态拾取场景中的物件(从地上捡个武器呀道具呀什么的),并使其成为骨架中某根骨头的子物体。本文将用一个小案例来介绍它的使用方法

0. 准备带骨骼的模型

本文使用Blender2.8创建带骨骼的模型

新建一个简单的柱体,注意在弯曲处加些细分
在这里插入图片描述

搭建骨架

在这里插入图片描述

蒙皮

在这里插入图片描述

制作一段简单的动画在这里插入图片描述

导出带动画的glTF模型(Bones.glTF)

1. 导入Godot

Godot 3.2.3 rc5

在这里插入图片描述
Bones.glTF场景初始结构如下图所示
在这里插入图片描述

2. 配置BoneAttachment节点

Skeleton节点添加一个BoneAttachment子节点

在这里插入图片描述
此时BoneAttachment可以从Skeleton中读取骨头的列表,我们可以选择所需的骨头,本例中选择最末端的“bone_10”

一个Skeleton可以添加多个BoneAttachment子节点,用于不同的用途

在这里插入图片描述

3. 静态添加附加物

本例中添加了一个球形的MeshInstance

在这里插入图片描述

测试

在这里插入图片描述

4. 动态添加附加物

在"Bones"上添加一个名为"AttachmentTest.gd"的脚本,这个脚本主要用于获取“BoneAttachment”节点并在其上添加附加物

extends Spatial


onready var attachment = $Armature/Skeleton/BoneAttachment

func _ready():
	add_to_group("player")

func grab(a:Spatial):
	if not attachment.is_a_parent_of(a):
		a.get_parent().remove_child(a)
		attachment.add_child(a)
		a.transform.origin = Vector3.ZERO
	

func go_and_grab(a:Spatial):
	grab(a)
测试

搭建测试场景
在这里插入图片描述
“TestScene”上的脚本

extends Spatial


onready var cube = $cube


func _process(delta):
	if Input.is_mouse_button_pressed(2):
		get_tree().call_group("player"," go_and_grab",cube)

点击鼠标右键以后,“cube”就被拾取到"bone_10"上了

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开发游戏的老王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值