bullet ai优化 short stab01

master
chendian 9 months ago
parent 9753cac24d
commit a1433e906e

@ -11,3 +11,4 @@ shape = SubResource("BoxShape3D_87jhu")
offset = Vector2(1, 0.4) offset = Vector2(1, 0.4)
is_throw = false is_throw = false
is_direct = false is_direct = false
is_hit_self = false

@ -11,3 +11,4 @@ shape = SubResource("BoxShape3D_87jhu")
offset = Vector2(0.8, 0.4) offset = Vector2(0.8, 0.4)
is_throw = false is_throw = false
is_direct = false is_direct = false
is_hit_self = false

@ -11,3 +11,4 @@ shape = SubResource("BoxShape3D_87jhu")
offset = Vector2(0.6, 0.4) offset = Vector2(0.6, 0.4)
is_throw = false is_throw = false
is_direct = false is_direct = false
is_hit_self = false

@ -11,3 +11,4 @@ shape = SubResource("BoxShape3D_87jhu")
offset = Vector2(0.4, 0.4) offset = Vector2(0.4, 0.4)
is_throw = false is_throw = false
is_direct = false is_direct = false
is_hit_self = false

@ -11,3 +11,4 @@ shape = SubResource("CylinderShape3D_78ng8")
offset = Vector2(0, 0) offset = Vector2(0, 0)
is_throw = false is_throw = false
is_direct = false is_direct = false
is_hit_self = false

@ -12,3 +12,4 @@ shape = SubResource("CylinderShape3D_pmh6g")
offset = Vector2(0, 0) offset = Vector2(0, 0)
is_throw = false is_throw = false
is_direct = false is_direct = false
is_hit_self = false

@ -12,3 +12,4 @@ shape = SubResource("CylinderShape3D_pmh6g")
offset = Vector2(0, 0) offset = Vector2(0, 0)
is_throw = false is_throw = false
is_direct = false is_direct = false
is_hit_self = false

@ -1,7 +1,7 @@
[gd_resource type="Resource" script_class="CharacterCfg" load_steps=9 format=3 uid="uid://cb4q16lmqwbin"] [gd_resource type="Resource" script_class="CharacterCfg" load_steps=9 format=3 uid="uid://cb4q16lmqwbin"]
[ext_resource type="PackedScene" uid="uid://bei75ysjq2pi4" path="res://scene/ai/bullet_simple.tscn" id="1_3q8i1"] [ext_resource type="PackedScene" uid="uid://bei75ysjq2pi4" path="res://scene/ai/bullet_simple.tscn" id="1_3q8i1"]
[ext_resource type="Resource" uid="uid://ckbf40c75bfqf" path="res://config/attack/sharp_normal_hit_up.tres" id="2_m73qf"] [ext_resource type="Resource" uid="uid://d3mcp8sf6qbmd" path="res://config/attack/sharp_normal_hit.tres" id="2_3q8i1"]
[ext_resource type="Resource" uid="uid://decgfcx2xsj8i" path="res://config/attack_box/circle_mid.tres" id="3_3q8i1"] [ext_resource type="Resource" uid="uid://decgfcx2xsj8i" path="res://config/attack_box/circle_mid.tres" id="3_3q8i1"]
[ext_resource type="Resource" uid="uid://iv8g1x3bkxvv" path="res://config/character_move/fast_fly.tres" id="4_2bsgq"] [ext_resource type="Resource" uid="uid://iv8g1x3bkxvv" path="res://config/character_move/fast_fly.tres" id="4_2bsgq"]
[ext_resource type="Resource" uid="uid://dpajmgrlaytah" path="res://config/character_mp/normal.tres" id="5_gsbwd"] [ext_resource type="Resource" uid="uid://dpajmgrlaytah" path="res://config/character_mp/normal.tres" id="5_gsbwd"]
@ -22,7 +22,7 @@ mp = ExtResource("5_gsbwd")
ai_behavior_tree = ExtResource("1_3q8i1") ai_behavior_tree = ExtResource("1_3q8i1")
hp_max = 100.0 hp_max = 100.0
attack = 1.0 attack = 1.0
attack1 = ExtResource("2_m73qf") attack1 = ExtResource("2_3q8i1")
attack1_box = ExtResource("3_3q8i1") attack1_box = ExtResource("3_3q8i1")
sub_character_auto_create = false sub_character_auto_create = false
material_on = 0 material_on = 0

@ -1,10 +1,11 @@
[gd_resource type="Resource" script_class="CharacterCfg" load_steps=8 format=3 uid="uid://d3mafsovw1mko"] [gd_resource type="Resource" script_class="CharacterCfg" load_steps=9 format=3 uid="uid://d3mafsovw1mko"]
[ext_resource type="Resource" uid="uid://ckbf40c75bfqf" path="res://config/attack/sharp_normal_hit_up.tres" id="1_at6jo"] [ext_resource type="Resource" uid="uid://ckbf40c75bfqf" path="res://config/attack/sharp_normal_hit_up.tres" id="1_at6jo"]
[ext_resource type="PackedScene" uid="uid://bei75ysjq2pi4" path="res://scene/ai/bullet_simple.tscn" id="1_m7qit"]
[ext_resource type="Resource" uid="uid://bld0vhuhgydm8" path="res://config/attack_box/direct.tres" id="2_780us"] [ext_resource type="Resource" uid="uid://bld0vhuhgydm8" path="res://config/attack_box/direct.tres" id="2_780us"]
[ext_resource type="Resource" uid="uid://iv8g1x3bkxvv" path="res://config/character_move/fast_fly.tres" id="3_cx00u"] [ext_resource type="Resource" uid="uid://iv8g1x3bkxvv" path="res://config/character_move/fast_fly.tres" id="3_cx00u"]
[ext_resource type="Resource" uid="uid://dpajmgrlaytah" path="res://config/character_mp/normal.tres" id="4_alws1"] [ext_resource type="Resource" uid="uid://dpajmgrlaytah" path="res://config/character_mp/normal.tres" id="4_alws1"]
[ext_resource type="Script" path="res://script/config/character_cfg.gd" id="5_4n1ni"] [ext_resource type="Script" uid="uid://dt3chi1tgnaef" path="res://script/config/character_cfg.gd" id="5_4n1ni"]
[ext_resource type="Resource" uid="uid://h1curvk64vm3" path="res://config/character_shield/none.tres" id="6_u7wv4"] [ext_resource type="Resource" uid="uid://h1curvk64vm3" path="res://config/character_shield/none.tres" id="6_u7wv4"]
[ext_resource type="Resource" uid="uid://5jes0p152akr" path="res://config/character_stun/none.tres" id="7_txgsx"] [ext_resource type="Resource" uid="uid://5jes0p152akr" path="res://config/character_stun/none.tres" id="7_txgsx"]
@ -18,6 +19,7 @@ move = ExtResource("3_cx00u")
shield = ExtResource("6_u7wv4") shield = ExtResource("6_u7wv4")
stun = ExtResource("7_txgsx") stun = ExtResource("7_txgsx")
mp = ExtResource("4_alws1") mp = ExtResource("4_alws1")
ai_behavior_tree = ExtResource("1_m7qit")
hp_max = 100.0 hp_max = 100.0
attack = 1.0 attack = 1.0
attack1 = ExtResource("1_at6jo") attack1 = ExtResource("1_at6jo")

@ -19,9 +19,7 @@ break_level = 0
is_charging = false is_charging = false
attack1 = ExtResource("1_2k8jp") attack1 = ExtResource("1_2k8jp")
attack1_box = ExtResource("2_1jdoh") attack1_box = ExtResource("2_1jdoh")
attack1_with_pause_frame = false
attack1_with_stop = false attack1_with_stop = false
attack2_with_pause_frame = false
attack2_with_stop = false attack2_with_stop = false
mp_cost = 0 mp_cost = 0
mp_sub_cost = false mp_sub_cost = false

@ -15,9 +15,7 @@ stance_from = 1
stance_to = 30 stance_to = 30
break_level = 3 break_level = 3
is_charging = false is_charging = false
attack1_with_pause_frame = false
attack1_with_stop = false attack1_with_stop = false
attack2_with_pause_frame = false
attack2_with_stop = false attack2_with_stop = false
mp_cost = 0 mp_cost = 0
mp_sub_cost = false mp_sub_cost = false

@ -21,17 +21,15 @@ break_level = 3
is_charging = false is_charging = false
attack1 = ExtResource("1_5n6sn") attack1 = ExtResource("1_5n6sn")
attack1_box = ExtResource("2_67ngl") attack1_box = ExtResource("2_67ngl")
attack1_with_pause_frame = false
attack1_with_stop = false attack1_with_stop = false
attack2_with_pause_frame = false
attack2_with_stop = false attack2_with_stop = false
mp_cost = 0 mp_cost = 0
mp_sub_cost = false mp_sub_cost = false
free_lock = false free_lock = false
ignore_push = true ignore_push = true
with_stop = false with_stop = false
is_lock_x = true is_lock_x = false
is_lock_x_move = true is_lock_x_move = false
range = 0.0 range = 0.0
warn_type = 0 warn_type = 0
sprite_frames = ExtResource("5_kk2vu") sprite_frames = ExtResource("5_kk2vu")

@ -1,24 +1,59 @@
[gd_scene load_steps=6 format=3 uid="uid://bei75ysjq2pi4"] [gd_scene load_steps=9 format=3 uid="uid://bei75ysjq2pi4"]
[ext_resource type="Script" uid="uid://mvwcxqcetiqp" path="res://addons/beehave/nodes/beehave_tree.gd" id="1_7oi2o"] [ext_resource type="Script" uid="uid://mvwcxqcetiqp" path="res://addons/beehave/nodes/beehave_tree.gd" id="1_7oi2o"]
[ext_resource type="Script" uid="uid://dcqq2mursvw5m" path="res://addons/beehave/nodes/decorators/succeeder.gd" id="3_08et5"]
[ext_resource type="Script" uid="uid://cugftmuc8v30c" path="res://addons/beehave/nodes/composites/sequence.gd" id="3_i33jf"] [ext_resource type="Script" uid="uid://cugftmuc8v30c" path="res://addons/beehave/nodes/composites/sequence.gd" id="3_i33jf"]
[ext_resource type="Script" uid="uid://cnw25wdsd3c76" path="res://script/ai/action/action_wait.gd" id="5_onfb3"] [ext_resource type="Script" uid="uid://csd1yh0ruy3yu" path="res://script/ai/action/action_wait_tick.gd" id="3_qy88u"]
[ext_resource type="Script" uid="uid://b3ulieg4i8ivy" path="res://script/ai/action/action_check_hit_character.gd" id="6_jq3ry"]
[ext_resource type="Script" uid="uid://ddcaceywxwt20" path="res://script/ai/action/action_attack1.gd" id="6_oqib4"] [ext_resource type="Script" uid="uid://ddcaceywxwt20" path="res://script/ai/action/action_attack1.gd" id="6_oqib4"]
[ext_resource type="Script" uid="uid://bhxaiqao7nkth" path="res://script/ai/action/action_check_hit_wall.gd" id="8_qnf6p"]
[ext_resource type="Script" uid="uid://ci3tg5fkdn16f" path="res://script/ai/action/action_destroy.gd" id="11_i4mx4"] [ext_resource type="Script" uid="uid://ci3tg5fkdn16f" path="res://script/ai/action/action_destroy.gd" id="11_i4mx4"]
[node name="BeehaveTree" type="Node" node_paths=PackedStringArray("blackboard")] [node name="BeehaveTree" type="Node" node_paths=PackedStringArray("blackboard")]
script = ExtResource("1_7oi2o") script = ExtResource("1_7oi2o")
blackboard = NodePath("@Node@25322") blackboard = NodePath("@Node@25116")
[node name="SequenceComposite" type="Node" parent="."] [node name="SequenceComposite" type="Node" parent="."]
script = ExtResource("3_i33jf") script = ExtResource("3_i33jf")
[node name="ActionWait" type="Node" parent="SequenceComposite"] [node name="AlwaysSucceedDecorator" type="Node" parent="SequenceComposite"]
script = ExtResource("5_onfb3") script = ExtResource("3_08et5")
wait_time = 0.05 metadata/_custom_type_script = ExtResource("3_08et5")
[node name="ActionAttack1" type="Node" parent="SequenceComposite"] [node name="保持攻击" type="Node" parent="SequenceComposite/AlwaysSucceedDecorator"]
script = ExtResource("3_i33jf")
[node name="ActionWaitTick" type="Node" parent="SequenceComposite/AlwaysSucceedDecorator/保持攻击"]
script = ExtResource("3_qy88u")
metadata/_custom_type_script = ExtResource("3_qy88u")
[node name="ActionAttack1" type="Node" parent="SequenceComposite/AlwaysSucceedDecorator/保持攻击"]
script = ExtResource("6_oqib4") script = ExtResource("6_oqib4")
[node name="ActionDestroy" type="Node" parent="SequenceComposite"] [node name="AlwaysSucceedDecorator2" type="Node" parent="SequenceComposite"]
script = ExtResource("3_08et5")
metadata/_custom_type_script = ExtResource("3_08et5")
[node name="检测命中角色并销毁" type="Node" parent="SequenceComposite/AlwaysSucceedDecorator2"]
script = ExtResource("3_i33jf")
[node name="ActionCheckHitCharacter" type="Node" parent="SequenceComposite/AlwaysSucceedDecorator2/检测命中角色并销毁"]
script = ExtResource("6_jq3ry")
metadata/_custom_type_script = ExtResource("6_jq3ry")
[node name="ActionDestroy" type="Node" parent="SequenceComposite/AlwaysSucceedDecorator2/检测命中角色并销毁"]
script = ExtResource("11_i4mx4")
[node name="AlwaysSucceedDecorator3" type="Node" parent="SequenceComposite"]
script = ExtResource("3_08et5")
metadata/_custom_type_script = ExtResource("3_08et5")
[node name="检测命中墙壁并销毁" type="Node" parent="SequenceComposite/AlwaysSucceedDecorator3"]
script = ExtResource("3_i33jf")
[node name="ActionCheckHitWall" type="Node" parent="SequenceComposite/AlwaysSucceedDecorator3/检测命中墙壁并销毁"]
script = ExtResource("8_qnf6p")
metadata/_custom_type_script = ExtResource("8_qnf6p")
[node name="ActionDestroy" type="Node" parent="SequenceComposite/AlwaysSucceedDecorator3/检测命中墙壁并销毁"]
script = ExtResource("11_i4mx4") script = ExtResource("11_i4mx4")

@ -7,7 +7,7 @@
[node name="BeehaveTree" type="Node" node_paths=PackedStringArray("blackboard")] [node name="BeehaveTree" type="Node" node_paths=PackedStringArray("blackboard")]
script = ExtResource("1_6wcp2") script = ExtResource("1_6wcp2")
blackboard = NodePath("@Node@25321") blackboard = NodePath("@Node@25116")
[node name="SequenceComposite" type="Node" parent="."] [node name="SequenceComposite" type="Node" parent="."]
script = ExtResource("2_0p8p1") script = ExtResource("2_0p8p1")

@ -1,17 +1,17 @@
[gd_scene load_steps=9 format=3 uid="uid://r4o07ns0q8rg"] [gd_scene load_steps=9 format=3 uid="uid://r4o07ns0q8rg"]
[ext_resource type="Script" path="res://addons/beehave/nodes/beehave_tree.gd" id="1_bbyao"] [ext_resource type="Script" uid="uid://mvwcxqcetiqp" path="res://addons/beehave/nodes/beehave_tree.gd" id="1_bbyao"]
[ext_resource type="Script" path="res://addons/beehave/nodes/composites/sequence.gd" id="2_04nig"] [ext_resource type="Script" uid="uid://cugftmuc8v30c" path="res://addons/beehave/nodes/composites/sequence.gd" id="2_04nig"]
[ext_resource type="Script" path="res://script/ai/action/action_find_target.gd" id="3_c43ds"] [ext_resource type="Script" uid="uid://d1cbkwu2v41cf" path="res://script/ai/action/action_find_target.gd" id="3_c43ds"]
[ext_resource type="Script" path="res://addons/beehave/nodes/composites/selector.gd" id="4_hf0vc"] [ext_resource type="Script" uid="uid://casy048cfvo0l" path="res://addons/beehave/nodes/composites/selector.gd" id="4_hf0vc"]
[ext_resource type="Script" path="res://script/ai/action_role_check/action_role_check_is.gd" id="5_niu75"] [ext_resource type="Script" uid="uid://dswopca1g8ewi" path="res://script/ai/action_role_check/action_role_check_is.gd" id="5_niu75"]
[ext_resource type="Script" path="res://script/ai/action_with_target/action_move_to.gd" id="6_l7hec"] [ext_resource type="Script" uid="uid://dq21r8kmyo51u" path="res://script/ai/action_with_target/action_move_to.gd" id="6_l7hec"]
[ext_resource type="Script" path="res://script/ai/action_with_target/action_cast_skill.gd" id="7_up57t"] [ext_resource type="Script" uid="uid://dalb13ecr5sx1" path="res://script/ai/action_with_target/action_cast_skill.gd" id="7_up57t"]
[ext_resource type="Script" path="res://script/ai/action/action_wait.gd" id="8_pkgji"] [ext_resource type="Script" uid="uid://cnw25wdsd3c76" path="res://script/ai/action/action_wait.gd" id="8_pkgji"]
[node name="BeehaveTree" type="Node" node_paths=PackedStringArray("blackboard")] [node name="BeehaveTree" type="Node" node_paths=PackedStringArray("blackboard")]
script = ExtResource("1_bbyao") script = ExtResource("1_bbyao")
blackboard = NodePath("@Node@19482") blackboard = NodePath("@Node@25117")
[node name="SequenceComposite" type="Node" parent="."] [node name="SequenceComposite" type="Node" parent="."]
script = ExtResource("2_04nig") script = ExtResource("2_04nig")

@ -0,0 +1 @@
uid://b3d1xvbgttiq7

@ -0,0 +1,8 @@
extends Action
class_name ActionCheckHitCharacter
func run(character: Character, blackboard: Blackboard) -> int:
if character.get_status("is_hit_character"):
return SUCCESS
return FAILURE

@ -0,0 +1,8 @@
extends Action
class_name ActionCheckHitWall
func run(character: Character, blackboard: Blackboard) -> int:
if character.get_status("is_hit_wall"):
return SUCCESS
return FAILURE

@ -11,4 +11,4 @@ func run(character: Character, blackboard: Blackboard) -> int:
if wait_time_left >= wait_time: if wait_time_left >= wait_time:
wait_time_left = 0 wait_time_left = 0
return SUCCESS return SUCCESS
return RUNNING return FAILURE

@ -0,0 +1,13 @@
extends Action
class_name ActionWaitTick
var wait_time: float = 0.1
var wait_time_left: float
func run(character: Character, blackboard: Blackboard) -> int:
wait_time_left += get_physics_process_delta_time()
if wait_time_left >= wait_time:
wait_time_left = 0
return SUCCESS
return FAILURE

@ -70,6 +70,7 @@ func add_attack(attack_info: Struct.AttackInfo) -> void:
func on_attack_character(result: Character, attack_info: Struct.AttackInfo) -> void: func on_attack_character(result: Character, attack_info: Struct.AttackInfo) -> void:
if attack_info.attack_box.is_hit_self != (result.team() == character.team()): if attack_info.attack_box.is_hit_self != (result.team() == character.team()):
return return
status.is_hit_character = true
var hit_result: Struct.HitResultInfo = settle(character.id(), result.id(), attack_info) var hit_result: Struct.HitResultInfo = settle(character.id(), result.id(), attack_info)
on_attack_hit(hit_result) on_attack_hit(hit_result)

@ -119,7 +119,6 @@ func update_move_effect(delta):
func update_move_check(delta) -> bool: func update_move_check(delta) -> bool:
var velocity: Vector3 = character.velocity var velocity: Vector3 = character.velocity
character.move_and_slide() character.move_and_slide()
if status.is_stagger:
var collision_count: int = character.get_slide_collision_count() var collision_count: int = character.get_slide_collision_count()
if collision_count > 0: if collision_count > 0:
var normal: Vector3 = Vector3.ZERO var normal: Vector3 = Vector3.ZERO
@ -128,6 +127,7 @@ func update_move_check(delta) -> bool:
normal += collision.get_normal() normal += collision.get_normal()
normal = normal.normalized() normal = normal.normalized()
var normal_speed: float = velocity.dot(normal) var normal_speed: float = velocity.dot(normal)
if status.is_stagger:
if normal_speed < -6 and normal.y >= 0: if normal_speed < -6 and normal.y >= 0:
#墙体互动 #墙体互动
Global.effect_mgr.cast_particle(ResourceManager.particle_hit_ground_heavy, character.pos(), normal) Global.effect_mgr.cast_particle(ResourceManager.particle_hit_ground_heavy, character.pos(), normal)
@ -146,6 +146,8 @@ func update_move_check(delta) -> bool:
character.add_buff("floating", -1) character.add_buff("floating", -1)
Global.camera_mgr.effect_shake(0.1) Global.camera_mgr.effect_shake(0.1)
if normal.y == 0: if normal.y == 0:
if not status.is_stagger:
status.is_hit_wall = true
return true return true
return false return false

@ -175,6 +175,8 @@ func break_skill():
status.is_charging = false status.is_charging = false
status.charging_level = 0 status.charging_level = 0
status.skill_action_key = "" status.skill_action_key = ""
status.is_hit_character = false
status.is_hit_wall = false
status.set_skill_break_level_add(0) status.set_skill_break_level_add(0)
buff.remove_buff("charging") buff.remove_buff("charging")
battle_attack_area.set_active(false) battle_attack_area.set_active(false)

@ -83,6 +83,8 @@ var skill_dir: Vector2 #技能释放方向
var skill_move_dir: Vector2 #技能位移方向 var skill_move_dir: Vector2 #技能位移方向
var skill_action_key: String #技能输入指令 var skill_action_key: String #技能输入指令
var skill_repeat_count: int #技能重复释放次数 var skill_repeat_count: int #技能重复释放次数
var is_hit_character: bool #是否击中角色
var is_hit_wall: bool #是否移动击中墙
@export var skill_move_speed: float #技能位移速度 @export var skill_move_speed: float #技能位移速度
@export var skill_float_speed: float #技能y位移速度 @export var skill_float_speed: float #技能y位移速度

Loading…
Cancel
Save