aboutsummaryrefslogtreecommitdiff
path: root/Assets/Scripts/DamageVolumeSystem
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts/DamageVolumeSystem')
-rw-r--r--Assets/Scripts/DamageVolumeSystem/DamageGenerator.cs159
-rw-r--r--Assets/Scripts/DamageVolumeSystem/DamageGenerator.cs.meta11
-rw-r--r--Assets/Scripts/DamageVolumeSystem/DamageHost.cs39
-rw-r--r--Assets/Scripts/DamageVolumeSystem/DamageHost.cs.meta11
-rw-r--r--Assets/Scripts/DamageVolumeSystem/Editor.meta8
-rw-r--r--Assets/Scripts/DamageVolumeSystem/Editor/DamageGeneratorEditor.cs57
-rw-r--r--Assets/Scripts/DamageVolumeSystem/Editor/DamageGeneratorEditor.cs.meta11
-rw-r--r--Assets/Scripts/DamageVolumeSystem/Editor/DamageHostEditor.cs101
-rw-r--r--Assets/Scripts/DamageVolumeSystem/Editor/DamageHostEditor.cs.meta11
-rw-r--r--Assets/Scripts/DamageVolumeSystem/Example.unity834
-rw-r--r--Assets/Scripts/DamageVolumeSystem/Example.unity.meta7
-rw-r--r--Assets/Scripts/DamageVolumeSystem/Icon.meta8
-rw-r--r--Assets/Scripts/DamageVolumeSystem/Icon/DamageGenerator.pngbin0 -> 393 bytes
-rw-r--r--Assets/Scripts/DamageVolumeSystem/Icon/DamageGenerator.png.meta114
-rw-r--r--Assets/Scripts/DamageVolumeSystem/Icon/DamageHost.pngbin0 -> 336 bytes
-rw-r--r--Assets/Scripts/DamageVolumeSystem/Icon/DamageHost.png.meta114
-rw-r--r--Assets/Scripts/DamageVolumeSystem/SimpleHealth.cs55
-rw-r--r--Assets/Scripts/DamageVolumeSystem/SimpleHealth.cs.meta11
-rw-r--r--Assets/Scripts/DamageVolumeSystem/WangSoul.DamageVolumeSystem.asmdef3
-rw-r--r--Assets/Scripts/DamageVolumeSystem/WangSoul.DamageVolumeSystem.asmdef.meta7
-rw-r--r--Assets/Scripts/DamageVolumeSystem/伤害系统.md56
-rw-r--r--Assets/Scripts/DamageVolumeSystem/伤害系统.md.meta7
22 files changed, 1624 insertions, 0 deletions
diff --git a/Assets/Scripts/DamageVolumeSystem/DamageGenerator.cs b/Assets/Scripts/DamageVolumeSystem/DamageGenerator.cs
new file mode 100644
index 0000000..ca50a26
--- /dev/null
+++ b/Assets/Scripts/DamageVolumeSystem/DamageGenerator.cs
@@ -0,0 +1,159 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.Serialization;
+
+namespace DamageVolumeSystem
+{
+ [Icon("Assets/Scripts/DamageVolumeSystem/Icon/DamageGenerator.png")]
+ [RequireComponent(typeof(BoxCollider))]
+ [ExecuteAlways]
+ public class DamageGenerator : MonoBehaviour
+ {
+ [HideInInspector] public DamageHost binding;
+
+ // 伤害
+ public int damage = 2500;
+
+ // 衰减曲线
+ public AnimationCurve falloffCurveByDistance = AnimationCurve.Linear(0, 1, 1, 0);
+ public AnimationCurve falloffCurveBySpeed = AnimationCurve.Linear(0, 1, 1, 0);
+
+ // 碰撞体
+ private BoxCollider _collider;
+
+ // 碰撞时发生伤害
+ public bool emitOnCollide = true;
+
+ // 扫描到的碰撞体
+ private readonly HashSet<DamageHost> _scannedHosts = new();
+
+ // 速度缩放
+ private float _speedScale;
+
+ // 上一帧的位置
+ private Vector3 _lastPosition;
+
+ private void Start()
+ {
+ _collider = GetComponent<BoxCollider>();
+ }
+
+ private void FixedUpdate()
+ {
+ var p = transform.position;
+ var distanceToLast = Vector3.Distance(p, _lastPosition);
+ var next = falloffCurveBySpeed.Evaluate(1 - Mathf.Clamp01(distanceToLast / 1.5f));
+ _speedScale = 0.5f + next * 2;
+
+ _lastPosition = p;
+ }
+
+ public void Update()
+ {
+#if UNITY_EDITOR
+ _collider.isTrigger = true;
+ _collider.center = Vector3.zero;
+ _collider.size = transform.lossyScale;
+#endif
+ }
+
+ private void OnTriggerEnter(Collider other)
+ {
+ var damageHost = other.GetComponent<DamageHost>();
+ if (damageHost != null && _scannedHosts.Add(damageHost))
+ {
+ // 碰撞时立刻产生伤害
+ if (emitOnCollide)
+ Emit();
+ }
+ }
+
+ private void OnTriggerExit(Collider other)
+ {
+ var damageHost = other.GetComponent<DamageHost>();
+ if (damageHost != null && _scannedHosts.Contains(damageHost))
+ {
+ _scannedHosts.Remove(damageHost);
+ }
+ }
+
+ public void Emit()
+ {
+ var pos = transform.position;
+
+ foreach (var scannedHost in _scannedHosts)
+ {
+ var selfGroup = binding?.group ?? 12;
+ if (selfGroup == scannedHost.group)
+ continue;
+
+ var posTarget = scannedHost.transform.position;
+ var distance = Vector3.Distance(pos, posTarget);
+ var percent = Mathf.Clamp01(distance / 2);
+
+ var direction = (posTarget - pos).normalized;
+
+ // 用衰减曲线重新映射百分比
+ var rePercent = falloffCurveByDistance.Evaluate(1 - percent);
+ var calcDamage = Mathf.RoundToInt(rePercent * damage * _speedScale);
+
+ Debug.Log($"[伤害生成器: {gameObject.name}] 对 {scannedHost.name} 造成 {calcDamage} 点伤害 (距离衰减 {percent} -> {rePercent}, 速度增益 {_speedScale})");
+ scannedHost.onDamageReceived.Invoke(new Damage
+ {
+ Group = binding?.group ?? 12,
+ Force = calcDamage,
+ Direction = direction,
+ });
+ }
+ }
+
+ # region Display
+
+ private void OnDrawGizmos()
+ {
+ var t = transform;
+ Gizmos.color = GetColorByGroupId(binding?.group?? 12);
+
+ // 画指向线
+ foreach (var scannedHost in _scannedHosts)
+ {
+ Gizmos.DrawLine(scannedHost.transform.position, t.position);
+ }
+
+ // 画生成框
+ Gizmos.matrix = t.localToWorldMatrix;
+ DrawSpecialCube(Vector3.zero, t.lossyScale);
+ }
+
+ private void DrawSpecialCube(Vector3 center, Vector3 size)
+ {
+ var color = Gizmos.color;
+ Gizmos.DrawWireCube(center, size);
+ Gizmos.color = new Color(color.r, color.g, color.b, 0.5f);
+ Gizmos.DrawCube(center, size);
+ }
+
+ private Color GetColorByGroupId(int group)
+ {
+ switch (group)
+ {
+ case 0: return Color.red;
+ case 1: return Color.blue;
+ case 2: return Color.green;
+ case 3: return Color.yellow;
+ case 4: return Color.magenta;
+ case 5: return Color.cyan;
+ case 6: return new Color(1f, 0.5f, 0f);
+ case 7: return new Color(0.4f, 0.01f, 0.5f);
+ case 8: return new Color(0.63f, 0.87f, 0f);
+ case 9: return new Color(0.98f, 0.67f, 0.91f);
+ case 10: return new Color(0.49f, 0.93f, 0.67f);
+ case 11: return new Color(0.11f, 0.55f, 0.8f);
+ default: return Color.white;
+ }
+ }
+
+ #endregion
+ }
+}
diff --git a/Assets/Scripts/DamageVolumeSystem/DamageGenerator.cs.meta b/Assets/Scripts/DamageVolumeSystem/DamageGenerator.cs.meta
new file mode 100644
index 0000000..1405718
--- /dev/null
+++ b/Assets/Scripts/DamageVolumeSystem/DamageGenerator.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a245a98054397e54fa43ab400771e7c9
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/DamageVolumeSystem/DamageHost.cs b/Assets/Scripts/DamageVolumeSystem/DamageHost.cs
new file mode 100644
index 0000000..f208bf8
--- /dev/null
+++ b/Assets/Scripts/DamageVolumeSystem/DamageHost.cs
@@ -0,0 +1,39 @@
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.Events;
+
+namespace DamageVolumeSystem
+{
+ [RequireComponent(typeof(Rigidbody))]
+ public class DamageHost : MonoBehaviour
+ {
+ // 组
+ [HideInInspector] public int group;
+
+ // 伤害生成器列表
+ [HideInInspector] public List<DamageGenerator> generators = new();
+
+ // 当伤害接收时
+ public UnityEvent<Damage> onDamageReceived;
+
+ // 刚体
+ private Rigidbody _rigidbody;
+
+ private void Start()
+ {
+ _rigidbody = GetComponent<Rigidbody>();
+ }
+ }
+
+ public struct Damage
+ {
+ // 伤害产生的组
+ public int Group;
+
+ // 伤害强度
+ public int Force;
+
+ // 伤害方向
+ public Vector3 Direction;
+ }
+}
diff --git a/Assets/Scripts/DamageVolumeSystem/DamageHost.cs.meta b/Assets/Scripts/DamageVolumeSystem/DamageHost.cs.meta
new file mode 100644
index 0000000..d79a65e
--- /dev/null
+++ b/Assets/Scripts/DamageVolumeSystem/DamageHost.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 34b8ce046bf25f9418c630a25cd42c83
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {fileID: 2800000, guid: d1d5127e4e13ef3478627cde50f3eac4, type: 3}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/DamageVolumeSystem/Editor.meta b/Assets/Scripts/DamageVolumeSystem/Editor.meta
new file mode 100644
index 0000000..7a61640
--- /dev/null
+++ b/Assets/Scripts/DamageVolumeSystem/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5e573a97afd45004db4aa87f810175a9
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/DamageVolumeSystem/Editor/DamageGeneratorEditor.cs b/Assets/Scripts/DamageVolumeSystem/Editor/DamageGeneratorEditor.cs
new file mode 100644
index 0000000..91a2123
--- /dev/null
+++ b/Assets/Scripts/DamageVolumeSystem/Editor/DamageGeneratorEditor.cs
@@ -0,0 +1,57 @@
+#if UNITY_EDITOR
+using UnityEditor;
+using UnityEngine;
+
+namespace DamageVolumeSystem.Editor
+{
+ [CustomEditor(typeof(DamageGenerator))]
+ public class DamageGeneratorEditor : UnityEditor.Editor
+ {
+ /*
+ * Editor page created by Mountools
+ * Author : WangSoul Team
+ * Date : 2026 / 05 / 09 - 16:20:21
+ */
+
+ public DamageGenerator damageGenerator;
+
+ private void OnEnable()
+ {
+ damageGenerator = (DamageGenerator) target;
+ }
+
+ private void DrawDamageGeneratorEditor()
+ {
+ if (GUILayout.Button("生成伤害"))
+ {
+ damageGenerator.Emit();
+ }
+ }
+
+ #region _
+
+ public override void OnInspectorGUI()
+ {
+ Undo.RecordObject(damageGenerator, "Edit DamageGenerator");
+ EditorGUI.BeginChangeCheck();
+
+ DrawDefaultInspector();
+ DrawDamageGeneratorEditor();
+
+ if (EditorGUI.EndChangeCheck())
+ {
+ EditorUtility.SetDirty(damageGenerator);
+ Undo.FlushUndoRecordObjects();
+ serializedObject.ApplyModifiedProperties();
+ }
+ }
+
+ private bool Property(string label, string propertyName, params GUILayoutOption[] options)
+ {
+ return EditorGUILayout.PropertyField(serializedObject.FindProperty(propertyName), new GUIContent(label), options);
+ }
+
+ #endregion
+ }
+}
+#endif \ No newline at end of file
diff --git a/Assets/Scripts/DamageVolumeSystem/Editor/DamageGeneratorEditor.cs.meta b/Assets/Scripts/DamageVolumeSystem/Editor/DamageGeneratorEditor.cs.meta
new file mode 100644
index 0000000..34f87d8
--- /dev/null
+++ b/Assets/Scripts/DamageVolumeSystem/Editor/DamageGeneratorEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fde0d034d07248346bf79a171826546f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/DamageVolumeSystem/Editor/DamageHostEditor.cs b/Assets/Scripts/DamageVolumeSystem/Editor/DamageHostEditor.cs
new file mode 100644
index 0000000..acf0388
--- /dev/null
+++ b/Assets/Scripts/DamageVolumeSystem/Editor/DamageHostEditor.cs
@@ -0,0 +1,101 @@
+#if UNITY_EDITOR
+using UnityEditor;
+using UnityEngine;
+
+namespace DamageVolumeSystem.Editor
+{
+ [CustomEditor(typeof(DamageHost))]
+ public class DamageHostEditor : UnityEditor.Editor
+ {
+ /*
+ * Editor page created by Mountools
+ * Author : WangSoul
+ * Date : 2026 / 05 / 09 - 15:26:18
+ */
+
+ public DamageHost damageHost;
+
+ private void OnEnable()
+ {
+ damageHost = (DamageHost) target;
+ }
+
+ private void DrawDamageHostEditor()
+ {
+ EditorGUILayout.HelpBox("这玩意用来绑在产生伤害或接收伤害的物体上的,绑上去就能接收事件了,但是具体伤害事件还得单独接入,不同物体有不同的接收伤害模式。", MessageType.Info);
+
+ EditorGUILayout.LabelField("伤害组 ID,同 ID 的物体不会互相伤害");
+ DrawGroupButtons(ref damageHost.group, 12);
+
+ EditorGUILayout.Space();
+
+ EditorGUILayout.HelpBox($"当前组内发现 {damageHost.generators.Count} 个伤害生成器,修改了一定要记得重新搜寻", MessageType.Info);
+ EditorGUILayout.BeginHorizontal();
+ {
+ if (GUILayout.Button("搜寻"))
+ {
+ damageHost.generators.Clear();
+ foreach (var generator in damageHost.gameObject.GetComponentsInChildren<DamageGenerator>())
+ {
+ damageHost.generators.Add(generator);
+
+ generator.binding = damageHost;
+ EditorUtility.SetDirty(generator);
+ }
+ }
+ }
+ EditorGUILayout.EndHorizontal();;
+
+ EditorGUILayout.Space();
+
+ EditorGUILayout.HelpBox("这玩意是伤害事件,当有伤害发生时会执行,记得绑定", MessageType.Info);
+ }
+
+ private static void DrawGroupButtons(ref int groupValue, int buttonCount, int columns = 4)
+ {
+ for (int i = 0; i < buttonCount; i += columns)
+ {
+ EditorGUILayout.BeginHorizontal();
+ for (int j = 0; j < columns && i + j < buttonCount; j++)
+ {
+ int buttonValue = i + j;
+ var color = GUI.backgroundColor;
+ GUI.backgroundColor = (groupValue == buttonValue) ? new Color(0.51f, 0.69f, 1f) : color;
+ if (GUILayout.Button(buttonValue.ToString(), GUILayout.Width(24)))
+ {
+ groupValue = buttonValue;
+ }
+
+ GUI.backgroundColor = color;
+ }
+ EditorGUILayout.EndHorizontal();
+ }
+ }
+
+ #region _
+
+ public override void OnInspectorGUI()
+ {
+ Undo.RecordObject(damageHost, "Edit DamageHost");
+ EditorGUI.BeginChangeCheck();
+
+ DrawDamageHostEditor();
+ DrawDefaultInspector();
+
+ if (EditorGUI.EndChangeCheck())
+ {
+ EditorUtility.SetDirty(damageHost);
+ Undo.FlushUndoRecordObjects();
+ serializedObject.ApplyModifiedProperties();
+ }
+ }
+
+ private bool Property(string label, string propertyName, params GUILayoutOption[] options)
+ {
+ return EditorGUILayout.PropertyField(serializedObject.FindProperty(propertyName), new GUIContent(label), options);
+ }
+
+ #endregion
+ }
+}
+#endif \ No newline at end of file
diff --git a/Assets/Scripts/DamageVolumeSystem/Editor/DamageHostEditor.cs.meta b/Assets/Scripts/DamageVolumeSystem/Editor/DamageHostEditor.cs.meta
new file mode 100644
index 0000000..dfef7c2
--- /dev/null
+++ b/Assets/Scripts/DamageVolumeSystem/Editor/DamageHostEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6dacdf4ef8c4aca44a00b121ae0c595d
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/DamageVolumeSystem/Example.unity b/Assets/Scripts/DamageVolumeSystem/Example.unity
new file mode 100644
index 0000000..ac25050
--- /dev/null
+++ b/Assets/Scripts/DamageVolumeSystem/Example.unity
@@ -0,0 +1,834 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_OcclusionBakeSettings:
+ smallestOccluder: 5
+ smallestHole: 0.25
+ backfaceThreshold: 100
+ m_SceneGUID: 00000000000000000000000000000000
+ m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 9
+ m_Fog: 0
+ m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+ m_FogMode: 3
+ m_FogDensity: 0.01
+ m_LinearFogStart: 0
+ m_LinearFogEnd: 300
+ m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+ m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+ m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+ m_AmbientIntensity: 1
+ m_AmbientMode: 0
+ m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+ m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
+ m_HaloStrength: 0.5
+ m_FlareStrength: 1
+ m_FlareFadeSpeed: 3
+ m_HaloTexture: {fileID: 0}
+ m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+ m_DefaultReflectionMode: 0
+ m_DefaultReflectionResolution: 128
+ m_ReflectionBounces: 1
+ m_ReflectionIntensity: 1
+ m_CustomReflection: {fileID: 0}
+ m_Sun: {fileID: 0}
+ m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 12
+ m_GIWorkflowMode: 1
+ m_GISettings:
+ serializedVersion: 2
+ m_BounceScale: 1
+ m_IndirectOutputScale: 1
+ m_AlbedoBoost: 1
+ m_EnvironmentLightingMode: 0
+ m_EnableBakedLightmaps: 1
+ m_EnableRealtimeLightmaps: 0
+ m_LightmapEditorSettings:
+ serializedVersion: 12
+ m_Resolution: 2
+ m_BakeResolution: 40
+ m_AtlasSize: 1024
+ m_AO: 0
+ m_AOMaxDistance: 1
+ m_CompAOExponent: 1
+ m_CompAOExponentDirect: 0
+ m_ExtractAmbientOcclusion: 0
+ m_Padding: 2
+ m_LightmapParameters: {fileID: 0}
+ m_LightmapsBakeMode: 1
+ m_TextureCompression: 1
+ m_FinalGather: 0
+ m_FinalGatherFiltering: 1
+ m_FinalGatherRayCount: 256
+ m_ReflectionCompression: 2
+ m_MixedBakeMode: 2
+ m_BakeBackend: 1
+ m_PVRSampling: 1
+ m_PVRDirectSampleCount: 32
+ m_PVRSampleCount: 512
+ m_PVRBounces: 2
+ m_PVREnvironmentSampleCount: 256
+ m_PVREnvironmentReferencePointCount: 2048
+ m_PVRFilteringMode: 1
+ m_PVRDenoiserTypeDirect: 1
+ m_PVRDenoiserTypeIndirect: 1
+ m_PVRDenoiserTypeAO: 1
+ m_PVRFilterTypeDirect: 0
+ m_PVRFilterTypeIndirect: 0
+ m_PVRFilterTypeAO: 0
+ m_PVREnvironmentMIS: 1
+ m_PVRCulling: 1
+ m_PVRFilteringGaussRadiusDirect: 1
+ m_PVRFilteringGaussRadiusIndirect: 5
+ m_PVRFilteringGaussRadiusAO: 2
+ m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+ m_PVRFilteringAtrousPositionSigmaIndirect: 2
+ m_PVRFilteringAtrousPositionSigmaAO: 1
+ m_ExportTrainingData: 0
+ m_TrainingDataDestination: TrainingData
+ m_LightProbeSampleCountMultiplier: 4
+ m_LightingDataAsset: {fileID: 0}
+ m_LightingSettings: {fileID: 0}
+--- !u!196 &4
+NavMeshSettings:
+ serializedVersion: 2
+ m_ObjectHideFlags: 0
+ m_BuildSettings:
+ serializedVersion: 3
+ agentTypeID: 0
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.4
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ minRegionArea: 2
+ manualCellSize: 0
+ cellSize: 0.16666667
+ manualTileSize: 0
+ tileSize: 256
+ buildHeightMesh: 0
+ maxJobWorkers: 0
+ preserveTilesOutsideBounds: 0
+ debug:
+ m_Flags: 0
+ m_NavMeshData: {fileID: 0}
+--- !u!1 &250672567
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 250672570}
+ - component: {fileID: 250672569}
+ - component: {fileID: 250672568}
+ m_Layer: 0
+ m_Name: Directional Light
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &250672568
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 250672567}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Version: 3
+ m_UsePipelineSettings: 1
+ m_AdditionalLightsShadowResolutionTier: 2
+ m_LightLayerMask: 1
+ m_RenderingLayers: 1
+ m_CustomShadowLayers: 0
+ m_ShadowLayerMask: 1
+ m_ShadowRenderingLayers: 1
+ m_LightCookieSize: {x: 1, y: 1}
+ m_LightCookieOffset: {x: 0, y: 0}
+ m_SoftShadowQuality: 0
+--- !u!108 &250672569
+Light:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 250672567}
+ m_Enabled: 1
+ serializedVersion: 10
+ m_Type: 1
+ m_Shape: 0
+ m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
+ m_Intensity: 1
+ m_Range: 10
+ m_SpotAngle: 30
+ m_InnerSpotAngle: 21.80208
+ m_CookieSize: 10
+ m_Shadows:
+ m_Type: 2
+ m_Resolution: -1
+ m_CustomResolution: -1
+ m_Strength: 1
+ m_Bias: 0.05
+ m_NormalBias: 0.4
+ m_NearPlane: 0.2
+ m_CullingMatrixOverride:
+ e00: 1
+ e01: 0
+ e02: 0
+ e03: 0
+ e10: 0
+ e11: 1
+ e12: 0
+ e13: 0
+ e20: 0
+ e21: 0
+ e22: 1
+ e23: 0
+ e30: 0
+ e31: 0
+ e32: 0
+ e33: 1
+ m_UseCullingMatrixOverride: 0
+ m_Cookie: {fileID: 0}
+ m_DrawHalo: 0
+ m_Flare: {fileID: 0}
+ m_RenderMode: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingLayerMask: 1
+ m_Lightmapping: 4
+ m_LightShadowCasterMode: 0
+ m_AreaSize: {x: 1, y: 1}
+ m_BounceIntensity: 1
+ m_ColorTemperature: 6570
+ m_UseColorTemperature: 0
+ m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
+ m_UseBoundingSphereOverride: 0
+ m_UseViewFrustumForShadowCasterCull: 1
+ m_ShadowRadius: 0
+ m_ShadowAngle: 0
+--- !u!4 &250672570
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 250672567}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
+ m_LocalPosition: {x: 0, y: 3, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+--- !u!1 &477429514
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 477429515}
+ - component: {fileID: 477429517}
+ - component: {fileID: 477429516}
+ m_Layer: 0
+ m_Name: DamageGenerator
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &477429515
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 477429514}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1.15, y: 0.68914, z: 0.707}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1389700919}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &477429516
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 477429514}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: a245a98054397e54fa43ab400771e7c9, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ binding: {fileID: 1389700916}
+ damage: 2500
+ falloffCurveByDistance:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 1
+ inSlope: 0
+ outSlope: -1
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0
+ outWeight: 0
+ - serializedVersion: 3
+ time: 1
+ value: 0
+ inSlope: -1
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0
+ outWeight: 0
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ falloffCurveBySpeed:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 1
+ inSlope: 0
+ outSlope: -1
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0
+ outWeight: 0
+ - serializedVersion: 3
+ time: 1
+ value: 0
+ inSlope: -1
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0
+ outWeight: 0
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ emitOnCollide: 1
+--- !u!65 &477429517
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 477429514}
+ m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
+ m_IsTrigger: 1
+ m_ProvidesContacts: 0
+ m_Enabled: 1
+ serializedVersion: 3
+ m_Size: {x: 1.15, y: 0.68914, z: 0.707}
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!1 &806330943
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 806330946}
+ - component: {fileID: 806330945}
+ - component: {fileID: 806330944}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!81 &806330944
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 806330943}
+ m_Enabled: 1
+--- !u!20 &806330945
+Camera:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 806330943}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 1
+ m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+ m_projectionMatrixMode: 1
+ m_GateFitMode: 2
+ m_FOVAxisMode: 0
+ m_Iso: 200
+ m_ShutterSpeed: 0.005
+ m_Aperture: 16
+ m_FocusDistance: 10
+ m_FocalLength: 50
+ m_BladeCount: 5
+ m_Curvature: {x: 2, y: 11}
+ m_BarrelClipping: 0.25
+ m_Anamorphism: 0
+ m_SensorSize: {x: 36, y: 24}
+ m_LensShift: {x: 0, y: 0}
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.3
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 1
+ m_AllowMSAA: 1
+ m_AllowDynamicResolution: 0
+ m_ForceIntoRT: 0
+ m_OcclusionCulling: 1
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+--- !u!4 &806330946
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 806330943}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 1, z: -10}
+ 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 &888070360
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 888070364}
+ - component: {fileID: 888070363}
+ - component: {fileID: 888070362}
+ - component: {fileID: 888070365}
+ - component: {fileID: 888070361}
+ m_Layer: 0
+ m_Name: Character
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &888070361
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 888070360}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 34b8ce046bf25f9418c630a25cd42c83, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ group: 0
+ generators: []
+ onDamageReceived:
+ m_PersistentCalls:
+ m_Calls:
+ - m_Target: {fileID: 888070365}
+ m_TargetAssemblyTypeName: DamageVolumeSystem.SimpleHealth, WangSoul.DamageVolumeSystem
+ m_MethodName: Damage
+ m_Mode: 0
+ m_Arguments:
+ m_ObjectArgument: {fileID: 0}
+ m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+ m_IntArgument: 0
+ m_FloatArgument: 0
+ m_StringArgument:
+ m_BoolArgument: 0
+ m_CallState: 2
+--- !u!54 &888070362
+Rigidbody:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 888070360}
+ serializedVersion: 4
+ m_Mass: 1
+ m_Drag: 0
+ m_AngularDrag: 0.05
+ m_CenterOfMass: {x: 0, y: 0, z: 0}
+ m_InertiaTensor: {x: 1, y: 1, z: 1}
+ m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ImplicitCom: 1
+ m_ImplicitTensor: 1
+ m_UseGravity: 0
+ m_IsKinematic: 0
+ m_Interpolate: 0
+ m_Constraints: 0
+ m_CollisionDetection: 0
+--- !u!136 &888070363
+CapsuleCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 888070360}
+ m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
+ m_IsTrigger: 0
+ m_ProvidesContacts: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Radius: 0.5
+ m_Height: 2
+ m_Direction: 1
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!4 &888070364
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 888070360}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1341760970}
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0}
+--- !u!114 &888070365
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 888070360}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: a243d9be50ad64b4f81a04072610b82c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ max: 10000
+ health: 10000
+--- !u!1 &1341760969
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1341760970}
+ - component: {fileID: 1341760972}
+ - component: {fileID: 1341760971}
+ m_Layer: 0
+ m_Name: Mesh
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1341760970
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1341760969}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 888070364}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!23 &1341760971
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1341760969}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &1341760972
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1341760969}
+ m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1 &1389700915
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1389700919}
+ - component: {fileID: 1389700917}
+ - component: {fileID: 1389700916}
+ m_Layer: 0
+ m_Name: Bullet
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1389700916
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1389700915}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 34b8ce046bf25f9418c630a25cd42c83, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ group: 0
+ generators:
+ - {fileID: 477429516}
+ onDamageReceived:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!54 &1389700917
+Rigidbody:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1389700915}
+ serializedVersion: 4
+ m_Mass: 1
+ m_Drag: 0
+ m_AngularDrag: 0.05
+ m_CenterOfMass: {x: 0, y: 0, z: 0}
+ m_InertiaTensor: {x: 1, y: 1, z: 1}
+ m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ImplicitCom: 1
+ m_ImplicitTensor: 1
+ m_UseGravity: 0
+ m_IsKinematic: 0
+ m_Interpolate: 0
+ m_Constraints: 0
+ m_CollisionDetection: 0
+--- !u!4 &1389700919
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1389700915}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 2.014, y: 0.834, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1937306496}
+ - {fileID: 477429515}
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1937306495
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1937306496}
+ - component: {fileID: 1937306498}
+ - component: {fileID: 1937306497}
+ m_Layer: 0
+ m_Name: Mesh
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1937306496
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1937306495}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0.7071068, w: 0.7071068}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0.5, y: 0.5, z: 0.5}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1389700919}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90}
+--- !u!23 &1937306497
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1937306495}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &1937306498
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1937306495}
+ m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1660057539 &9223372036854775807
+SceneRoots:
+ m_ObjectHideFlags: 0
+ m_Roots:
+ - {fileID: 806330946}
+ - {fileID: 250672570}
+ - {fileID: 888070364}
+ - {fileID: 1389700919}
diff --git a/Assets/Scripts/DamageVolumeSystem/Example.unity.meta b/Assets/Scripts/DamageVolumeSystem/Example.unity.meta
new file mode 100644
index 0000000..1542231
--- /dev/null
+++ b/Assets/Scripts/DamageVolumeSystem/Example.unity.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 800f291ad6a7e354f829ea4aed4ed8a3
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/DamageVolumeSystem/Icon.meta b/Assets/Scripts/DamageVolumeSystem/Icon.meta
new file mode 100644
index 0000000..8d360ce
--- /dev/null
+++ b/Assets/Scripts/DamageVolumeSystem/Icon.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d193cc4be57279942816319256be9154
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/DamageVolumeSystem/Icon/DamageGenerator.png b/Assets/Scripts/DamageVolumeSystem/Icon/DamageGenerator.png
new file mode 100644
index 0000000..46b21dc
--- /dev/null
+++ b/Assets/Scripts/DamageVolumeSystem/Icon/DamageGenerator.png
Binary files differ
diff --git a/Assets/Scripts/DamageVolumeSystem/Icon/DamageGenerator.png.meta b/Assets/Scripts/DamageVolumeSystem/Icon/DamageGenerator.png.meta
new file mode 100644
index 0000000..bf245fd
--- /dev/null
+++ b/Assets/Scripts/DamageVolumeSystem/Icon/DamageGenerator.png.meta
@@ -0,0 +1,114 @@
+fileFormatVersion: 2
+guid: 0c35994f66074e9449f31da54bcc9ef2
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/DamageVolumeSystem/Icon/DamageHost.png b/Assets/Scripts/DamageVolumeSystem/Icon/DamageHost.png
new file mode 100644
index 0000000..857c1e8
--- /dev/null
+++ b/Assets/Scripts/DamageVolumeSystem/Icon/DamageHost.png
Binary files differ
diff --git a/Assets/Scripts/DamageVolumeSystem/Icon/DamageHost.png.meta b/Assets/Scripts/DamageVolumeSystem/Icon/DamageHost.png.meta
new file mode 100644
index 0000000..71a91a7
--- /dev/null
+++ b/Assets/Scripts/DamageVolumeSystem/Icon/DamageHost.png.meta
@@ -0,0 +1,114 @@
+fileFormatVersion: 2
+guid: d1d5127e4e13ef3478627cde50f3eac4
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/DamageVolumeSystem/SimpleHealth.cs b/Assets/Scripts/DamageVolumeSystem/SimpleHealth.cs
new file mode 100644
index 0000000..c301d4a
--- /dev/null
+++ b/Assets/Scripts/DamageVolumeSystem/SimpleHealth.cs
@@ -0,0 +1,55 @@
+using System;
+using UnityEngine;
+
+namespace DamageVolumeSystem
+{
+ [RequireComponent(typeof(Rigidbody))]
+ public class SimpleHealth : MonoBehaviour
+ {
+ public int max = 10000;
+ public int health = 10000;
+
+ private Rigidbody _rigidbody;
+
+ private void Start()
+ {
+ _rigidbody = GetComponent<Rigidbody>();
+ }
+
+ public void Damage(Damage amount)
+ {
+ health -= amount.Force;
+ health = Mathf.Clamp(health, 0, max);
+
+ _rigidbody.AddForce(amount.Direction * amount.Force / 200);
+ }
+
+ public void Heal(Damage amount)
+ {
+ health += amount.Force;
+ health = Mathf.Clamp(health, 0, max);
+ }
+
+ private void OnDrawGizmos()
+ {
+ var t = transform;
+ var size = (t.lossyScale.x + t.lossyScale.y + t.lossyScale.z) / 3;
+
+ Gizmos.matrix = t.localToWorldMatrix;
+
+ Gizmos.DrawWireCube(new Vector3(0, size, 0), new Vector3(
+ 2 / t.lossyScale.x,
+ 0.5f / t.lossyScale.y,
+ 0.5f / t.lossyScale.z
+ ) * size);
+
+ Gizmos.color = new Color(1f, 0.44f, 0.37f);
+
+ Gizmos.DrawCube(new Vector3(0, size, 0), new Vector3(
+ 2 / t.lossyScale.x * ((float) health / max),
+ 0.5f / t.lossyScale.y,
+ 0.5f / t.lossyScale.z
+ ) * size * 0.8f);
+ }
+ }
+}
diff --git a/Assets/Scripts/DamageVolumeSystem/SimpleHealth.cs.meta b/Assets/Scripts/DamageVolumeSystem/SimpleHealth.cs.meta
new file mode 100644
index 0000000..8f062e3
--- /dev/null
+++ b/Assets/Scripts/DamageVolumeSystem/SimpleHealth.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a243d9be50ad64b4f81a04072610b82c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/DamageVolumeSystem/WangSoul.DamageVolumeSystem.asmdef b/Assets/Scripts/DamageVolumeSystem/WangSoul.DamageVolumeSystem.asmdef
new file mode 100644
index 0000000..e2fa693
--- /dev/null
+++ b/Assets/Scripts/DamageVolumeSystem/WangSoul.DamageVolumeSystem.asmdef
@@ -0,0 +1,3 @@
+{
+ "name": "WangSoul.DamageVolumeSystem"
+}
diff --git a/Assets/Scripts/DamageVolumeSystem/WangSoul.DamageVolumeSystem.asmdef.meta b/Assets/Scripts/DamageVolumeSystem/WangSoul.DamageVolumeSystem.asmdef.meta
new file mode 100644
index 0000000..dd2e896
--- /dev/null
+++ b/Assets/Scripts/DamageVolumeSystem/WangSoul.DamageVolumeSystem.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 7667b6281a27b5b458c9d2f89856adcb
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/DamageVolumeSystem/伤害系统.md b/Assets/Scripts/DamageVolumeSystem/伤害系统.md
new file mode 100644
index 0000000..7769bbc
--- /dev/null
+++ b/Assets/Scripts/DamageVolumeSystem/伤害系统.md
@@ -0,0 +1,56 @@
+# 伤害系统
+
+
+
+伤害系统提供两个组件:`DamageGenerator` 和 `DamageHost`
+
+
+
+## DamageHost - 伤害宿主
+
+伤害宿主,用于接收伤害输入,通过组 ID 区分不同来源的 **伤害生成器 **
+
+
+
+## DamageGenerator - 伤害生成器
+
+伤害生成器,用于产生实际伤害,伤害值会由距离、速度产生一定的变化,但基础伤害以生成器设定为准
+
+可以启用 `emitOnCollide` 参数让生成器碰撞到 **伤害宿主** 就能立马产生伤害,也可以通过 `Emit()` 函数自己控制伤害产生的时刻
+
+
+
+## Damage - 结构体
+
+内部定义如下:
+
+```csharp
+ public struct Damage
+ {
+ // 伤害产生的组
+ public int Group;
+
+ // 伤害强度
+ public int Force;
+
+ // 伤害方向
+ public Vector3 Direction;
+ }
+```
+
+该对象 `DamageGenerator` 会向绑定在 `DamageHost` 的` onDamageReceived` 发送 `Damage`。
+
+可以用如下方式定义可绑定在 `onDamageReceived` 的方法
+
+```csharp
+public void Damage(Damage amount)
+ {
+ // 扣血
+ health -= amount.Force;
+ health = Mathf.Clamp(health, 0, max);
+
+ // 施加力
+ _rigidbody.AddForce(amount.Direction * amount.Force / 200);
+ }
+```
+
diff --git a/Assets/Scripts/DamageVolumeSystem/伤害系统.md.meta b/Assets/Scripts/DamageVolumeSystem/伤害系统.md.meta
new file mode 100644
index 0000000..fd50580
--- /dev/null
+++ b/Assets/Scripts/DamageVolumeSystem/伤害系统.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 2ab8e0cfee82c1a4a9d02e40681728b8
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant: