61 lines
2.6 KiB
C#
61 lines
2.6 KiB
C#
using UnityEngine;
|
||
|
||
namespace EerieVillage.Skills.Effectors
|
||
{
|
||
/// <summary>
|
||
/// PD 지시 2026-05-13 — 모든 액티브 스킬 판정 영역 시각화 공용 helper.
|
||
/// 붉은 반투명 박스 (1×1 white sprite·color 1,0,0,0.35) 를 size 만큼 scale.
|
||
/// </summary>
|
||
public static class HitboxDebug
|
||
{
|
||
/// <summary>지정 world 좌표·size 박스 spawn·lifetime 후 destroy. lifetime=0 영역 영구.</summary>
|
||
public static GameObject Spawn(Vector2 pos, Vector2 size, float lifetime)
|
||
{
|
||
var go = new GameObject("Hitbox_Debug");
|
||
// PD 지시 2026-05-13 — 런타임 spawn 박스 Scene 저장 회피 (Edit Mode execute 시 잔존 방지)
|
||
go.hideFlags = HideFlags.DontSave;
|
||
go.transform.position = (Vector3)pos;
|
||
go.transform.localScale = new Vector3(size.x, size.y, 1f);
|
||
AttachSprite(go);
|
||
if (lifetime > 0f) Object.Destroy(go, lifetime);
|
||
return go;
|
||
}
|
||
|
||
/// <summary>지정 Transform 의 자식으로 박스 attach (target 이동 시 함께 이동·scale 은 size 그대로 유지).</summary>
|
||
public static GameObject AttachToTransform(Transform target, Vector2 size)
|
||
{
|
||
var go = new GameObject("Hitbox_Debug");
|
||
go.hideFlags = HideFlags.DontSave;
|
||
go.transform.SetParent(target, false);
|
||
go.transform.localPosition = Vector3.zero;
|
||
// parent lossyScale 보정 — local scale 환산
|
||
float px = target.lossyScale.x != 0f ? Mathf.Abs(target.lossyScale.x) : 1f;
|
||
float py = target.lossyScale.y != 0f ? Mathf.Abs(target.lossyScale.y) : 1f;
|
||
go.transform.localScale = new Vector3(size.x / px, size.y / py, 1f);
|
||
AttachSprite(go);
|
||
return go;
|
||
}
|
||
|
||
static void AttachSprite(GameObject go)
|
||
{
|
||
var sr = go.AddComponent<SpriteRenderer>();
|
||
sr.sprite = GetWhiteSprite();
|
||
sr.color = new Color(1f, 0f, 0f, 0.35f);
|
||
sr.sortingOrder = 100;
|
||
}
|
||
|
||
static Sprite _whiteSprite;
|
||
public static Sprite GetWhiteSprite()
|
||
{
|
||
if (_whiteSprite != null) return _whiteSprite;
|
||
var tex = new Texture2D(2, 2, TextureFormat.RGBA32, false);
|
||
var pixels = new Color[4];
|
||
for (int i = 0; i < 4; i++) pixels[i] = Color.white;
|
||
tex.SetPixels(pixels);
|
||
tex.Apply();
|
||
_whiteSprite = Sprite.Create(tex, new Rect(0, 0, 2, 2), new Vector2(0.5f, 0.5f), 2);
|
||
return _whiteSprite;
|
||
}
|
||
}
|
||
}
|