RyoKai
index,reading,blog,photos,ins

Godot4一些memo

2024-03-13

Tween

Tween是一种常见的补间动画技术,在游戏、UI等各种交互式应用程序中被广泛使用。它的作用是让对象在一段时间内平滑过渡到目标状态,而不是直接突变。

Tween的英文全称是"in-betweening",意为"补中间"。它的原理是通过计算不同时间点之间的插值,生成一系列的中间帧,从而形成流畅的过渡动画效果。

eg.实现 物品朝向移动中的目标转向并移动的效果. 这里应为target_postion在变化, 所以可以使用tween来动态更新物品的rotation.

func process():
	var tween = create_tween() // godot 内置方法
	tween.tween_method(postion_collect.bind(self.postion, target_postion),0.0,1.0,0.5)
	
func postion_collect(postion : Vector2, target_postion: Vector2 ,  percent: float):
	#calculate rotate degree and next position logic

在0.5秒的周期内, 执行 position_collect方法, 绑定了两个position, 并且percent依次被0.0 → 1.0传值

角度

计算角度

这段godot代码, 目的是计算了物品的start_position要转向player的position的角度, 刚开始我不明白为什么最后向量差计算出来的degree要加上90°

因为 Godot 采用的坐标系统与标准的笛卡儿坐标系统有所不同。

func tween_collect(percent:float, start_position: Vector2):

var player = get_tree().get_first_node_in_group("player") as Node2D

if player == null:

	return

global_position = start_position.lerp(player.global_position,percent)

var direct_from_start = player.global_position - start_position

rotation_degrees = rad_to_deg(direct_from_start.angle()) + 90

Lerp

Vector2.lerp(to: Vector2, weight: float),

current_vector.lerp(to) 等效于 result = current_vector + (to - current_vector) * weight

用于在两个向量之间进行线性插值。这个方法有两个参数:

  • to (Vector2): 目标向量,即插值的终点向量。
  • weight (float): 一个在 0.0 到 1.0 之间的浮点数,表示插值的权重。
  • Callable.bind()

    Callable.bind() 是 Godot 中 Callable 类的一个方法,用于创建一个新的 Callable 对象,并将一些参数预先绑定到该 Callable 对象上。当调用这个新的 Callable 对象时,绑定的参数将作为该 Callable 对象的前置参数传递,后面再跟着调用时提供的其他参数。

    get_tree().pause = true时, 节点的信号也不会传递. 要设置节点的process mode