From ad90d35bd741048e4eb43d7c9c50ddf8fe3da276 Mon Sep 17 00:00:00 2001 From: keshaohong <740612340@qq.com> Date: Sun, 5 Jul 2026 21:17:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=95=8C=E4=BA=BA=E7=A2=B0?= =?UTF-8?q?=E5=88=B0=E6=AD=BB=E4=BA=A1=E6=97=B6=E7=9A=84=E8=A1=A8=E7=8E=B0?= =?UTF-8?q?=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- unity/Assets/eco/SpiritLantern.cs | 5 ++ unity/Assets/enemy/EnemyLanternLight.cs | 79 ++++++++++++++++++++ unity/Assets/enemy/EnemyLanternLight.cs.meta | 11 +++ unity/Assets/enemy/Prefabs/Enemy1.prefab | 39 +++++++++- unity/Assets/enemy/Prefabs/Enemy2.prefab | 39 +++++++++- unity/Assets/enemy/Prefabs/Enemy3.prefab | 39 +++++++++- unity/Assets/enemy/Prefabs/Enemy4.prefab | 39 +++++++++- unity/Assets/enemy/Prefabs/Enemy5.prefab | 39 +++++++++- unity/UserSettings/EditorUserSettings.asset | 4 +- 9 files changed, 287 insertions(+), 7 deletions(-) create mode 100644 unity/Assets/enemy/EnemyLanternLight.cs create mode 100644 unity/Assets/enemy/EnemyLanternLight.cs.meta diff --git a/unity/Assets/eco/SpiritLantern.cs b/unity/Assets/eco/SpiritLantern.cs index 1318f48..836cf45 100644 --- a/unity/Assets/eco/SpiritLantern.cs +++ b/unity/Assets/eco/SpiritLantern.cs @@ -86,6 +86,11 @@ namespace IndianOceanAssets.Engine2_5D HealthSystem health = other.GetComponent(); if (health != null) { + // 激活怪物身上的灵灯光照(3秒亮起效果) + var lanternLight = other.GetComponent(); + if (lanternLight != null) + lanternLight.ActivateLight(); + // 在伤害前记录信息(用于掉落,因为 Die() 会 Destroy gameObject) Vector3 deathPos = other.transform.position; int enemyMaxHp = health.MaxHealth; diff --git a/unity/Assets/enemy/EnemyLanternLight.cs b/unity/Assets/enemy/EnemyLanternLight.cs new file mode 100644 index 0000000..0cbcd50 --- /dev/null +++ b/unity/Assets/enemy/EnemyLanternLight.cs @@ -0,0 +1,79 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +namespace IndianOceanAssets.Engine2_5D +{ + /// + /// 怪物灵灯光照响应 —— 挂到敌人预制体上。 + /// 当怪物被灵灯碰触时,在敌人位置创建一个独立光源,亮起 3 秒后消失。 + /// 光源独立于敌人存在,即使敌人立即死亡也能正常显示。 + /// + [RequireComponent(typeof(HealthSystem))] + public class EnemyLanternLight : MonoBehaviour + { + [Header("光照参数")] + [Tooltip("亮起持续时间(秒)")] + [SerializeField] private float lightDuration = 3f; + + [Tooltip("亮起时的光照半径")] + [SerializeField] private float lightRadius = 3f; + + [Tooltip("亮起时的光照强度")] + [SerializeField] private float lightIntensity = 0.8f; + + /// + /// 由 SpiritLantern 在碰触时调用。 + /// 在敌人当前位置创建一个独立光源,3秒后自动销毁。 + /// + public void ActivateLight() + { + // 在敌人位置创建独立光源物体 + GameObject lightObj = new GameObject("EnemyLanternGlow"); + lightObj.transform.position = transform.position; + + // 添加 LightSource 组件 + LightSource ls = lightObj.AddComponent(); + ls.SetRadius(lightRadius); + ls.SetIntensity(lightIntensity); + + // 启动自动销毁协程(挂在独立物体上,不受敌人死亡影响) + lightObj.AddComponent().Initialize(ls, lightDuration); + } + } + + /// + /// 内部辅助组件:光源亮起后渐隐并自动销毁。 + /// + internal class AutoDestroyLight : MonoBehaviour + { + private LightSource _lightSource; + private float _duration; + private float _elapsed; + + public void Initialize(LightSource ls, float duration) + { + _lightSource = ls; + _duration = duration; + _elapsed = 0f; + } + + private void Update() + { + _elapsed += Time.deltaTime; + float t = Mathf.Clamp01(_elapsed / _duration); + + if (_lightSource != null) + { + // 前 70% 保持全亮,后 30% 渐隐 + float fadeT = Mathf.Clamp01((t - 0.7f) / 0.3f); + _lightSource.SetIntensity(Mathf.Lerp(0.8f, 0f, fadeT)); + } + + if (t >= 1f) + { + Destroy(gameObject); + } + } + } +} diff --git a/unity/Assets/enemy/EnemyLanternLight.cs.meta b/unity/Assets/enemy/EnemyLanternLight.cs.meta new file mode 100644 index 0000000..8d444dd --- /dev/null +++ b/unity/Assets/enemy/EnemyLanternLight.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: D3hO5yP7UCipShm8W1Pt2Wgs5oJxdh3wKR8An3CkL8wif3zwawZE19o= +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/enemy/Prefabs/Enemy1.prefab b/unity/Assets/enemy/Prefabs/Enemy1.prefab index c459131..3cce9bc 100644 --- a/unity/Assets/enemy/Prefabs/Enemy1.prefab +++ b/unity/Assets/enemy/Prefabs/Enemy1.prefab @@ -316,6 +316,8 @@ GameObject: - component: {fileID: 350980459442417952} - component: {fileID: 1893771889199554109} - component: {fileID: -534909058101112079} + - component: {fileID: 4886022223885430410} + - component: {fileID: 8846277074571078222} m_Layer: 6 m_HasEditorInfo: 1 m_Name: Enemy1 @@ -478,7 +480,7 @@ MonoBehaviour: maxHealth: 3 deathEffect: {fileID: 0} isPlayer: 0 - dissolveMaterial: {fileID: 0} + dissolveMaterial: {fileID: 2100000, guid: a2207e01903058a4198862e6a7fb73c7, type: 2} fadeDuration: 2 --- !u!114 &1893771889199554109 MonoBehaviour: @@ -516,6 +518,41 @@ MonoBehaviour: disableOutline: 0 outlineColor: {r: 1, g: 1, b: 1, a: 1} outlineWidth: 5 +--- !u!114 &4886022223885430410 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2150025513644625521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 02ab9f3c1d1d97248b596a5863684b6c, type: 3} + m_Name: + m_EditorClassIdentifier: + lightDuration: 3 + lightRadius: 3 + lightIntensity: 0.8 +--- !u!114 &8846277074571078222 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2150025513644625521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2657273ac9b36264fb8d255879c18f77, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 2 + intensity: 0 + registerOnStart: 0 + offset: {x: 0, y: 0, z: 0} + followTarget: {fileID: 0} + enableFlicker: 0 + flickerSpeed: 5 + flickerAmount: 0.2 --- !u!1 &8348150211127470280 GameObject: m_ObjectHideFlags: 0 diff --git a/unity/Assets/enemy/Prefabs/Enemy2.prefab b/unity/Assets/enemy/Prefabs/Enemy2.prefab index d7c45c6..e58052f 100644 --- a/unity/Assets/enemy/Prefabs/Enemy2.prefab +++ b/unity/Assets/enemy/Prefabs/Enemy2.prefab @@ -228,6 +228,8 @@ GameObject: - component: {fileID: 350980459442417952} - component: {fileID: 1893771889199554109} - component: {fileID: 1378211221191342921} + - component: {fileID: -2178740973264773340} + - component: {fileID: 954861008086257599} m_Layer: 6 m_HasEditorInfo: 1 m_Name: Enemy2 @@ -390,7 +392,7 @@ MonoBehaviour: maxHealth: 3 deathEffect: {fileID: 0} isPlayer: 0 - dissolveMaterial: {fileID: 0} + dissolveMaterial: {fileID: 2100000, guid: a2207e01903058a4198862e6a7fb73c7, type: 2} fadeDuration: 2 --- !u!114 &1893771889199554109 MonoBehaviour: @@ -428,6 +430,41 @@ MonoBehaviour: disableOutline: 0 outlineColor: {r: 1, g: 1, b: 1, a: 1} outlineWidth: 5 +--- !u!114 &-2178740973264773340 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2150025513644625521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 02ab9f3c1d1d97248b596a5863684b6c, type: 3} + m_Name: + m_EditorClassIdentifier: + lightDuration: 3 + lightRadius: 3 + lightIntensity: 0.8 +--- !u!114 &954861008086257599 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2150025513644625521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2657273ac9b36264fb8d255879c18f77, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 2 + intensity: 0 + registerOnStart: 0 + offset: {x: 0, y: 0, z: 0} + followTarget: {fileID: 0} + enableFlicker: 0 + flickerSpeed: 5 + flickerAmount: 0.2 --- !u!1 &4009308812223849510 GameObject: m_ObjectHideFlags: 0 diff --git a/unity/Assets/enemy/Prefabs/Enemy3.prefab b/unity/Assets/enemy/Prefabs/Enemy3.prefab index 159aa97..beaf197 100644 --- a/unity/Assets/enemy/Prefabs/Enemy3.prefab +++ b/unity/Assets/enemy/Prefabs/Enemy3.prefab @@ -228,6 +228,8 @@ GameObject: - component: {fileID: 350980459442417952} - component: {fileID: 1893771889199554109} - component: {fileID: -5656676190252742350} + - component: {fileID: 6969882061894587196} + - component: {fileID: -1957995423241171023} m_Layer: 6 m_HasEditorInfo: 1 m_Name: Enemy3 @@ -390,7 +392,7 @@ MonoBehaviour: maxHealth: 3 deathEffect: {fileID: 0} isPlayer: 0 - dissolveMaterial: {fileID: 0} + dissolveMaterial: {fileID: 2100000, guid: a2207e01903058a4198862e6a7fb73c7, type: 2} fadeDuration: 2 --- !u!114 &1893771889199554109 MonoBehaviour: @@ -428,6 +430,41 @@ MonoBehaviour: disableOutline: 0 outlineColor: {r: 1, g: 1, b: 1, a: 1} outlineWidth: 5 +--- !u!114 &6969882061894587196 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2150025513644625521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 02ab9f3c1d1d97248b596a5863684b6c, type: 3} + m_Name: + m_EditorClassIdentifier: + lightDuration: 3 + lightRadius: 3 + lightIntensity: 0.8 +--- !u!114 &-1957995423241171023 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2150025513644625521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2657273ac9b36264fb8d255879c18f77, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 2 + intensity: 0 + registerOnStart: 0 + offset: {x: 0, y: 0, z: 0} + followTarget: {fileID: 0} + enableFlicker: 0 + flickerSpeed: 5 + flickerAmount: 0.2 --- !u!1 &3239335530067427485 GameObject: m_ObjectHideFlags: 0 diff --git a/unity/Assets/enemy/Prefabs/Enemy4.prefab b/unity/Assets/enemy/Prefabs/Enemy4.prefab index 747ede1..0fb5685 100644 --- a/unity/Assets/enemy/Prefabs/Enemy4.prefab +++ b/unity/Assets/enemy/Prefabs/Enemy4.prefab @@ -316,6 +316,8 @@ GameObject: - component: {fileID: 350980459442417952} - component: {fileID: 1893771889199554109} - component: {fileID: -2147681641094033328} + - component: {fileID: 4219260140172574508} + - component: {fileID: -3573525489034336894} m_Layer: 6 m_HasEditorInfo: 1 m_Name: Enemy4 @@ -478,7 +480,7 @@ MonoBehaviour: maxHealth: 3 deathEffect: {fileID: 0} isPlayer: 0 - dissolveMaterial: {fileID: 0} + dissolveMaterial: {fileID: 2100000, guid: a2207e01903058a4198862e6a7fb73c7, type: 2} fadeDuration: 2 --- !u!114 &1893771889199554109 MonoBehaviour: @@ -516,6 +518,41 @@ MonoBehaviour: disableOutline: 0 outlineColor: {r: 1, g: 1, b: 1, a: 1} outlineWidth: 5 +--- !u!114 &4219260140172574508 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2150025513644625521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 02ab9f3c1d1d97248b596a5863684b6c, type: 3} + m_Name: + m_EditorClassIdentifier: + lightDuration: 3 + lightRadius: 3 + lightIntensity: 0.8 +--- !u!114 &-3573525489034336894 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2150025513644625521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2657273ac9b36264fb8d255879c18f77, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 2 + intensity: 0 + registerOnStart: 0 + offset: {x: 0, y: 0, z: 0} + followTarget: {fileID: 0} + enableFlicker: 0 + flickerSpeed: 5 + flickerAmount: 0.2 --- !u!1 &8348150211127470280 GameObject: m_ObjectHideFlags: 0 diff --git a/unity/Assets/enemy/Prefabs/Enemy5.prefab b/unity/Assets/enemy/Prefabs/Enemy5.prefab index 3337be0..73e8c3f 100644 --- a/unity/Assets/enemy/Prefabs/Enemy5.prefab +++ b/unity/Assets/enemy/Prefabs/Enemy5.prefab @@ -228,6 +228,8 @@ GameObject: - component: {fileID: 350980459442417952} - component: {fileID: 1893771889199554109} - component: {fileID: 3343332957993953616} + - component: {fileID: -7192039991189473298} + - component: {fileID: -2612511509138086723} m_Layer: 6 m_HasEditorInfo: 1 m_Name: Enemy5 @@ -390,7 +392,7 @@ MonoBehaviour: maxHealth: 3 deathEffect: {fileID: 0} isPlayer: 0 - dissolveMaterial: {fileID: 0} + dissolveMaterial: {fileID: 2100000, guid: a2207e01903058a4198862e6a7fb73c7, type: 2} fadeDuration: 2 --- !u!114 &1893771889199554109 MonoBehaviour: @@ -428,6 +430,41 @@ MonoBehaviour: disableOutline: 0 outlineColor: {r: 1, g: 1, b: 1, a: 1} outlineWidth: 5 +--- !u!114 &-7192039991189473298 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2150025513644625521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 02ab9f3c1d1d97248b596a5863684b6c, type: 3} + m_Name: + m_EditorClassIdentifier: + lightDuration: 3 + lightRadius: 3 + lightIntensity: 0.8 +--- !u!114 &-2612511509138086723 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2150025513644625521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2657273ac9b36264fb8d255879c18f77, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 2 + intensity: 0 + registerOnStart: 0 + offset: {x: 0, y: 0, z: 0} + followTarget: {fileID: 0} + enableFlicker: 0 + flickerSpeed: 5 + flickerAmount: 0.2 --- !u!1 &7767081684170806371 GameObject: m_ObjectHideFlags: 0 diff --git a/unity/UserSettings/EditorUserSettings.asset b/unity/UserSettings/EditorUserSettings.asset index 3f9c886..0e02cd4 100644 --- a/unity/UserSettings/EditorUserSettings.asset +++ b/unity/UserSettings/EditorUserSettings.asset @@ -30,10 +30,10 @@ EditorUserSettings: value: 5a5757560101590a5d0c0e24427b5d44434e4c7a7b7a23677f2b4565b7b5353a flags: 0 RecentlyUsedSceneGuid-8: - value: 0209025f575750595c57092149765d444e4e49727e7c7068757b1c65b6e36c3b + value: 5a55515156575a0b0f56592346260f444f16197c7e7f24697d2a4a32b1b0353e flags: 0 RecentlyUsedSceneGuid-9: - value: 5a55515156575a0b0f56592346260f444f16197c7e7f24697d2a4a32b1b0353e + value: 0209025f575750595c57092149765d444e4e49727e7c7068757b1c65b6e36c3b flags: 0 UnityEditor.ShaderGraph.Blackboard: value: 18135939215a0a5004000b0e15254b524c030a3f2964643d120d1230e9e93a3fd6e826abbd2e2d293c4ead313b08042de6030a0afa240c0d020be94c4ba75e435d8715fa32c70d15d11612dacc11fee5d3c5d1fe9ab1bf968e93e2ffcbc3e7e2f0b3ffe0e8b0be9af8ffaeffff8e85dd8390e3949c8899daa7