书接上文《Godot Engine:用粒子系统实现一个波动拳的冲击波,对,就是那个哈豆啃》
效果图
文章目录
HadokenBall
- 效果图
- HadokenBall
- HadokenBall的脚本
- 使用BoneAttachment节点来获取手部骨骼的位置
- 隆的代码
- 使用AnimationPlayer设定动画回调
为HadokenBall加一个脚本
HadokenBall有两个状态:
- 在手中运气团球的状态:会跟随手部运动
- 脱离手掌的状态:匀速直线运动
下面代码中的position_ref
用于获取手部的位置,当后来它被赋空后,就意味着HadokenBall离手了
#HadokenBall.gd
extends Particles
class_name HadokenBall
var position_ref :Spatial = null
func _ready():
add_to_group("HadokenBall")
func _process(delta):
if position_ref != null :
global_transform.origin = position_ref.global_transform.origin
else:
translation += Vector3.RIGHT * 2 * delta
func init_ball(ref):
position_ref = ref
transform.origin = position_ref.global_transform.origin
ref.get_tree().root.add_child(self)
func release_ball():
position_ref = null
使用BoneAttachment节点来获取手部骨骼的位置
BoneAttachment
节点的用法详见老王的另一篇博文《Godot Engine:用BoneAttachment节点为骨骼附加物》
将"BoneAttachment"更名为"HadokenBallPos"
将"HadokenBallPos"定位到右手
- 先预加载“HadokenBall.tscn”
- 定义两个用于动画回调的回调函数,一个用于生成HadokenBall.tscn 一个用于通知其离手
#Ryu
extends Spatial
var h_ball_prefab : PackedScene = preload("res://VFX/HadokenBall.tscn")
onready var playback : AnimationNodeStateMachinePlayback = $AnimationTree.get("parameters/playback")
func _ready():
add_to_group("Ryu")
func do_combo(move_name):
playback.travel(move_name + "@Ryu")
#AnimationPlayer调用
func make_ball():
var h_ball : HadokenBall = h_ball_prefab.instance() as HadokenBall
h_ball.init_ball($rig/Skeleton/HadokenBallPos)
#AnimationPlayer调用
func release_ball():
get_tree().call_group("HadokenBall","release_ball")
使用AnimationPlayer设定动画回调
动画回调的使用方法详见《Godot Engine:用Call Method Track(方法回调轨道)实现动画回调》