You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
1020 B
GDScript

extends Decal
class_name ParticleDecal
@export var lifetime: float = 1
@export var gradient: Gradient
@export var scale_curve: Curve
@export var particle_rotate: int
@export var size_random: float #0-1 0为不随机 1为随机0~2倍
var lifetime_now: float
var size_scale: float
func on_ready() -> void:
var scale_sample: float = scale_curve.sample(0)
size_random = clamp(size_random, 0, 1)
size_scale = randf_range(1-size_random, 1+size_random)
scale = Vector3(scale_sample, 1, scale_sample) * size_scale
func on_process(delta: float) -> void:
lifetime_now += delta
var rate: float = lifetime_now / lifetime
if rate > 1:
return
#色带
if gradient:
modulate = gradient.sample(rate)
else:
modulate.a = 1 - rate
#缩放曲线
if scale_curve:
var scale_sample: float = scale_curve.sample(rate)
scale = Vector3(scale_sample, 1, scale_sample) * size_scale
#旋转
rotation_degrees.y = particle_rotate * rate
return