Add DamageFlash component for visual feedback on damage; implement flash effect with customizable duration and color
This commit is contained in:
@@ -21,6 +21,7 @@ GameObject:
|
||||
- component: {fileID: 2964327480768693548}
|
||||
- component: {fileID: 435001957072118475}
|
||||
- component: {fileID: 1527323237162929931}
|
||||
- component: {fileID: 3779661959168575914}
|
||||
m_Layer: 0
|
||||
m_Name: Basic Enemy
|
||||
m_TagString: Enemy
|
||||
@@ -339,6 +340,22 @@ MonoBehaviour:
|
||||
character: {fileID: 3298396436480561959}
|
||||
aiPath: {fileID: 2964327480768693548}
|
||||
target: {fileID: 0}
|
||||
--- !u!114 &3779661959168575914
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 204632724861940951}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 858b89cbe8774ee4a74182a9c4195c67, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
flashDuration: 0.1
|
||||
flashColor: {r: 1.6817929, g: 1.6817929, b: 1.6817929, a: 1}
|
||||
health: {fileID: 9093693903318130491}
|
||||
spriteRenderer: {fileID: 987872320002065258}
|
||||
--- !u!1 &3667932760953165253
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -394,7 +411,7 @@ SpriteRenderer:
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
|
||||
- {fileID: 2100000, guid: 0c6402377b097ca3992a420467f72056, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
|
@@ -165,7 +165,7 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
weaponStats:
|
||||
damage: 1
|
||||
damage: 4
|
||||
attackSpeed: 2
|
||||
range: 0
|
||||
damageType: 1
|
||||
|
8
Assets/Scenes/main.meta
Normal file
8
Assets/Scenes/main.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ce5ade8f24618d06abed8509b29338bb
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -465,7 +465,7 @@ MonoBehaviour:
|
||||
m_Bits: 1
|
||||
m_VolumeTrigger: {fileID: 0}
|
||||
m_VolumeFrameworkUpdateModeOption: 2
|
||||
m_RenderPostProcessing: 0
|
||||
m_RenderPostProcessing: 1
|
||||
m_Antialiasing: 0
|
||||
m_AntialiasingQuality: 2
|
||||
m_StopNaN: 0
|
||||
@@ -786,6 +786,10 @@ PrefabInstance:
|
||||
propertyPath: m_Name
|
||||
value: strawberry
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3626916397498700004, guid: 3456e0420235c3e7797d8a191c2de57f, type: 3}
|
||||
propertyPath: 'm_Materials.Array.data[0]'
|
||||
value:
|
||||
objectReference: {fileID: 2100000, guid: 0c6402377b097ca3992a420467f72056, type: 2}
|
||||
- target: {fileID: 7878350319992209165, guid: 3456e0420235c3e7797d8a191c2de57f, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
@@ -836,6 +840,11 @@ Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 7878350319992209165, guid: 3456e0420235c3e7797d8a191c2de57f, type: 3}
|
||||
m_PrefabInstance: {fileID: 628985990}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!212 &628985992 stripped
|
||||
SpriteRenderer:
|
||||
m_CorrespondingSourceObject: {fileID: 3626916397498700004, guid: 3456e0420235c3e7797d8a191c2de57f, type: 3}
|
||||
m_PrefabInstance: {fileID: 628985990}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1 &640255470
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -6937,6 +6946,7 @@ GameObject:
|
||||
- component: {fileID: 1261447610}
|
||||
- component: {fileID: 1261447609}
|
||||
- component: {fileID: 1261447613}
|
||||
- component: {fileID: 1261447614}
|
||||
m_Layer: 6
|
||||
m_Name: Player
|
||||
m_TagString: Player
|
||||
@@ -7041,8 +7051,8 @@ MonoBehaviour:
|
||||
armor: 0
|
||||
level: 1
|
||||
experience: 0
|
||||
baseExperienceToLevelUp: 25
|
||||
damage: 49
|
||||
baseExperienceToLevelUp: 5
|
||||
damage: 1
|
||||
rangedDamage: 1
|
||||
meleeDamage: 1
|
||||
attackRange: 16
|
||||
@@ -7190,6 +7200,71 @@ MonoBehaviour:
|
||||
mainCamera: {fileID: 519420031}
|
||||
weapons: []
|
||||
weaponsManager: {fileID: 1261447612}
|
||||
--- !u!114 &1261447614
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1261447599}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 858b89cbe8774ee4a74182a9c4195c67, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
flashDuration: 0.1
|
||||
flashColor: {r: 1.6934906, g: 1.6934906, b: 1.6934906, a: 1}
|
||||
health: {fileID: 1261447608}
|
||||
spriteRenderer: {fileID: 628985992}
|
||||
--- !u!1 &1265960066
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1265960068}
|
||||
- component: {fileID: 1265960067}
|
||||
m_Layer: 0
|
||||
m_Name: Global Volume
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &1265960067
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1265960066}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 172515602e62fb746b5d573b38a5fe58, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_IsGlobal: 1
|
||||
priority: 0
|
||||
blendDistance: 0
|
||||
weight: 1
|
||||
sharedProfile: {fileID: 11400000, guid: 6e3296081b34c0dce831316c320aa3b2, type: 2}
|
||||
--- !u!4 &1265960068
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1265960066}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: -9.939604, y: -1.4867522, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &1300312975
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -8603,3 +8678,4 @@ SceneRoots:
|
||||
- {fileID: 1791967925}
|
||||
- {fileID: 1368041001}
|
||||
- {fileID: 1953393769}
|
||||
- {fileID: 1265960068}
|
||||
|
109
Assets/Scenes/main/Global Volume Profile.asset
Normal file
109
Assets/Scenes/main/Global Volume Profile.asset
Normal file
@@ -0,0 +1,109 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &-6216573411260604986
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 0b2db86121404754db890f4c8dfe81b2, type: 3}
|
||||
m_Name: Bloom
|
||||
m_EditorClassIdentifier:
|
||||
active: 1
|
||||
skipIterations:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
threshold:
|
||||
m_OverrideState: 1
|
||||
m_Value: 1.5
|
||||
intensity:
|
||||
m_OverrideState: 1
|
||||
m_Value: 10
|
||||
scatter:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.7
|
||||
clamp:
|
||||
m_OverrideState: 0
|
||||
m_Value: 65472
|
||||
tint:
|
||||
m_OverrideState: 0
|
||||
m_Value: {r: 1, g: 1, b: 1, a: 1}
|
||||
highQualityFiltering:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
downscale:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
maxIterations:
|
||||
m_OverrideState: 0
|
||||
m_Value: 6
|
||||
dirtTexture:
|
||||
m_OverrideState: 0
|
||||
m_Value: {fileID: 0}
|
||||
dimension: 1
|
||||
dirtIntensity:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
--- !u!114 &-5693558520953604991
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 81180773991d8724ab7f2d216912b564, type: 3}
|
||||
m_Name: ChromaticAberration
|
||||
m_EditorClassIdentifier:
|
||||
active: 0
|
||||
intensity:
|
||||
m_OverrideState: 1
|
||||
m_Value: 0.382
|
||||
--- !u!114 &-107271883349870001
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 899c54efeace73346a0a16faa3afe726, type: 3}
|
||||
m_Name: Vignette
|
||||
m_EditorClassIdentifier:
|
||||
active: 1
|
||||
color:
|
||||
m_OverrideState: 1
|
||||
m_Value: {r: 0, g: 0, b: 0, a: 1}
|
||||
center:
|
||||
m_OverrideState: 1
|
||||
m_Value: {x: 0.5, y: 0.5}
|
||||
intensity:
|
||||
m_OverrideState: 1
|
||||
m_Value: 0.543
|
||||
smoothness:
|
||||
m_OverrideState: 1
|
||||
m_Value: 0.18
|
||||
rounded:
|
||||
m_OverrideState: 1
|
||||
m_Value: 0
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d7fd9488000d3734a9e00ee676215985, type: 3}
|
||||
m_Name: Global Volume Profile
|
||||
m_EditorClassIdentifier:
|
||||
components:
|
||||
- {fileID: -6216573411260604986}
|
||||
- {fileID: -107271883349870001}
|
||||
- {fileID: -5693558520953604991}
|
8
Assets/Scenes/main/Global Volume Profile.asset.meta
Normal file
8
Assets/Scenes/main/Global Volume Profile.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6e3296081b34c0dce831316c320aa3b2
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
64
Assets/Scripts/Systems/DamageFlash.cs
Normal file
64
Assets/Scripts/Systems/DamageFlash.cs
Normal file
@@ -0,0 +1,64 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using KBCore.Refs;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Systems
|
||||
{
|
||||
public class DamageFlash : MonoBehaviour
|
||||
{
|
||||
private static readonly int MarkerFlashColor = Shader.PropertyToID("_FlashColor");
|
||||
private static readonly int MarkerFlashAmount = Shader.PropertyToID("_FlashAmount");
|
||||
private Material material;
|
||||
private Coroutine damageFlashCoroutine;
|
||||
|
||||
[SerializeField] private float flashDuration;
|
||||
[ColorUsage(true, true)][SerializeField] private Color flashColor = Color.white;
|
||||
[SerializeField, Self] private Health health;
|
||||
[SerializeField, Child] private SpriteRenderer spriteRenderer;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
health.OnTakeDamage += OnHit;
|
||||
|
||||
Initialize();
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
health.OnTakeDamage -= OnHit;
|
||||
}
|
||||
|
||||
private void Initialize()
|
||||
{
|
||||
if (!spriteRenderer) return;
|
||||
|
||||
material = spriteRenderer.material;
|
||||
}
|
||||
|
||||
private void OnHit()
|
||||
{
|
||||
damageFlashCoroutine = StartCoroutine(Flash());
|
||||
}
|
||||
|
||||
private IEnumerator Flash()
|
||||
{
|
||||
SetFlashColor(flashColor);
|
||||
var elapsedTime = 0f;
|
||||
|
||||
while (elapsedTime < flashDuration)
|
||||
{
|
||||
elapsedTime += Time.deltaTime;
|
||||
var currentFlashAmount = Mathf.Lerp(1f, 0f, elapsedTime / flashDuration);
|
||||
material.SetFloat(MarkerFlashAmount, currentFlashAmount);
|
||||
yield return null;
|
||||
}
|
||||
}
|
||||
|
||||
private void SetFlashColor(Color color)
|
||||
{
|
||||
if (!material) return;
|
||||
material.SetColor(MarkerFlashColor, color);
|
||||
}
|
||||
}
|
||||
}
|
3
Assets/Scripts/Systems/DamageFlash.cs.meta
Normal file
3
Assets/Scripts/Systems/DamageFlash.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 858b89cbe8774ee4a74182a9c4195c67
|
||||
timeCreated: 1752336999
|
8
Assets/Shaders.meta
Normal file
8
Assets/Shaders.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c432d87e544cb3f229cf2fc6d831a62a
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
1129
Assets/Shaders/HitFlash.shadergraph
Normal file
1129
Assets/Shaders/HitFlash.shadergraph
Normal file
File diff suppressed because it is too large
Load Diff
10
Assets/Shaders/HitFlash.shadergraph.meta
Normal file
10
Assets/Shaders/HitFlash.shadergraph.meta
Normal file
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8571b09ed78ce48c6b5b2e588909ffdb
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3}
|
61
Assets/Shaders/HitFlashMat.mat
Normal file
61
Assets/Shaders/HitFlashMat.mat
Normal file
@@ -0,0 +1,61 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: HitFlashMat
|
||||
m_Shader: {fileID: -6465566751694194690, guid: 8571b09ed78ce48c6b5b2e588909ffdb, type: 3}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords: []
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_Lightmaps:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_LightmapsInd:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_ShadowMasks:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _FlashAmount: 0
|
||||
m_Colors:
|
||||
- _FlashColor: {r: 2, g: 2, b: 2, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
m_AllowLocking: 1
|
||||
--- !u!114 &8597859836182365986
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 11
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 10
|
8
Assets/Shaders/HitFlashMat.mat.meta
Normal file
8
Assets/Shaders/HitFlashMat.mat.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0c6402377b097ca3992a420467f72056
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Reference in New Issue
Block a user