From 4020a3d8d89aa451239ae74d6e7930456e6830f1 Mon Sep 17 00:00:00 2001 From: chendian <-> Date: Thu, 23 Nov 2023 01:43:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=97=E5=87=BB=E7=89=B9=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- render/material/effect_hit.tres | 11 ++++++ render/material/effect_slash.tres | 2 +- render/process_material/hit_normal.tres | 22 ++++++++++++ render/shader/effect_billboard.gdshader | 20 +++++++++++ ...{effect.gdshader => effect_slash.gdshader} | 0 render/texture/shape/flare.png | Bin 0 -> 42671 bytes render/texture/shape/flare.png.import | 34 ++++++++++++++++++ .../effect/particle/particle_hit_normal.tscn | 22 ++++++++++++ .../particle/particle_slash_normal.tscn | 1 - scene/launcher.tscn | 5 ++- script/character/battle.gd | 3 ++ script/character/character.gd | 1 + script/character/effect.gd | 11 +++--- script/manager/resource_manager.gd | 3 ++ 14 files changed, 128 insertions(+), 7 deletions(-) create mode 100644 render/material/effect_hit.tres create mode 100644 render/process_material/hit_normal.tres create mode 100644 render/shader/effect_billboard.gdshader rename render/shader/{effect.gdshader => effect_slash.gdshader} (100%) create mode 100644 render/texture/shape/flare.png create mode 100644 render/texture/shape/flare.png.import create mode 100644 scene/effect/particle/particle_hit_normal.tscn diff --git a/render/material/effect_hit.tres b/render/material/effect_hit.tres new file mode 100644 index 0000000..9c74ad0 --- /dev/null +++ b/render/material/effect_hit.tres @@ -0,0 +1,11 @@ +[gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://tlhcll6fyp7q"] + +[ext_resource type="Shader" path="res://render/shader/effect_billboard.gdshader" id="1_jw6vt"] +[ext_resource type="Texture2D" uid="uid://bb0yfk0u4lqqn" path="res://render/texture/shape/flare.png" id="2_x6l5a"] + +[resource] +render_priority = 0 +shader = ExtResource("1_jw6vt") +shader_parameter/glow_color = Color(0.933333, 1, 1, 1) +shader_parameter/intensity = 0.5 +shader_parameter/tex_main = ExtResource("2_x6l5a") diff --git a/render/material/effect_slash.tres b/render/material/effect_slash.tres index 1eefeac..8f371d2 100644 --- a/render/material/effect_slash.tres +++ b/render/material/effect_slash.tres @@ -1,6 +1,6 @@ [gd_resource type="ShaderMaterial" load_steps=5 format=3 uid="uid://dtyosukxpf33d"] -[ext_resource type="Shader" path="res://render/shader/effect.gdshader" id="1_s5fvm"] +[ext_resource type="Shader" path="res://render/shader/effect_slash.gdshader" id="1_s5fvm"] [ext_resource type="Texture2D" uid="uid://dd3e7ol8qa5eq" path="res://render/texture/noise/noise2.png" id="2_gu3jv"] [ext_resource type="Texture2D" uid="uid://c4byf37he3mjt" path="res://render/texture/noise/noise1.png" id="3_p66ui"] [ext_resource type="Texture2D" uid="uid://cksxjvafx2skm" path="res://render/texture/mask/mask5.png" id="3_r0nln"] diff --git a/render/process_material/hit_normal.tres b/render/process_material/hit_normal.tres new file mode 100644 index 0000000..4e9e32c --- /dev/null +++ b/render/process_material/hit_normal.tres @@ -0,0 +1,22 @@ +[gd_resource type="ParticleProcessMaterial" load_steps=5 format=3 uid="uid://bns2vfyf2qy6u"] + +[sub_resource type="Gradient" id="Gradient_fjosh"] +offsets = PackedFloat32Array(0, 0.0894942, 0.684825, 1) +colors = PackedColorArray(0.278431, 0.65098, 1, 0, 0.278431, 0.65098, 1, 1, 0.278431, 0.65098, 1, 0.941176, 0.278431, 0.65098, 1, 0) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_cypke"] +gradient = SubResource("Gradient_fjosh") + +[sub_resource type="Curve" id="Curve_igjlk"] +min_value = 2.0 +max_value = 4.0 +_data = [Vector2(0, 4), 0.0, 0.0, 0, 0, Vector2(1, 2), 0.0, 0.0, 0, 0] +point_count = 2 + +[sub_resource type="CurveTexture" id="CurveTexture_5xayb"] +curve = SubResource("Curve_igjlk") + +[resource] +gravity = Vector3(0, 0, 0) +scale_curve = SubResource("CurveTexture_5xayb") +color_ramp = SubResource("GradientTexture1D_cypke") diff --git a/render/shader/effect_billboard.gdshader b/render/shader/effect_billboard.gdshader new file mode 100644 index 0000000..8650669 --- /dev/null +++ b/render/shader/effect_billboard.gdshader @@ -0,0 +1,20 @@ +shader_type spatial; +render_mode blend_add,unshaded; + +uniform sampler2D tex_main : source_color; + +//void vertex() { + //mat4 modified_model_view = VIEW_MATRIX * mat4( + //INV_VIEW_MATRIX[0], + //INV_VIEW_MATRIX[1], + //INV_VIEW_MATRIX[2], + //MODEL_MATRIX[3] + //); + //MODELVIEW_MATRIX = modified_model_view; +//} + +void fragment() { + vec4 col = texture(tex_main, UV); + ALBEDO = mix(col.rgb, COLOR.rgb, COLOR.a); + ALPHA = col.r; +} diff --git a/render/shader/effect.gdshader b/render/shader/effect_slash.gdshader similarity index 100% rename from render/shader/effect.gdshader rename to render/shader/effect_slash.gdshader diff --git a/render/texture/shape/flare.png b/render/texture/shape/flare.png new file mode 100644 index 0000000000000000000000000000000000000000..c4f9cef991969e3873a1b4cf52b7be065178bbae GIT binary patch literal 42671 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 z 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 literal 0 HcmV?d00001 diff --git a/render/texture/shape/flare.png.import b/render/texture/shape/flare.png.import new file mode 100644 index 0000000..d2fa420 --- /dev/null +++ b/render/texture/shape/flare.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bb0yfk0u4lqqn" +path="res://.godot/imported/flare.png-3c5c77b68c2b446923833d2d81d06ac1.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://render/texture/shape/flare.png" +dest_files=["res://.godot/imported/flare.png-3c5c77b68c2b446923833d2d81d06ac1.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=0 +compress/normal_map=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=false +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/scene/effect/particle/particle_hit_normal.tscn b/scene/effect/particle/particle_hit_normal.tscn new file mode 100644 index 0000000..1c16f3d --- /dev/null +++ b/scene/effect/particle/particle_hit_normal.tscn @@ -0,0 +1,22 @@ +[gd_scene load_steps=5 format=3 uid="uid://io1yfgjm480t"] + +[ext_resource type="Script" path="res://script/effect/particle.gd" id="1_qxvm2"] +[ext_resource type="Material" uid="uid://tlhcll6fyp7q" path="res://render/material/effect_hit.tres" id="2_54a52"] +[ext_resource type="Material" uid="uid://bns2vfyf2qy6u" path="res://render/process_material/hit_normal.tres" id="3_1alqw"] + +[sub_resource type="QuadMesh" id="QuadMesh_0j7av"] + +[node name="Particle" type="Node3D"] +script = ExtResource("1_qxvm2") + +[node name="Slash" type="GPUParticles3D" parent="."] +material_override = ExtResource("2_54a52") +cast_shadow = 0 +emitting = false +amount = 1 +lifetime = 0.25 +one_shot = true +fixed_fps = 60 +local_coords = true +process_material = ExtResource("3_1alqw") +draw_pass_1 = SubResource("QuadMesh_0j7av") diff --git a/scene/effect/particle/particle_slash_normal.tscn b/scene/effect/particle/particle_slash_normal.tscn index f269094..7dc3f25 100644 --- a/scene/effect/particle/particle_slash_normal.tscn +++ b/scene/effect/particle/particle_slash_normal.tscn @@ -6,7 +6,6 @@ [ext_resource type="ArrayMesh" uid="uid://dq207a0waxk0j" path="res://render/mesh/slash1.obj" id="3_idjnm"] [node name="Particle" type="Node3D"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.699187, 4.61636) script = ExtResource("1_fx8ev") [node name="Slash" type="GPUParticles3D" parent="."] diff --git a/scene/launcher.tscn b/scene/launcher.tscn index ed9019c..0675733 100644 --- a/scene/launcher.tscn +++ b/scene/launcher.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=10 format=3 uid="uid://eoydwrunmm5n"] +[gd_scene load_steps=11 format=3 uid="uid://eoydwrunmm5n"] [ext_resource type="Script" path="res://script/manager/game_manager.gd" id="1_q2t80"] [ext_resource type="Script" path="res://script/manager/level_manager.gd" id="2_ewhkj"] @@ -9,6 +9,7 @@ [ext_resource type="PackedScene" uid="uid://cc525u8auypjf" path="res://scene/ui/profile_screen.tscn" id="6_u1fxn"] [ext_resource type="PackedScene" uid="uid://126wph4owvoy" path="res://scene/ui/hud_screen.tscn" id="7_gx646"] [ext_resource type="Script" path="res://script/manager/effect_manager.gd" id="8_0jv87"] +[ext_resource type="PackedScene" uid="uid://io1yfgjm480t" path="res://scene/effect/particle/particle_hit_normal.tscn" id="10_6naak"] [node name="Root" type="Node3D"] @@ -57,4 +58,6 @@ script = ExtResource("8_0jv87") [node name="EditorTool" type="Node3D" parent="."] script = ExtResource("5_n3qhi") +[node name="Particle" parent="." instance=ExtResource("10_6naak")] + [connection signal="item_rect_changed" from="GameManager/Stage" to="GameManager/Stage" method="_on_item_rect_changed"] diff --git a/script/character/battle.gd b/script/character/battle.gd index 1801e6f..aab0bd5 100644 --- a/script/character/battle.gd +++ b/script/character/battle.gd @@ -165,6 +165,9 @@ func settle(hit_info:HitInfo): character_to.add_buff("hit_back",attack.hit_back_duration) character_to.add_buff("hit_up",attack.hit_up_duration) + #受击特效 + character_to.cast_particle(ResourceManager.particle_hit_normal) + #抖动 character_to.add_buff("shake_x",0.2,true) diff --git a/script/character/character.gd b/script/character/character.gd index ee41d06..31961ab 100644 --- a/script/character/character.gd +++ b/script/character/character.gd @@ -92,3 +92,4 @@ func show_hit_text(value:String):SignalManager.character_hit_text.emit(id(),valu func show_hit_damage(value:float):SignalManager.character_hit_damage.emit(id(),value) func add_mp(value:float):battle.add_mp(value) func set_target(target:int):set_status("target",target);SignalManager.character_target_changed.emit(id(),target) +func cast_particle(resource:Resource):effect.cast_particle(resource) diff --git a/script/character/effect.gd b/script/character/effect.gd index 3dc64ce..a3e5d65 100644 --- a/script/character/effect.gd +++ b/script/character/effect.gd @@ -56,11 +56,14 @@ func cast_corpse():cast_image(corpse) func cast_attack_particle(): if !status.skill_cfg: return - var particle = status.skill_cfg.attack_particle as Resource - if !particle: - print("未配置技能攻击特效",status.skill_cfg) + var resource = status.skill_cfg.attack_particle as Resource + cast_particle(resource) + +func cast_particle(resource:Resource): + if !resource: + print("未配置技能特效") return - var new_particle = particle.instantiate() as Particle + var new_particle = resource.instantiate() as Particle new_particle.position = status.basic_offset new_particle.name = "attack_particle" var dir = status.skill_dir diff --git a/script/manager/resource_manager.gd b/script/manager/resource_manager.gd index b45b9a4..4a03c73 100644 --- a/script/manager/resource_manager.gd +++ b/script/manager/resource_manager.gd @@ -7,6 +7,9 @@ var scene_monster = load("res://scene/character/monster.tscn") #==material== var material_character = load("res://render/material/character.tres") +#==effect== +var particle_hit_normal = load("res://scene/effect/particle/particle_hit_normal.tscn") + #==config== #character var cfg_character_player = load("res://config/character/hero01.tres")