【老王的游戏开发教程】名场面临摹第二弹 之街霸3D:论一个冲击波的诞生

书接上文《Godot Engine:用粒子系统实现一个波动拳的冲击波,对,就是那个哈豆啃》

效果图

在这里插入图片描述

HadokenBall

为HadokenBall加一个脚本
在这里插入图片描述

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(方法回调轨道)实现动画回调》

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hello_tute/article/details/109383662