Godot 旋转问题

在游戏场景中,有一个物体A,有一个初始朝向,此时如果附近出现敌人,那么需要改变朝向,然后做一些其它事情,比如攻击等动作,这里要讨论的就是改变朝向这个动作。

针对2D世界:

假设A默认向右,这里可以用向量Vector2(1,0)表示其初始朝向,目标为target,则可以先计算目标方向,然后旋转到目标方向,关键代码如下(可以直接查看参考链接):

#http://kidscancode.org/blog/2018/04/godot3_tanks_part3/
#向目标target旋转
func aim(target, delta):
	#计算目标向量
	var target_dir = (target.global_position - global_position).normalized()
	#注意当前方向受旋转影响
	var current_dir = Vector2(1, 0).rotated(global_rotation)
	#这里采用了线性插值方式,类似转身动画
	#angle计算的是与x坐标的夹角,即Vector2(1, 0)
	global_rotation = current_dir.linear_interpolate(target_dir, delta).angle()
	pass

针对3D世界:

同样A默认向右Vector3(1,0,0),需要注意的是,我们这里仅针对Y轴旋转:

#正常情况下,一般是左右旋转,绕Y轴旋转
func aim(target, delta):
	 #计算目标向量
	var target_dir = (target.global_transform.origin - global_transform.origin).normalized()
	#注意当前方向受旋转影响,如果是Vector3(1, 0, 0),意味这目前初始向右。
	#注意弧度与角度
	var current_dir = Vector3(1, 0, 0).rotated(Vector3.UP , rotation.y)
	#global_transform.rotated(
	#这里采用了线性插值方式,类似转身动画
	#angle计算的是与x坐标的夹角,即Vector3(1, 0, 0)
	#注意选择总是针对局部,即以初始朝向为基础
	rotation.y = current_dir.linear_interpolate(target_dir, delta).angle_to(Vector3(1, 0, 0))
	pass

 

你可能感兴趣的:(Godot,游戏)