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

前言

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

0. 准备带骨骼的模型

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

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

搭建骨架

在这里插入图片描述

蒙皮

在这里插入图片描述

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

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

扫描二维码关注公众号,回复: 11654556 查看本文章

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"上了

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hello_tute/article/details/108444362
今日推荐