文章目录
前言
- 前言
- 0. 准备带骨骼的模型
- 1. 导入Godot
- 2. 配置BoneAttachment节点
- 3. 静态添加附加物
- 测试
- 4. 动态添加附加物
- 测试
BoneAttachment
是一个非常重要的节点,使用它可以在游戏运行时,动态地为骨骼添加附加物体,比如可以动态拾取场景中的物件(从地上捡个武器呀道具呀什么的),并使其成为骨架中某根骨头的子物体。本文将用一个小案例来介绍它的使用方法
本文使用Blender2.8创建带骨骼的模型
新建一个简单的柱体,注意在弯曲处加些细分
搭建骨架
蒙皮
制作一段简单的动画
导出带动画的glTF模型(Bones.glTF)
1. 导入GodotGodot 3.2.3 rc5
Bones.glTF场景初始结构如下图所示
为Skeleton
节点添加一个BoneAttachment
子节点
此时
BoneAttachment
可以从Skeleton
中读取骨头的列表,我们可以选择所需的骨头,本例中选择最末端的“bone_10”
一个Skeleton
可以添加多个BoneAttachment
子节点,用于不同的用途
本例中添加了一个球形的MeshInstance
在"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"上了