diff --git a/Assets/Script/Character/Projectile/Skill/Skill_BlackHole.cs b/Assets/Script/Character/Projectile/Skill/Skill_BlackHole.cs index b3b3caee4..6174d6a28 100644 --- a/Assets/Script/Character/Projectile/Skill/Skill_BlackHole.cs +++ b/Assets/Script/Character/Projectile/Skill/Skill_BlackHole.cs @@ -35,6 +35,7 @@ public class Skill_BlackHole : ProjectileBase m_DagmaeGap -= Get_AwakenData(3, 2); } + if (WL.Combat.Weapon.WLBlackHole.Take(this, range, m_LifeTime, m_DagmaeGap, StunTime)) return; // WL #978 훅(1줄) — 빨려 들어감 · 다단 · 폭파 강한 피해 1회(WLBlackHole.json) StartCoroutine(Co_BlackHole(StunTime)); } diff --git a/Assets/WL/Combat/Reaction/Resources/WL/WLSkillHitFeel.json b/Assets/WL/Combat/Reaction/Resources/WL/WLSkillHitFeel.json index d94fe94dc..795c83997 100644 --- a/Assets/WL/Combat/Reaction/Resources/WL/WLSkillHitFeel.json +++ b/Assets/WL/Combat/Reaction/Resources/WL/WLSkillHitFeel.json @@ -10,6 +10,7 @@ "staggerSeconds": 0.4 }, { "skill": "Skill_EnergySlash", "pushScale": 1.0, "pushMeters": 0.35, "knockbackScale": 0.0, "staggerSeconds": 0.5, "_note_975": "#975 PD 「한손검 주력 스킬의 검기에 명중 시 경직을 추가하고, 밀리는 거리도 0.15m 늘려줘」 — 밀기 0.2 → 0.35 m · 경직 0 (= 일반 몹 기본 0.25 s · WLHitFeelSettings mobStaggerSeconds) → 0.5 s(PM 값 · 피격 자세 굳힘 + 이동 · 공격 잠금 · 관통 다단 0.2 s 마다 다시 걸림)", "_note_974": "#974 PD 「한손검 주력 검기 — 0.2m 정도 넉백」 — 원본 넉백(AttackKnockBack) 끔 · 피격 밀기(MobStagger · PC → 적 방향) 0.2 m 고정 · 관통 다단(WLPierceProjectile 0.2 s)마다 밀림" }, + { "skill": "Skill_BlackHole", "pushScale": 0.0, "knockbackScale": 0.0, "staggerSeconds": 0.15, "_note_978": "#978 블랙홀 빨려 들어감 — 맞을 때마다 피격 밀기(PC 반대쪽 0.3 m)가 끌어당김(3 m/s)보다 세서 더미가 바깥으로 밀림(Play 실측 끌어당김 누적 2.14 m 에도 +X 로 0.8 m) → 밀기 · 넉백 끔 · 경직 0.15 s" }, { "skill": "Skill_ArrowRain", "pushScale": 0.05, diff --git a/Assets/WL/Combat/Weapon/Resources/WL/Fx/WL_NockArrow.prefab b/Assets/WL/Combat/Weapon/Resources/WL/Fx/WL_NockArrow.prefab index 3b5fe36fb..d726e9403 100644 --- a/Assets/WL/Combat/Weapon/Resources/WL/Fx/WL_NockArrow.prefab +++ b/Assets/WL/Combat/Weapon/Resources/WL/Fx/WL_NockArrow.prefab @@ -1,5 +1,37 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &1265659647065410780 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7561437168075404599} + m_Layer: 0 + m_Name: Arrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7561437168075404599 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1265659647065410780} + serializedVersion: 2 + m_LocalRotation: {x: 0.7071068, y: 0, 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: 318284294933426198} + m_Father: {fileID: 3384687383004869994} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2286313539756212851 GameObject: m_ObjectHideFlags: 0 @@ -29,10 +61,10 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 8083545554685379984} + - {fileID: 7561437168075404599} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &4089787332761738456 +--- !u!1 &6890858917390786345 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -40,46 +72,46 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 8083545554685379984} - - component: {fileID: 3926352655812325371} - - component: {fileID: 1485827680575776289} + - component: {fileID: 318284294933426198} + - component: {fileID: 1665685135880975955} + - component: {fileID: 2144548526970463019} m_Layer: 0 - m_Name: PP_Theme_10_Arrow_003 + m_Name: default m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &8083545554685379984 +--- !u!4 &318284294933426198 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4089787332761738456} + m_GameObject: {fileID: 6890858917390786345} serializedVersion: 2 - m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 2, y: 2, z: 2} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 3384687383004869994} + m_Father: {fileID: 7561437168075404599} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &3926352655812325371 +--- !u!33 &1665685135880975955 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4089787332761738456} - m_Mesh: {fileID: 8511194730541559256, guid: 5d798ba6e93b7a540acce3c4f1f61184, type: 3} ---- !u!23 &1485827680575776289 + m_GameObject: {fileID: 6890858917390786345} + m_Mesh: {fileID: 4300000, guid: 72c6fc7515b706e428efc3f4b09cdd41, type: 3} +--- !u!23 &2144548526970463019 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4089787332761738456} + m_GameObject: {fileID: 6890858917390786345} m_Enabled: 1 m_CastShadows: 0 m_ReceiveShadows: 1 @@ -98,7 +130,7 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: 1ed5c689ba8eacc4c8e9d3b8ba968880, type: 2} + - {fileID: 2100000, guid: 7878d691a75f3824ea21373040595c51, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 diff --git a/Assets/WL/Combat/Weapon/Resources/WL/WLBlackHole.json b/Assets/WL/Combat/Weapon/Resources/WL/WLBlackHole.json new file mode 100644 index 000000000..5c6e75b93 --- /dev/null +++ b/Assets/WL/Combat/Weapon/Resources/WL/WLBlackHole.json @@ -0,0 +1,11 @@ +{ + "enabled": 1, + "pullSpeed": 3.0, + "pullMinDist": 0.4, + "explodeDelay": 0.5, + "explodeDamageMul": 5.0, + "explodeFx": "WL/Impact/WL_Impact_Explosion", + "explodeFxScale": 0.5, + "explodeFxLife": 2.0, + "note": "#978 PD 「오브 각성 스킬이 발동되면, 해당 위치로 몬스터들이 블랙홀과 같이 빨려들어가며 다단 히트 피해를 받고, 폭파할 때 강력한 피해 1회가 발동되면 좋겠어.」 — 원본 Skill_BlackHole(수명 · 범위 · 간격 · 각성 단계 · 기절 = 원본 계산값) 넘겨받음 · 빨려 들어감 3 m/s(중심 0.4 m 까지) · 다단 = 원본 간격마다 원본 피해 · 폭파 = 0.5 s 뒤 피해 배율 5 배 1회 + 폭발 WL_Impact_Explosion 0.5 배(PM 값 = 끌어당김 속도 · 폭파 배율 · 이펙트)" +} diff --git a/Assets/WL/Combat/Weapon/Resources/WL/WLBlackHole.json.meta b/Assets/WL/Combat/Weapon/Resources/WL/WLBlackHole.json.meta new file mode 100644 index 000000000..5cbc490da --- /dev/null +++ b/Assets/WL/Combat/Weapon/Resources/WL/WLBlackHole.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9cef356d3df432849a4f8db7f3a83bfd +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/WL/Combat/Weapon/Resources/WL/WLNockArrow.json b/Assets/WL/Combat/Weapon/Resources/WL/WLNockArrow.json index 6a9c44501..24b46b081 100644 --- a/Assets/WL/Combat/Weapon/Resources/WL/WLNockArrow.json +++ b/Assets/WL/Combat/Weapon/Resources/WL/WLNockArrow.json @@ -10,5 +10,6 @@ { "state": "Bow_Attack3", "from": 0.20, "to": 0.92 }, { "state": "Bow_Skill4_Push", "from": 0.16, "to": 0.48 } ], + "note_978": "#978 PD 「활의 공격 시 넣어달라고 요청한 화살이 화살처럼 보이지 않고 마치 실같아. 좀 더 화살처럼 생긴 오브젝트를 찾아봐」 — 화살 모델 = ResWork Elven Weapons Elven_Arrow_02(강철 촉 · 붉은 깃 · 폭/길이 0.137 = 이전 기본 화살 메시 0.047 의 약 3 배 · 978_nockarrow2.cs 로 WL_NockArrow 덮어씀 · 원본 무수정) · 길이 0.55 m 그대로", "note": "#977 PD 「활 시위를 당길 때 화살 오브젝트가 보이게 해줘.(보유중인 리소스 중 화살을 찾아볼 것)」 — 화살 = 기본 화살 투사체 Projectile_10402 의 PP_Theme_10_Arrow_003 메시 사본(WL_NockArrow) · 꼬리 = 오른손 · 촉 = 왼손(활) 쪽 · 길이 0.55 m(PM 값) · 보이는 구간 = 상태별 정규화(시위를 잡은 뒤 ~ 놓는 순간): 1 · 2타 BowShot 0.20~0.56(#967 놓는 순간 0.56) · 3타 FR_Bow3 0.20~0.92(Projectile 0.92) · 4타 Bow_Skill4_Push 0.16~0.48(Projectile 0.48 · 두 손 거리 편집 모드 실측) · 주력 · 멀티샷 모으기도 같은 attack 상태(0.30~0.56)라 함께" } diff --git a/Assets/WL/Combat/Weapon/Resources/WL/WLShurikenRider.json b/Assets/WL/Combat/Weapon/Resources/WL/WLShurikenRider.json index bfd168562..d22bc59c6 100644 --- a/Assets/WL/Combat/Weapon/Resources/WL/WLShurikenRider.json +++ b/Assets/WL/Combat/Weapon/Resources/WL/WLShurikenRider.json @@ -6,8 +6,10 @@ "prefab": "WL/Fx/WL_Fx_DaggerShuriken", "every": 8, "maxRiders": 12, - "riderScale": 0.3, + "riderScale": 0.6, "rimFraction": 1.0, "maxSeconds": 2.5, + "hidePath": 1, + "note_978": "#978 PD 「비수 기본 스킬에 요청한 이펙트가 전혀 보이지 않아. (내가 요청한 이펙트를 확인할 수 있도록 궤적 처럼 보이는 이펙트를 잠시 숨겨줘)」 — 경로 호(Multiple Slashes) 그리기만 끔(hidePath 1 · 입자는 돌아 수리검이 따라감 · 되살리기 = 0) · 수리검 0.3 → 0.6 배(PM 값)", "note": "#977 PD 「비수의 기본 스킬 시전 시 Master Stylized Projectile 에셋의 첨부 된 스크린샷과 같은 수리검을 경로 이펙트에 다수 보이게 연출해줘. (이때 이펙트 궤적의 색상을 기본 공격처럼 녹색 계열로 바꾸고, 투명도를 조금 부여해서 자연스럽게 구성해줘)」 — 수리검 = MasterStylizedFX Projectiles/GreenProjectile 사본(녹색 초승달 소용돌이 + 흰 별 = 스크린샷 · 진행 방향으로 돌림 · 처음 만든 ShurikensHit 층 사본은 녹색 베기 띠가 사각으로 보여 바꿈) · 경로 = 무자비한 일격 Multiple Slashes 호(시작색 (0.17,1.00,0.23) 투명도 0.75 · 기본 공격 녹색) · 호 입자 8개 중 1개에 수리검(최대 12) · 호 가장자리에 붙어 호와 함께 돈다 · 크기 0.3(PM 값)" } diff --git a/Assets/WL/Combat/Weapon/WLBlackHole.cs b/Assets/WL/Combat/Weapon/WLBlackHole.cs new file mode 100644 index 000000000..5cb9473a5 --- /dev/null +++ b/Assets/WL/Combat/Weapon/WLBlackHole.cs @@ -0,0 +1,115 @@ +// ───────────────────────────────────────────────────────────────────────────── +// WLBlackHole.cs — 맹약(오브) 각성 「블랙홀」(Skill_BlackHole): 범위 안 몬스터가 중심으로 빨려 들어가며 다단 피해 → 폭파 때 강한 피해 1회 (#978 · 2026-10-24) +// +// PD 원문: 「오브 각성 스킬이 발동되면, 해당 위치로 몬스터들이 블랙홀과 같이 빨려들어가며 다단 히트 피해를 받고, 폭파할 때 강력한 피해 1회가 발동되면 좋겠어.」 +// ■ 원본(Skill_BlackHole.Co_BlackHole): 수명 동안 간격마다 범위 안 적 Attract + 피해 → 0.5 초 뒤 같은 피해 1회(+ 각성 2단계 기절) +// ■ WL — 원본 Set 끝 훅 1줄(Take)이 넘겨받는다: 매 프레임 범위 안 적을 중심 쪽으로 pullSpeed(m/s)로 끌어당김(pullMinDist 까지 · 길찾기 에이전트면 Move) · +// 원본 간격마다 원본 투사체 피해(ProcessCollider = 피격 반응 · 이펙트 그대로) · 수명 + explodeDelay 뒤 폭파 = 피해 배율 explodeDamageMul 로 1회 + 폭발 이펙트 + 원본 기절 +// ■ 값 = Resources/WL/WLBlackHole.json (C45) · enabled 0 = 원본 그대로 +// 🔴 Debug.LogError 금지(원본 팝업). +// ───────────────────────────────────────────────────────────────────────────── +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace WL.Combat.Weapon +{ + [System.Serializable] + public class WLBlackHoleJson + { + public int enabled = 0; + public float pullSpeed = 3f, pullMinDist = 0.4f; + public float explodeDelay = 0.5f, explodeDamageMul = 5f; + public string explodeFx = "WL/Impact/WL_Impact_Explosion"; + public float explodeFxScale = 0.5f, explodeFxLife = 2f; + public string note = ""; + } + + public static class WLBlackHole + { + public const string ResourcesPath = "WL/WLBlackHole"; + public static int Taken, Ticks, TickHits, ExplodeHits; public static float MaxPulled; public static string LastLog = ""; + static WLBlackHoleJson s_cfg; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] static void Reset() { s_cfg = null; } + + internal static WLBlackHoleJson Cfg + { + get + { + if (s_cfg != null) return s_cfg; + s_cfg = new WLBlackHoleJson(); + var ta = Resources.Load(ResourcesPath); + if (ta == null) { LastLog = "설정 없음 " + ResourcesPath; return s_cfg; } + try { JsonUtility.FromJsonOverwrite(ta.text, s_cfg); } catch (System.Exception ex) { LastLog = "설정 파싱 실패 — " + ex.Message; } + return s_cfg; + } + } + + /// 원본 Skill_BlackHole.Set 훅 — true 면 WL 이 진행(원본 Co_BlackHole 건너뜀). 값은 원본이 각성 단계까지 계산한 것. + public static bool Take(ProjectileBase pb, float range, float life, float gap, float stun) + { + try + { + var c = Cfg; if (c.enabled == 0 || pb == null) return false; + var pd = pb.Get_ProjectTileData(); if (pd == null || DSUtil.CheckNull(pd.shooter)) return false; + var run = pb.GetComponent(); if (run == null) run = pb.gameObject.AddComponent(); + run.Begin(pb, pd, range, life, Mathf.Max(0.05f, gap), stun, c); Taken++; + return true; + } + catch (System.Exception ex) { LastLog = "넘겨받기 실패 — " + ex.Message; return false; } + } + } + + internal sealed class WLBlackHoleRunner : MonoBehaviour + { + public void Begin(ProjectileBase pb, ProjectileData pd, float range, float life, float gap, float stun, WLBlackHoleJson c) + { + StopAllCoroutines(); StartCoroutine(Run(pb, pd, range, life, gap, stun, c)); + } + + static List Enemies(ProjectileData pd, Vector3 center, float range) + { + var res = new List(); var info = ActorInfo.Ins; if (info == null || DSUtil.CheckNull(pd.shooter)) return res; + var list = info.Get_EnemyActors(pd.shooter.IsEnemy(), center, range + 3f); if (list == null) return res; + try { for (int k = 0; k < list.Count; k++) { var a = list[k]; if (a == null || a.IsDead()) continue; var v = a.Get_position() - center; v.y = 0f; if (v.magnitude <= range + WL.Combat.WLCombatMotionSettings.BodyRadius(a)) res.Add(a); } } + finally { info.Release_Actors(list); } + return res; + } + + static int HitAll(ProjectileBase pb, List list) + { + int n = 0; foreach (var a in list) { if (a == null || a.IsDead()) continue; var col = a.GetComponent(); if (col != null && col.enabled && pb.ProcessCollider(col, false)) n++; } + return n; + } + + IEnumerator Run(ProjectileBase pb, ProjectileData pd, float range, float life, float gap, float stun, WLBlackHoleJson c) + { + Vector3 center = pb.transform.position; float t0 = Time.time, nextTick = 0f, pulled = 0f; + while (Time.time - t0 < life) + { + float t = Time.time - t0, step = c.pullSpeed * Time.deltaTime; + foreach (var a in Enemies(pd, center, range)) // 빨려 들어감 — 중심 쪽 수평 이동(pullMinDist 까지) + { + var v = center - a.Get_position(); v.y = 0f; float d = v.magnitude - c.pullMinDist; if (d <= 0f) continue; + var delta = v.normalized * Mathf.Min(step, d); + var ag = a.GetComponent(); + if (ag != null && ag.enabled && ag.isOnNavMesh) ag.Move(delta); else a.transform.position += delta; + pulled += delta.magnitude; + } + if (t >= nextTick) { nextTick += gap; WLBlackHole.Ticks++; WLBlackHole.TickHits += HitAll(pb, Enemies(pd, center, range)); } + yield return null; + } + if (c.explodeDelay > 0f) yield return new WaitForSeconds(c.explodeDelay); + // 폭파 — 피해 배율을 잠시 올려 1회 · 기절 · 폭발 이펙트 + var targets = Enemies(pd, center, range); float mul0 = pd.AddDmgPercent; + pd.AddDmgPercent = mul0 * Mathf.Max(1f, c.explodeDamageMul); + try { WLBlackHole.ExplodeHits += HitAll(pb, targets); } finally { pd.AddDmgPercent = mul0; } + if (stun > 0f) foreach (var a in targets) if (a != null && !a.IsDead()) a.Stun(stun, true); + var fx = !string.IsNullOrEmpty(c.explodeFx) ? Resources.Load(c.explodeFx) : null; + if (fx != null) { var g = Instantiate(fx, center, Quaternion.identity); g.transform.localScale = fx.transform.localScale * c.explodeFxScale; foreach (var ps in g.GetComponentsInChildren(true)) { var m = ps.main; m.scalingMode = ParticleSystemScalingMode.Hierarchy; } Destroy(g, Mathf.Max(0.5f, c.explodeFxLife)); } + WLBlackHole.MaxPulled = Mathf.Max(WLBlackHole.MaxPulled, pulled); + WLBlackHole.LastLog = "범위 " + range.ToString("F1") + " m · 수명 " + life.ToString("F1") + " s · 간격 " + gap.ToString("F2") + " · 다단 누적 " + WLBlackHole.TickHits + " · 폭파 명중 " + WLBlackHole.ExplodeHits + " × 배율 " + c.explodeDamageMul + (fx == null ? " · 폭발 이펙트 없음 " + c.explodeFx : ""); + WLStaffEarth.OffOriginal(pb); + } + } +} diff --git a/Assets/WL/Combat/Weapon/WLBlackHole.cs.meta b/Assets/WL/Combat/Weapon/WLBlackHole.cs.meta new file mode 100644 index 000000000..054f07b1c --- /dev/null +++ b/Assets/WL/Combat/Weapon/WLBlackHole.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 5dddf54ba9bd9b14daf1b51510d97f75 \ No newline at end of file diff --git a/Assets/WL/Combat/Weapon/WLShurikenRider.cs b/Assets/WL/Combat/Weapon/WLShurikenRider.cs index 15c2e94e9..a23024130 100644 --- a/Assets/WL/Combat/Weapon/WLShurikenRider.cs +++ b/Assets/WL/Combat/Weapon/WLShurikenRider.cs @@ -27,6 +27,7 @@ namespace WL.Combat.Weapon public float riderScale = 0.12f; public float rimFraction = 1f; // 호 반지름 대비 자리(1 = 가장자리) public float maxSeconds = 2.5f; + public int hidePath = 0; // #978 1 = 경로 층 그리기만 끔(입자는 그대로 돌아 수리검이 따라감 · 끝나면 되살림) — PD 「요청한 이펙트를 확인할 수 있도록 궤적처럼 보이는 이펙트를 잠시 숨겨줘」 public string note = ""; } @@ -79,6 +80,7 @@ namespace WL.Combat.Weapon { _ps = ps; _c = c; _t0 = Time.time; _on = true; _bySeed.Clear(); var r = ps.GetComponent(); var m = r != null ? r.mesh : null; + _pathRenderer = c.hidePath != 0 && r != null && r.enabled ? r : null; if (_pathRenderer != null) _pathRenderer.enabled = false; _rim = m != null ? Mathf.Max(m.bounds.extents.x, m.bounds.extents.y) : 0.5f; // 호 메시 반지름(입자 크기 1 기준) var p = Resources.Load(c.prefab); while (p != null && _riders.Count < c.maxRiders) { var g = Instantiate(p); g.SetActive(false); g.transform.localScale = Vector3.one * c.riderScale; _riders.Add(g); } @@ -111,7 +113,8 @@ namespace WL.Combat.Weapon int FreeSlot() { for (int i = 0; i < _riders.Count; i++) if (!_bySeed.ContainsValue(i)) return i; return -1; } - void Stop() { _on = false; _bySeed.Clear(); foreach (var g in _riders) if (g != null) g.SetActive(false); WLShurikenRider.LastLog = "끝 · 최대 동시 " + WLShurikenRider.MaxShown; } + ParticleSystemRenderer _pathRenderer; + void Stop() { _on = false; _bySeed.Clear(); if (_pathRenderer != null) { _pathRenderer.enabled = true; _pathRenderer = null; } foreach (var g in _riders) if (g != null) g.SetActive(false); WLShurikenRider.LastLog = "끝 · 최대 동시 " + WLShurikenRider.MaxShown; } void OnDisable() { Stop(); } void OnDestroy() { foreach (var g in _riders) if (g != null) Destroy(g); } }