技能系统 卡帧 抖动

master
chendian 2 years ago
parent 19a8cff942
commit f6fd096935

@ -0,0 +1,21 @@
[gd_resource type="Resource" script_class="PlayerSkillCfg" load_steps=6 format=3 uid="uid://bsdspblvefgpv"]
[ext_resource type="Resource" uid="uid://bsqk3q6mccllg" path="res://config/attack/normal_hit.tres" id="1_mxlqc"]
[ext_resource type="Script" path="res://script/config/player_skill_cfg.gd" id="2_hh5ph"]
[ext_resource type="Animation" uid="uid://p8l0puqxrkwh" path="res://resource/skill_animation/hero01_long_air_attack01.tres" id="3_3pp8a"]
[ext_resource type="SpriteFrames" uid="uid://ce83cuqwgwwi4" path="res://resource/animation/character/hero01_long_attack.aseprite" id="4_q0bln"]
[ext_resource type="Resource" uid="uid://cy3wwalxeyro0" path="res://config/weapon/long.tres" id="5_s1k6m"]
[resource]
script = ExtResource("2_hh5ph")
weapon = ExtResource("5_s1k6m")
stance_from = 10
stance_to = 11
break_level = 3
action = "attack_light"
name = ""
skill_animation = ExtResource("3_3pp8a")
attack_list = Array[Resource("res://script/config/attack_cfg.gd")]([ExtResource("1_mxlqc")])
has_animation = true
sprite_frams = ExtResource("4_q0bln")
animation_name = "long_air_attack01"

@ -0,0 +1,21 @@
[gd_resource type="Resource" script_class="PlayerSkillCfg" load_steps=6 format=3 uid="uid://drxg06dvcx4oj"]
[ext_resource type="Resource" uid="uid://bsqk3q6mccllg" path="res://config/attack/normal_hit.tres" id="1_qfkyy"]
[ext_resource type="Script" path="res://script/config/player_skill_cfg.gd" id="2_gjjhv"]
[ext_resource type="Animation" uid="uid://cjfy6ia1ukyiu" path="res://resource/skill_animation/hero01_long_air_attack02.tres" id="3_76yga"]
[ext_resource type="SpriteFrames" uid="uid://ce83cuqwgwwi4" path="res://resource/animation/character/hero01_long_attack.aseprite" id="4_ahm2t"]
[ext_resource type="Resource" uid="uid://cy3wwalxeyro0" path="res://config/weapon/long.tres" id="5_nkec4"]
[resource]
script = ExtResource("2_gjjhv")
weapon = ExtResource("5_nkec4")
stance_from = 11
stance_to = 12
break_level = 3
action = "attack_light"
name = ""
skill_animation = ExtResource("3_76yga")
attack_list = Array[Resource("res://script/config/attack_cfg.gd")]([ExtResource("1_qfkyy")])
has_animation = true
sprite_frams = ExtResource("4_ahm2t")
animation_name = "long_air_attack02"

@ -0,0 +1,21 @@
[gd_resource type="Resource" script_class="PlayerSkillCfg" load_steps=6 format=3 uid="uid://c8l7h74abqlhb"]
[ext_resource type="Resource" uid="uid://bsqk3q6mccllg" path="res://config/attack/normal_hit.tres" id="1_sfcbc"]
[ext_resource type="Script" path="res://script/config/player_skill_cfg.gd" id="2_0x7hh"]
[ext_resource type="Animation" uid="uid://bh5s2t3cbobpp" path="res://resource/skill_animation/hero01_long_air_attack03.tres" id="3_1erk8"]
[ext_resource type="SpriteFrames" uid="uid://ce83cuqwgwwi4" path="res://resource/animation/character/hero01_long_attack.aseprite" id="4_wrd60"]
[ext_resource type="Resource" uid="uid://cy3wwalxeyro0" path="res://config/weapon/long.tres" id="5_u3vas"]
[resource]
script = ExtResource("2_0x7hh")
weapon = ExtResource("5_u3vas")
stance_from = 12
stance_to = 13
break_level = 3
action = "attack_light"
name = ""
skill_animation = ExtResource("3_1erk8")
attack_list = Array[Resource("res://script/config/attack_cfg.gd")]([ExtResource("1_sfcbc")])
has_animation = true
sprite_frams = ExtResource("4_wrd60")
animation_name = "long_air_attack03"

@ -0,0 +1,93 @@
[gd_resource type="Animation" load_steps=2 format=3 uid="uid://p8l0puqxrkwh"]
[ext_resource type="SpriteFrames" uid="uid://ce83cuqwgwwi4" path="res://resource/animation/character/hero01_long_attack.aseprite" id="1_do05t"]
[resource]
resource_name = "hero01_long_air_attack01"
length = 0.9
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("View:sprite_frames")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [ExtResource("1_do05t")]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("View:animation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": ["long_air_attack01"]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("View:frame")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 0,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Status:break_level")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.3, 0.5),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [0, 3, 4]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("Status:speed_up_rate")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0.2, 0.3),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [-0.5, -1.0]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("Status:skill_move_speed")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0.1, 0.3),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [1.0, 0.0]
}
tracks/6/type = "method"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("Battle")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0.2),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [],
"method": &"attack"
}]
}

@ -0,0 +1,93 @@
[gd_resource type="Animation" load_steps=2 format=3 uid="uid://cjfy6ia1ukyiu"]
[ext_resource type="SpriteFrames" uid="uid://ce83cuqwgwwi4" path="res://resource/animation/character/hero01_long_attack.aseprite" id="1_1q1tj"]
[resource]
resource_name = "hero01_long_air_attack02"
length = 0.9
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("View:sprite_frames")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [ExtResource("1_1q1tj")]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("View:animation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": ["long_air_attack02"]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("View:frame")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 0,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Status:break_level")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.3, 0.5),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [0, 3, 4]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("Status:speed_up_rate")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0.2, 0.3),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [-0.5, -1.0]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("Status:skill_move_speed")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0.1, 0.3),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [1.0, 0.0]
}
tracks/6/type = "method"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("Battle")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0.2),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [],
"method": &"attack"
}]
}

@ -0,0 +1,93 @@
[gd_resource type="Animation" load_steps=2 format=3 uid="uid://bh5s2t3cbobpp"]
[ext_resource type="SpriteFrames" uid="uid://ce83cuqwgwwi4" path="res://resource/animation/character/hero01_long_attack.aseprite" id="1_0pfmh"]
[resource]
resource_name = "hero01_long_air_attack03"
length = 0.9
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("View:sprite_frames")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [ExtResource("1_0pfmh")]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("View:animation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": ["long_air_attack03"]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("View:frame")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 0,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Status:break_level")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.3, 0.5),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [0, 3, 4]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("Status:speed_up_rate")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0.2, 0.3),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [-0.5, -1.0]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("Status:skill_move_speed")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0.1, 0.3),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [1.0, 0.0]
}
tracks/6/type = "method"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("Battle")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0.2),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [],
"method": &"attack"
}]
}

@ -1,7 +1,10 @@
[gd_resource type="AnimationLibrary" load_steps=8 format=3 uid="uid://croik07a1qko5"]
[gd_resource type="AnimationLibrary" load_steps=11 format=3 uid="uid://croik07a1qko5"]
[ext_resource type="Animation" uid="uid://p8l0puqxrkwh" path="res://resource/skill_animation/hero01_long_air_attack01.tres" id="1_b46g3"]
[ext_resource type="Animation" uid="uid://daopmieibx3b7" path="res://resource/skill_animation/hero01_long_attack01.tres" id="1_nwjtl"]
[ext_resource type="Animation" uid="uid://cjfy6ia1ukyiu" path="res://resource/skill_animation/hero01_long_air_attack02.tres" id="2_8wtap"]
[ext_resource type="Animation" uid="uid://bf6jaraltouun" path="res://resource/skill_animation/hero01_long_attack02.tres" id="2_klfcs"]
[ext_resource type="Animation" uid="uid://bh5s2t3cbobpp" path="res://resource/skill_animation/hero01_long_air_attack03.tres" id="2_nqaew"]
[ext_resource type="Animation" uid="uid://c8yueqe7rjn60" path="res://resource/skill_animation/hero01_long_attack03.tres" id="3_g8q4d"]
[ext_resource type="Animation" uid="uid://dk1o3gqhjmuvh" path="res://resource/skill_animation/hero01_long_attack04.tres" id="4_36e6x"]
[ext_resource type="Animation" uid="uid://cwm116apu63n1" path="res://resource/skill_animation/hero01_long_flash.tres" id="5_fumom"]
@ -10,6 +13,9 @@
[resource]
_data = {
"hero01_long_air_attack01": ExtResource("1_b46g3"),
"hero01_long_air_attack02": ExtResource("2_8wtap"),
"hero01_long_air_attack03": ExtResource("2_nqaew"),
"hero01_long_attack01": ExtResource("1_nwjtl"),
"hero01_long_attack02": ExtResource("2_klfcs"),
"hero01_long_attack03": ExtResource("3_g8q4d"),

@ -2,7 +2,7 @@
[ext_resource type="Script" path="res://script/character/character.gd" id="1_tonbs"]
[ext_resource type="Script" path="res://script/character/status.gd" id="2_txdip"]
[ext_resource type="SpriteFrames" uid="uid://dhfqj1dxldqao" path="res://resource/animation/character/hero01_long_skill01.aseprite" id="3_vw4qy"]
[ext_resource type="SpriteFrames" uid="uid://ce83cuqwgwwi4" path="res://resource/animation/character/hero01_long_attack.aseprite" id="3_q8i10"]
[ext_resource type="Script" path="res://script/character/move.gd" id="4_66r53"]
[ext_resource type="Script" path="res://script/character/view.gd" id="4_vijjv"]
[ext_resource type="Script" path="res://script/character/skill.gd" id="6_h4xqy"]
@ -24,15 +24,14 @@ shape = SubResource("BoxShape3D_ty8lx")
unique_name_in_owner = true
script = ExtResource("2_txdip")
speed_up_rate = -0.5
skill_float_speed = 3.0
[node name="View" type="AnimatedSprite3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1.414, 0, 0, 0, 1, 0, 0, 0)
transform = Transform3D(1, 0, 0, 0, 1.414, 0, 0, 0, 1, 0, 0.376646, 0)
alpha_cut = 2
texture_filter = 0
sprite_frames = ExtResource("3_vw4qy")
animation = &"long_skill02"
sprite_frames = ExtResource("3_q8i10")
animation = &"long_air_attack03"
script = ExtResource("4_vijjv")
[node name="Move" type="Node3D" parent="."]

@ -4,8 +4,5 @@ extends Node3D
const pixel_size : float = 0.01
const sprite_scale : float = 1.414
#移动
const is_jumped_check_time : float = 0.1
#技能系统
const input_alive_time : float = 0.5

@ -56,5 +56,10 @@ func settle(hit_info:HitInfo):
character_to.add_buff("stagger",1)
character_to.add_buff("floating",-1)
character_to.add_buff("shake_x",0.2)
#pause
character_from.add_buff("pause",0.1)
character_to.add_buff("pause",0.1)

@ -6,6 +6,7 @@ class_name Buff
class BuffInfo:
var name : String
var duration_max : float
var duration : float
var buff_map = {} #命中信息
@ -13,37 +14,51 @@ var buff_map = {} #命中信息
func _process(delta):
for buff_name in buff_map:
var buff_info = buff_map[buff_name]
if has_buff("pause") and buff_name!="pause":
continue
if buff_info.duration == -1:
trigger_buff_effect(buff_info.name,"update")
trigger_buff_effect(buff_info,"update")
else:
buff_info.duration -= delta
if buff_info.duration <= 0:
trigger_buff_effect(buff_info.name,"end")
buff_info.duration += delta
if buff_info.duration >= buff_info.duration_max:
trigger_buff_effect(buff_info,"end")
buff_map.erase(buff_name)
else:
trigger_buff_effect(buff_info.name,"update")
trigger_buff_effect(buff_info,"update")
func trigger_buff_effect(buff_name:String,trigger_name:String):
func trigger_buff_effect(buff:BuffInfo,trigger_name:String):
var buff_name = buff.name
var function_name = "on_%s_%s" % [trigger_name,buff_name]
if has_method(function_name):
call(function_name)
var rate = buff.duration/buff.duration_max
call(function_name,rate)
func has_buff(buff_name:String) -> bool:
return buff_name in buff_map
func add_buff(buff_name:String,duration:float):
var buff : BuffInfo
if buff_name in buff_map:
buff_map[buff_name].duration = duration
buff = buff_map[buff_name]
else:
var new_buff = BuffInfo.new()
new_buff.name = buff_name
new_buff.duration = duration
buff_map[buff_name] = new_buff
trigger_buff_effect(buff_name,"start")
buff = BuffInfo.new()
buff.name = buff_name
buff_map[buff_name] = buff
buff.duration_max = duration
buff.duration = 0
trigger_buff_effect(buff,"start")
#==具体实现==
func on_end_hit_back():status.hit_back_speed = 0
func on_end_hit_up():status.hit_up_speed = 0
func on_start_stagger():status.is_stagger = true
func on_end_stagger():status.is_stagger = false
func on_end_stun():status.is_stun = false
func on_end_hit_back(rate):status.hit_back_speed = 0
func on_end_hit_up(rate):status.hit_up_speed = 0
func on_start_stagger(rate):status.is_stagger = true
func on_end_stagger(rate):status.is_stagger = false
func on_end_stun(rate):status.is_stun = false
func on_start_jumping(rate):status.is_jumping = true
func on_end_jumping(rate):status.is_jumping = false
func on_update_shake_x(rate):
var offset = sin(rate * PI * 4) - 0.5
status.shake_offset = Vector3(offset*0.02,0,0);
func on_end_shake_x(rate):status.shake_offset = Vector3.ZERO
func on_start_pause(rate):status.is_pause = true
func on_end_pause(rate):status.is_pause = false

@ -23,7 +23,7 @@ func build_view(cfg:CharacterCfg):
collision.position = Vector3(0,half_height,0)
collision.scale = Vector3(width,half_height*2,width)
view.position = Vector3(0,half_height,0)
status.basic_offset = Vector3(0,half_height,0)
view.init(cfg.sprite_frames)
skill.init()

@ -3,24 +3,21 @@ class_name Move
@onready var character = (get_owner() as Character)
@onready var status = (%Status as Status)
@onready var buff = (%Buff as Buff)
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
func _physics_process(delta):
if status.is_pause:return
update_on_floor(delta)
update_speed_y(delta)
update_move()
character.move_and_slide()
func update_on_floor(delta):
status.is_on_floor = character.is_on_floor()
if status.is_on_floor:
if status.is_jumped_check_time > 0:
status.is_jumped_check_time -= delta
else:
status.is_jumped_check_time = 0
status.is_jumped = false
if status.is_on_floor and not status.is_jumping:
status.is_jumped = false
func update_speed_y(delta):
var has_y_speed = status.skill_float_speed != 0 or status.hit_up_speed != 0
@ -32,8 +29,7 @@ func update_speed_y(delta):
status.speed_y = character.velocity.y
func update_move():
var move_speed = status.cfg.move.speed * (1 + status.speed_up_rate)
var move_velocity = status.move_dir * move_speed
var move_velocity = status.move_dir * (status.cfg.move.speed * (1 + status.speed_up_rate))
var skill_velocity = status.skill_dir * status.skill_move_speed
var hit_back_velocity = status.hit_back_dir * status.hit_back_speed
move_velocity += skill_velocity + hit_back_velocity
@ -41,11 +37,11 @@ func update_move():
character.velocity.z = move_velocity.y
status.speed_xz = Vector2(character.velocity.x,character.velocity.z).length()
if status.is_free_turn and move_velocity.x != 0:
status.is_right = move_velocity.x > 0
if status.is_free_turn and status.move_dir.x != 0:
status.is_right = status.move_dir.x > 0
func jump():
character.velocity.y = status.cfg.move.jump_velocity
status.is_jumped = true
status.is_jumped_check_time = Setting.is_jumped_check_time
status.trigger_jump = true
buff.add_buff("jumping",0.1)

@ -6,7 +6,12 @@ class_name Skill
func init():
cancel_skill()
func _process(delta):
if status.is_skill_running and status.is_pause == is_playing():
if status.is_pause:pause();
else:play();
func cast_skill(cfg:SkillCfg,cast_dir:Vector2):
if cast_dir.length() == 0:
cast_dir = Vector2.RIGHT if status.is_right else Vector2.LEFT

@ -15,6 +15,11 @@ class_name Status
@export var shield : float #当前护盾
@export var shield_max : float #护盾最大值
@export_category("表现状态")
@export var basic_offset : Vector3 #基本偏移值
@export var shake_offset : Vector3 #抖动偏移值
@export var is_pause : bool #是否暂停
@export_category("移动状态")
@export var move_dir : Vector2 #移动方向
@export var speed_up_rate : float #移动速度比率
@ -24,8 +29,8 @@ class_name Status
@export var is_on_floor : bool #是否在地面
@export var is_free_turn : bool = true #是否允许转向
@export var is_right : bool = true #是否向右
@export var is_jumping : bool #是否正在跳跃
@export var is_jumped : bool #是否已跳跃
@export var is_jumped_check_time : float #是否已跳跃检测时间 避免未起直接判定落地
@export_category("buff状态")
@export var is_stagger : bool #是否硬直

@ -45,8 +45,10 @@ func _ready():
run("hit3","idle_loop")
func _process(delta):
if status.is_pause:return
update_flip()
update_trigger()
update_view()
if status.is_free_control:
update_trans()
@ -84,7 +86,11 @@ func update_trigger():
if status.get(trigger.condition):
status.set(trigger.condition,false)
play(trigger.to)
func update_view():
#view位置
position = status.basic_offset + status.shake_offset
func update_trans():
for trans in trans_list:
if trans.from == "any" or trans.from == animation:

Loading…
Cancel
Save