WL #979-② 비수 기본 스킬 수리검 = PD 지정 「Master Stylized Projectile」(PD 임포트 Assets/MasterStylizedProjectiles) Shurikens/ShurikenBullet 사본 WL_Fx_DaggerShurikenMSP(검은 풍차형 수리검 · 흰 테두리 · 꼬리 메시 · 흰 반짝임 · AutoRotate 회전 · 재질 빈칸 루트 입자 끔) · 크기 0.25 배 · 공중 부양 = WLShurikenRider minHeight 신설(시전자 발 위 최소 0.6 m) — 실측 동시 최대 11 · 높이 0.60~3.09 m · 콘솔 오류 0 (사본은 팩 메시 · 재질을 참조 — 팩 자체는 PD 반입분이라 이 커밋에 없음)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
620d26339c
commit
98cf746a11
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 265175f70e3c7a94cb36116505276967
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -1,15 +1,21 @@
|
|||
{
|
||||
"enabled": 1,
|
||||
"skills": [ "Skill_BrutalSlash" ],
|
||||
"classes": [ 10202 ],
|
||||
"skills": [
|
||||
"Skill_BrutalSlash"
|
||||
],
|
||||
"classes": [
|
||||
10202
|
||||
],
|
||||
"layer": "Multiple Slashes",
|
||||
"prefab": "WL/Fx/WL_Fx_DaggerShuriken",
|
||||
"prefab": "WL/Fx/WL_Fx_DaggerShurikenMSP",
|
||||
"every": 8,
|
||||
"maxRiders": 12,
|
||||
"riderScale": 0.6,
|
||||
"riderScale": 0.25,
|
||||
"rimFraction": 1.0,
|
||||
"maxSeconds": 2.5,
|
||||
"hidePath": 1,
|
||||
"minHeight": 0.6,
|
||||
"note_979": "#979 PD 「비수 이펙트는 내가 요청한 이펙트가 아닌 것으로 확인되었어. \"Master Stylized Projectile\" 에셋의 수리검 형태의 이펙트를 요청했는데 엉뚱한 이펙트로 보여. 다시 수정하고, 지면에 남는 검은색 흔적은 보이지 않게 해줘 (공중을 부양하는 수리검 컨셉이야)」 + 「Master Stylized Projectile 에셋 방금 받아서 임포트 해두었어. 내가 지시한 수리검을 다시 체크해봐」 — 수리검 = Assets/MasterStylizedProjectiles/Projectiles/Shurikens/Prefabs/ShurikenBullet 사본 WL_Fx_DaggerShurikenMSP(검은 풍차형 수리검 · 흰 테두리 · 꼬리 메시 · 흰 반짝임 · AutoRotate 회전 · 재질 빈칸 루트 입자 끔 · 979_fx.cs Copy) · 크기 0.25 배(PM 값) · 공중 부양 = 시전자 발 위 최소 0.6 m(minHeight · PM 값) · 지면 흔적 = Skill_BrutalSlash 의 Crater · Slash Cracks · Flying 렌더러 끔(프리팹 덮어쓰기)",
|
||||
"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 값)"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
//
|
||||
// PD 원문: 「비수의 "기본 스킬" 시전 시 Master Stylized Projectile 에셋의 첨부 된 스크린샷과 같은 수리검을 경로 이펙트에 다수 보이게 연출해줘.
|
||||
// (이때 이펙트 궤적의 색상을 기본 공격처럼 녹색 계열로 바꾸고, 투명도를 조금 부여해서 자연스럽게 구성해줘)」
|
||||
// ■ 수리검 = Resources/WL/Fx/WL_Fx_DaggerShuriken(MasterStylizedFX ShurikensHit 사본 · 녹색 소용돌이 ShurikenSlash + 흰 별 CoreWhite 만 · 반복 · 회전)
|
||||
// ■ 수리검 = JSON prefab(#979 = Resources/WL/Fx/WL_Fx_DaggerShurikenMSP = PD 지정 「Master Stylized Projectile」 Shurikens/ShurikenBullet 사본 · 검은 풍차형 수리검 · AutoRotate 회전 · 흰 반짝임)
|
||||
// ■ 원본 Skill_BrutalSlash.Co_Update 가 베기 이펙트를 켜는 줄 다음 훅 1줄(Begin) → 그 투사체의 경로 층(layer) 입자 중 every 번째(randomSeed)마다
|
||||
// 수리검 1개를 붙여 매 LateUpdate 호의 가장자리(입자 위치 + 3D 회전 × 오른쪽 × 메시 반지름 × 크기 × rimFraction)로 — 호가 돌면 수리검이 호를 따라 돈다 · 입자가 사라지면 숨김
|
||||
// ■ 값 = Resources/WL/WLShurikenRider.json (C45) · 끄기 = enabled 0
|
||||
|
|
@ -28,6 +28,7 @@ namespace WL.Combat.Weapon
|
|||
public float rimFraction = 1f; // 호 반지름 대비 자리(1 = 가장자리)
|
||||
public float maxSeconds = 2.5f;
|
||||
public int hidePath = 0; // #978 1 = 경로 층 그리기만 끔(입자는 그대로 돌아 수리검이 따라감 · 끝나면 되살림) — PD 「요청한 이펙트를 확인할 수 있도록 궤적처럼 보이는 이펙트를 잠시 숨겨줘」
|
||||
public float minHeight = 0f; // #979 시전자 발 높이 위 최소 높이(m) — PD 「공중을 부양하는 수리검 컨셉」(호가 땅 가까이 돌아도 수리검은 이 높이 위로)
|
||||
public string note = "";
|
||||
}
|
||||
|
||||
|
|
@ -35,8 +36,9 @@ namespace WL.Combat.Weapon
|
|||
{
|
||||
public const string ResourcesPath = "WL/WLShurikenRider";
|
||||
public static int Begun, MaxShown; public static string LastLog = "";
|
||||
public static float MinY = float.MaxValue, MaxY = float.MinValue; // #979 측정용 — 수리검 높이(시전자 발 기준) 최소 · 최대
|
||||
static WLShurikenRiderJson s_cfg;
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] static void Reset() { s_cfg = null; }
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] static void Reset() { s_cfg = null; MinY = float.MaxValue; MaxY = float.MinValue; }
|
||||
|
||||
internal static WLShurikenRiderJson Cfg
|
||||
{
|
||||
|
|
@ -64,7 +66,7 @@ namespace WL.Combat.Weapon
|
|||
foreach (var ps in pb.GetComponentsInChildren<ParticleSystem>(true)) if (ps.name == c.layer) { path = ps; break; }
|
||||
if (path == null) { LastLog = "경로 층 없음 " + c.layer; return; }
|
||||
var run = pb.GetComponent<WLShurikenRiderRunner>(); if (run == null) run = pb.gameObject.AddComponent<WLShurikenRiderRunner>();
|
||||
run.Begin(path, c); Begun++;
|
||||
run.Begin(path, c, pd != null && !DSUtil.CheckNull(pd.shooter) ? pd.shooter.Get_position().y : pb.transform.position.y); Begun++;
|
||||
}
|
||||
catch (System.Exception ex) { LastLog = "실패 — " + ex.Message; }
|
||||
}
|
||||
|
|
@ -74,11 +76,11 @@ namespace WL.Combat.Weapon
|
|||
{
|
||||
ParticleSystem _ps; WLShurikenRiderJson _c; ParticleSystem.Particle[] _buf = new ParticleSystem.Particle[256];
|
||||
readonly List<GameObject> _riders = new List<GameObject>(); readonly Dictionary<uint, int> _bySeed = new Dictionary<uint, int>();
|
||||
float _t0, _rim = 0.5f; bool _on;
|
||||
float _t0, _rim = 0.5f, _ground; bool _on;
|
||||
|
||||
public void Begin(ParticleSystem ps, WLShurikenRiderJson c)
|
||||
public void Begin(ParticleSystem ps, WLShurikenRiderJson c, float ground)
|
||||
{
|
||||
_ps = ps; _c = c; _t0 = Time.time; _on = true; _bySeed.Clear();
|
||||
_ps = ps; _c = c; _t0 = Time.time; _on = true; _bySeed.Clear(); _ground = ground;
|
||||
var r = ps.GetComponent<ParticleSystemRenderer>(); 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 기준)
|
||||
|
|
@ -100,6 +102,8 @@ namespace WL.Combat.Weapon
|
|||
var g = _riders[idx]; bool fresh = !g.activeSelf; if (fresh) g.SetActive(true);
|
||||
var size = p.GetCurrentSize3D(_ps);
|
||||
var pos = p.position + Quaternion.Euler(p.rotation3D) * (Vector3.right * _rim * size.x * _c.rimFraction);
|
||||
if (_c.minHeight > 0f) pos.y = Mathf.Max(pos.y, _ground + _c.minHeight); // 공중 부양
|
||||
WLShurikenRider.MinY = Mathf.Min(WLShurikenRider.MinY, pos.y - _ground); WLShurikenRider.MaxY = Mathf.Max(WLShurikenRider.MaxY, pos.y - _ground);
|
||||
var mv = pos - g.transform.position; // 투사체 이펙트라 진행 방향(앞 = +Z)으로 돌린다 — 꼬리가 지나온 쪽
|
||||
if (!fresh && mv.sqrMagnitude > 1e-6f) g.transform.rotation = Quaternion.LookRotation(mv);
|
||||
g.transform.position = pos;
|
||||
|
|
|
|||
Loading…
Reference in New Issue