您当前的位置: 首页 > 

开发游戏的老王

暂无认证

  • 3浏览

    0关注

    803博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

开发游戏的老王 发布时间:2020-09-07 12:23:08 ,浏览量:3

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

前言

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

在这里插入图片描述

关注
打赏
1656935939
查看更多评论
立即登录/注册

微信扫码登录

0.0394s