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

文章目录

      • 前言
      • 0. 准备带骨骼的模型
      • 1. 导入Godot
      • 2. 配置BoneAttachment节点
      • 3. 静态添加附加物
        • 测试
      • 4. 动态添加附加物
        • 测试

前言

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

0. 准备带骨骼的模型

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

新建一个简单的柱体,注意在弯曲处加些细分
Godot Engine:用BoneAttachment节点为骨骼附加物_第1张图片

搭建骨架

Godot Engine:用BoneAttachment节点为骨骼附加物_第2张图片

蒙皮

Godot Engine:用BoneAttachment节点为骨骼附加物_第3张图片

制作一段简单的动画Godot Engine:用BoneAttachment节点为骨骼附加物_第4张图片

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

1. 导入Godot

Godot 3.2.3 rc5

Godot Engine:用BoneAttachment节点为骨骼附加物_第5张图片
Bones.glTF场景初始结构如下图所示
Godot Engine:用BoneAttachment节点为骨骼附加物_第6张图片

2. 配置BoneAttachment节点

Skeleton节点添加一个BoneAttachment子节点

Godot Engine:用BoneAttachment节点为骨骼附加物_第7张图片
此时BoneAttachment可以从Skeleton中读取骨头的列表,我们可以选择所需的骨头,本例中选择最末端的“bone_10”

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

Godot Engine:用BoneAttachment节点为骨骼附加物_第8张图片

3. 静态添加附加物

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

Godot Engine:用BoneAttachment节点为骨骼附加物_第9张图片

测试

Godot Engine:用BoneAttachment节点为骨骼附加物_第10张图片

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)

测试

搭建测试场景
Godot Engine:用BoneAttachment节点为骨骼附加物_第11张图片
“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"上了

Godot Engine:用BoneAttachment节点为骨骼附加物_第12张图片

你可能感兴趣的:(Godot笔记,#,Godot,实践,Godot,游戏开发)