From 78b8e5f1541ec606875f169e95a937521c60a51e Mon Sep 17 00:00:00 2001 From: GanX <2423855310@qq.com> Date: Fri, 24 Oct 2025 16:54:15 +0800 Subject: [PATCH] =?UTF-8?q?faet(fallDamage):=20=E5=AE=9E=E7=8E=B0=E7=8E=A9?= =?UTF-8?q?=E5=AE=B6=E7=9A=84=E6=91=94=E8=90=BD=E4=BC=A4=E5=AE=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Scenes/Test.unity | 81 ++++++++++++++++++- .../Gameplay/Player/PlayerMoveController.cs | 31 +++++++ 2 files changed, 111 insertions(+), 1 deletion(-) diff --git a/Assets/Scenes/Test.unity b/Assets/Scenes/Test.unity index 1300f09..cdf60fc 100644 --- a/Assets/Scenes/Test.unity +++ b/Assets/Scenes/Test.unity @@ -402,6 +402,84 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: ddd89e93db279184daa80d86bd4e770f, type: 3} +--- !u!1001 &627238400 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 40184683368772887, guid: 85652dd0e36597644aa5b3bc9603797b, + type: 3} + propertyPath: m_LocalPosition.x + value: 25.97 + objectReference: {fileID: 0} + - target: {fileID: 40184683368772887, guid: 85652dd0e36597644aa5b3bc9603797b, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 40184683368772887, guid: 85652dd0e36597644aa5b3bc9603797b, + type: 3} + propertyPath: m_LocalPosition.z + value: -5 + objectReference: {fileID: 0} + - target: {fileID: 40184683368772887, guid: 85652dd0e36597644aa5b3bc9603797b, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 40184683368772887, guid: 85652dd0e36597644aa5b3bc9603797b, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 40184683368772887, guid: 85652dd0e36597644aa5b3bc9603797b, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 40184683368772887, guid: 85652dd0e36597644aa5b3bc9603797b, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 40184683368772887, guid: 85652dd0e36597644aa5b3bc9603797b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 40184683368772887, guid: 85652dd0e36597644aa5b3bc9603797b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 40184683368772887, guid: 85652dd0e36597644aa5b3bc9603797b, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3535959014221630543, guid: 85652dd0e36597644aa5b3bc9603797b, + type: 3} + propertyPath: sendSignalMode + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3535959014221630543, guid: 85652dd0e36597644aa5b3bc9603797b, + type: 3} + propertyPath: controlTarget.Array.data[0] + value: + objectReference: {fileID: 279470472} + - target: {fileID: 6268190613584218029, guid: 85652dd0e36597644aa5b3bc9603797b, + type: 3} + propertyPath: m_Name + value: Console (1) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 85652dd0e36597644aa5b3bc9603797b, type: 3} --- !u!1001 &865274353 PrefabInstance: m_ObjectHideFlags: 0 @@ -1369,7 +1447,7 @@ PrefabInstance: - target: {fileID: 40184683368772887, guid: 85652dd0e36597644aa5b3bc9603797b, type: 3} propertyPath: m_LocalPosition.x - value: 25 + value: 23.94 objectReference: {fileID: 0} - target: {fileID: 40184683368772887, guid: 85652dd0e36597644aa5b3bc9603797b, type: 3} @@ -2450,4 +2528,5 @@ SceneRoots: - {fileID: 1549323716} - {fileID: 2110019781} - {fileID: 730184548946979397} + - {fileID: 627238400} - {fileID: 3372472533242412945} diff --git a/Assets/Script/Gameplay/Player/PlayerMoveController.cs b/Assets/Script/Gameplay/Player/PlayerMoveController.cs index b698639..927dbaf 100644 --- a/Assets/Script/Gameplay/Player/PlayerMoveController.cs +++ b/Assets/Script/Gameplay/Player/PlayerMoveController.cs @@ -29,6 +29,11 @@ namespace Script.Gameplay.Player private Vector3 velocity; private bool isGrounded; private IInputManager inputManager; + + private float lastGroundY; + private bool wasGroundedLastFrame; + [Tooltip("从高处落下时的伤害阈值(米)")] + [SerializeField] private float fallDamageThreshold = 3f; //伤害阈值 private void Awake() { @@ -46,6 +51,32 @@ namespace Script.Gameplay.Player private void Update() { + // 地面检测 + bool isCurrentlyGrounded = groundCheck != null + ? Physics.CheckSphere(groundCheck.position, groundDistance, groundMask) + : characterController.isGrounded; + + // 记录离开地面时的高度 + if (wasGroundedLastFrame && !isCurrentlyGrounded) + { + lastGroundY = transform.position.y; + } + + // 落地检测 + if (!wasGroundedLastFrame && isCurrentlyGrounded) + { + float fallHeight = lastGroundY - transform.position.y; + if (fallHeight > fallDamageThreshold) // 3米为伤害阈值,可调整 + { + int damage = Mathf.RoundToInt((fallHeight - 3f) * 10); // 每超出1米伤害10点 + var playerController = GetComponent(); + if (playerController != null) + playerController.TakeDamage(damage); + } + } + + wasGroundedLastFrame = isCurrentlyGrounded; + // 地面检测 if (groundCheck != null) isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundMask);