refactor(scaffold): E002-E006 统一 Box HurtBox/接触伤害区 + sprite 尺寸(补全缺失的接触伤害区)

This commit is contained in:
2026-07-20 16:24:03 +08:00
parent 8efd5e2207
commit 4fcbc73d44
@@ -532,9 +532,9 @@ namespace BaseGames.Editor
} }
[MenuItem("BaseGames/Scene/Place/Enemy E002 (簧蛭)", priority = 112)] [MenuItem("BaseGames/Scene/Place/Enemy E002 (簧蛭)", priority = 112)]
public static void PlaceE002_HuangZhi() => PlaceE002_HuangZhi(EnemyBodyColliderType.Box); public static void PlaceE002_HuangZhi() => PlaceE002_HuangZhi(EnemyBodyColliderType.Box, null);
public static void PlaceE002_HuangZhi(EnemyBodyColliderType bodyCollider) public static void PlaceE002_HuangZhi(EnemyBodyColliderType bodyCollider, Sprite defaultSprite = null)
{ {
var report = new List<string>(); var report = new List<string>();
int undoGroup = Undo.GetCurrentGroup(); int undoGroup = Undo.GetCurrentGroup();
@@ -549,7 +549,8 @@ namespace BaseGames.Editor
rb.bodyType = RigidbodyType2D.Kinematic; rb.bodyType = RigidbodyType2D.Kinematic;
rb.gravityScale = 0f; rb.gravityScale = 0f;
Collider2D body = CreateBodyCollider(go, bodyCollider, new Vector2(0.5f, 0.7f)); Vector2 size = SpriteSizeOr(defaultSprite, new Vector2(0.5f, 0.7f));
Collider2D body = CreateBodyCollider(go, bodyCollider, size);
// Visual 子节点:挂载精灵 / 动画(EnemyMovement 翻转时操作此节点) // Visual 子节点:挂载精灵 / 动画(EnemyMovement 翻转时操作此节点)
Transform visual = GetOrCreateChild(go.transform, "Visual"); Transform visual = GetOrCreateChild(go.transform, "Visual");
@@ -557,6 +558,7 @@ namespace BaseGames.Editor
GetOrAddComponent<Animator>(visual.gameObject); GetOrAddComponent<Animator>(visual.gameObject);
AnimancerComponent animancer = GetOrAddComponent<AnimancerComponent>(visual.gameObject); AnimancerComponent animancer = GetOrAddComponent<AnimancerComponent>(visual.gameObject);
SpriteRenderer sr = SetupSpriteRenderer(visual.gameObject); SpriteRenderer sr = SetupSpriteRenderer(visual.gameObject);
if (defaultSprite != null) sr.sprite = defaultSprite;
EnemyBase enemyBase = GetOrAddComponent<EnemyBase>(go); EnemyBase enemyBase = GetOrAddComponent<EnemyBase>(go);
EnemyStats enemyStats = GetOrAddComponent<EnemyStats>(go); EnemyStats enemyStats = GetOrAddComponent<EnemyStats>(go);
@@ -566,13 +568,9 @@ namespace BaseGames.Editor
GetOrAddComponent<TransformBasedMovement>(go); // required by EnemyNavAgent [RequireComponent] GetOrAddComponent<TransformBasedMovement>(go); // required by EnemyNavAgent [RequireComponent]
PhysicsPerceptionSystem sensorHub = GetOrAddComponent<PhysicsPerceptionSystem>(go); PhysicsPerceptionSystem sensorHub = GetOrAddComponent<PhysicsPerceptionSystem>(go);
// HurtBoxcomponent.enabled 初始为 false:仅悬挂脆弱窗口期间由能力开启) // HurtBox + ContactDamageZonecomponent.enabled 初始为 false:仅悬挂脆弱窗口期间由能力开启)
Transform hurtBoxT = GetOrCreateChild(go.transform, "HurtBox"); var (hurtBox, bodyContact, contactHitBox) =
SetLayer(hurtBoxT.gameObject, "EnemyHurtBox", report); SetupHurtAndContactBoxes(go, size, contactEnabled: true, report);
CapsuleCollider2D hurtCap = GetOrAddComponent<CapsuleCollider2D>(hurtBoxT.gameObject);
hurtCap.isTrigger = true;
hurtCap.size = new Vector2(0.45f, 0.65f);
HurtBox hurtBox = GetOrAddComponent<HurtBox>(hurtBoxT.gameObject);
hurtBox.enabled = false; // 悬挂阶段外不可被攻击;CeilingHangStrikeAbility 在 _loopClip 期间开启 hurtBox.enabled = false; // 悬挂阶段外不可被攻击;CeilingHangStrikeAbility 在 _loopClip 期间开启
// AttackHitBox(钻出啃咬瞬间判定,由 CeilingHangStrikeAbility 激活) // AttackHitBox(钻出啃咬瞬间判定,由 CeilingHangStrikeAbility 激活)
@@ -617,7 +615,10 @@ namespace BaseGames.Editor
Object dmgSrc = FindFirstAsset("CMB_DS_EnemyBody"); Object dmgSrc = FindFirstAsset("CMB_DS_EnemyBody");
if (dmgSrc != null) if (dmgSrc != null)
{
AssignReference(attackHitBox, "_defaultSource", dmgSrc, report); AssignReference(attackHitBox, "_defaultSource", dmgSrc, report);
AssignReference(contactHitBox, "_defaultSource", dmgSrc, report);
}
SetupPerceptionSystemSlots(sensorHub, new[] { "attack_range" }, report); SetupPerceptionSystemSlots(sensorHub, new[] { "attack_range" }, report);
report.Add("★ 将此对象放置于天花板,调整位置使 CapsuleCollider 正好贴合天花板底面。"); report.Add("★ 将此对象放置于天花板,调整位置使 CapsuleCollider 正好贴合天花板底面。");
@@ -633,9 +634,9 @@ namespace BaseGames.Editor
} }
[MenuItem("BaseGames/Scene/Place/Enemy E003 (幼蛭)", priority = 113)] [MenuItem("BaseGames/Scene/Place/Enemy E003 (幼蛭)", priority = 113)]
public static void PlaceE003_YouZhi_Enemy() => PlaceE003_YouZhi_Enemy(EnemyBodyColliderType.Box); public static void PlaceE003_YouZhi_Enemy() => PlaceE003_YouZhi_Enemy(EnemyBodyColliderType.Box, null);
public static void PlaceE003_YouZhi_Enemy(EnemyBodyColliderType bodyCollider) public static void PlaceE003_YouZhi_Enemy(EnemyBodyColliderType bodyCollider, Sprite defaultSprite = null)
{ {
var report = new List<string>(); var report = new List<string>();
int undoGroup = Undo.GetCurrentGroup(); int undoGroup = Undo.GetCurrentGroup();
@@ -650,12 +651,14 @@ namespace BaseGames.Editor
rb.bodyType = RigidbodyType2D.Kinematic; rb.bodyType = RigidbodyType2D.Kinematic;
rb.gravityScale = 0f; rb.gravityScale = 0f;
Collider2D body = CreateBodyCollider(go, bodyCollider, new Vector2(0.5f, 0.6f)); Vector2 size = SpriteSizeOr(defaultSprite, new Vector2(0.5f, 0.6f));
Collider2D body = CreateBodyCollider(go, bodyCollider, size);
Transform visual = GetOrCreateChild(go.transform, "Visual"); Transform visual = GetOrCreateChild(go.transform, "Visual");
visual.localPosition = (Vector3)(Vector2)body.offset; visual.localPosition = (Vector3)(Vector2)body.offset;
GetOrAddComponent<Animator>(visual.gameObject); GetOrAddComponent<Animator>(visual.gameObject);
AnimancerComponent animancer = GetOrAddComponent<AnimancerComponent>(visual.gameObject); AnimancerComponent animancer = GetOrAddComponent<AnimancerComponent>(visual.gameObject);
SpriteRenderer sr3 = SetupSpriteRenderer(visual.gameObject); SpriteRenderer sr3 = SetupSpriteRenderer(visual.gameObject);
if (defaultSprite != null) sr3.sprite = defaultSprite;
EnemyBase enemyBase = GetOrAddComponent<EnemyBase>(go); EnemyBase enemyBase = GetOrAddComponent<EnemyBase>(go);
EnemyStats enemyStats = GetOrAddComponent<EnemyStats>(go); EnemyStats enemyStats = GetOrAddComponent<EnemyStats>(go);
@@ -666,20 +669,8 @@ namespace BaseGames.Editor
GetOrAddComponent<TransformBasedMovement>(go); // required by EnemyNavAgent [RequireComponent] GetOrAddComponent<TransformBasedMovement>(go); // required by EnemyNavAgent [RequireComponent]
PhysicsPerceptionSystem sensorHub = GetOrAddComponent<PhysicsPerceptionSystem>(go); PhysicsPerceptionSystem sensorHub = GetOrAddComponent<PhysicsPerceptionSystem>(go);
Transform hurtBoxT = GetOrCreateChild(go.transform, "HurtBox"); var (hurtBox, bodyContact, contactHitBox) =
SetLayer(hurtBoxT.gameObject, "EnemyHurtBox", report); SetupHurtAndContactBoxes(go, size, contactEnabled: true, report);
CapsuleCollider2D hurtCap = GetOrAddComponent<CapsuleCollider2D>(hurtBoxT.gameObject);
hurtCap.isTrigger = true;
hurtCap.size = new Vector2(0.45f, 0.55f);
HurtBox hurtBox = GetOrAddComponent<HurtBox>(hurtBoxT.gameObject);
Transform contactT = GetOrCreateChild(go.transform, "ContactDamageZone");
SetLayer(contactT.gameObject, "EnemyHitBox", report);
CircleCollider2D contactCol = GetOrAddComponent<CircleCollider2D>(contactT.gameObject);
contactCol.isTrigger = true;
contactCol.radius = 0.35f;
HitBox contactHitBox = GetOrAddComponent<HitBox>(contactT.gameObject);
BodyContactDamage bodyContact = GetOrAddComponent<BodyContactDamage>(contactT.gameObject);
Transform abilitiesT = GetOrCreateChild(go.transform, "Abilities"); Transform abilitiesT = GetOrCreateChild(go.transform, "Abilities");
Transform fallT = GetOrCreateChild(abilitiesT, "AnimatedCeilingDropAbility"); Transform fallT = GetOrCreateChild(abilitiesT, "AnimatedCeilingDropAbility");
@@ -731,9 +722,9 @@ namespace BaseGames.Editor
} }
[MenuItem("BaseGames/Scene/Place/Enemy E004 (蛭母)", priority = 114)] [MenuItem("BaseGames/Scene/Place/Enemy E004 (蛭母)", priority = 114)]
public static void PlaceE004_ZhiMu_Enemy() => PlaceE004_ZhiMu_Enemy(EnemyBodyColliderType.Box); public static void PlaceE004_ZhiMu_Enemy() => PlaceE004_ZhiMu_Enemy(EnemyBodyColliderType.Box, null);
public static void PlaceE004_ZhiMu_Enemy(EnemyBodyColliderType bodyCollider) public static void PlaceE004_ZhiMu_Enemy(EnemyBodyColliderType bodyCollider, Sprite defaultSprite = null)
{ {
var report = new List<string>(); var report = new List<string>();
int undoGroup = Undo.GetCurrentGroup(); int undoGroup = Undo.GetCurrentGroup();
@@ -750,12 +741,14 @@ namespace BaseGames.Editor
rb.constraints = RigidbodyConstraints2D.FreezeRotation; rb.constraints = RigidbodyConstraints2D.FreezeRotation;
rb.collisionDetectionMode = CollisionDetectionMode2D.Continuous; rb.collisionDetectionMode = CollisionDetectionMode2D.Continuous;
Collider2D body = CreateBodyCollider(go, bodyCollider, new Vector2(0.8f, 1.2f)); Vector2 size = SpriteSizeOr(defaultSprite, new Vector2(0.8f, 1.2f));
Collider2D body = CreateBodyCollider(go, bodyCollider, size);
Transform visual = GetOrCreateChild(go.transform, "Visual"); Transform visual = GetOrCreateChild(go.transform, "Visual");
visual.localPosition = (Vector3)(Vector2)body.offset; visual.localPosition = (Vector3)(Vector2)body.offset;
GetOrAddComponent<Animator>(visual.gameObject); GetOrAddComponent<Animator>(visual.gameObject);
AnimancerComponent animancer = GetOrAddComponent<AnimancerComponent>(visual.gameObject); AnimancerComponent animancer = GetOrAddComponent<AnimancerComponent>(visual.gameObject);
SpriteRenderer sr4 = SetupSpriteRenderer(visual.gameObject); SpriteRenderer sr4 = SetupSpriteRenderer(visual.gameObject);
if (defaultSprite != null) sr4.sprite = defaultSprite;
EnemyBase enemyBase = GetOrAddComponent<EnemyBase>(go); EnemyBase enemyBase = GetOrAddComponent<EnemyBase>(go);
EnemyStats enemyStats = GetOrAddComponent<EnemyStats>(go); EnemyStats enemyStats = GetOrAddComponent<EnemyStats>(go);
@@ -766,12 +759,8 @@ namespace BaseGames.Editor
GetOrAddComponent<TransformBasedMovement>(go); // required by EnemyNavAgent [RequireComponent] GetOrAddComponent<TransformBasedMovement>(go); // required by EnemyNavAgent [RequireComponent]
PhysicsPerceptionSystem sensorHub = GetOrAddComponent<PhysicsPerceptionSystem>(go); PhysicsPerceptionSystem sensorHub = GetOrAddComponent<PhysicsPerceptionSystem>(go);
Transform hurtBoxT = GetOrCreateChild(go.transform, "HurtBox"); var (hurtBox, bodyContact, contactHitBox) =
SetLayer(hurtBoxT.gameObject, "EnemyHurtBox", report); SetupHurtAndContactBoxes(go, size, contactEnabled: true, report);
CapsuleCollider2D hurtCap = GetOrAddComponent<CapsuleCollider2D>(hurtBoxT.gameObject);
hurtCap.isTrigger = true;
hurtCap.size = new Vector2(0.75f, 1.1f);
HurtBox hurtBox = GetOrAddComponent<HurtBox>(hurtBoxT.gameObject);
Transform biteT = GetOrCreateChild(go.transform, "BiteHitBox"); Transform biteT = GetOrCreateChild(go.transform, "BiteHitBox");
SetLayer(biteT.gameObject, "EnemyHitBox", report); SetLayer(biteT.gameObject, "EnemyHitBox", report);
@@ -844,6 +833,7 @@ namespace BaseGames.Editor
{ {
AssignReference(biteHitBox, "_defaultSource", dmgSrc, report); AssignReference(biteHitBox, "_defaultSource", dmgSrc, report);
AssignReference(slamHitBox, "_defaultSource", dmgSrc, report); AssignReference(slamHitBox, "_defaultSource", dmgSrc, report);
AssignReference(contactHitBox, "_defaultSource", dmgSrc, report);
} }
// 死亡前摇无敌演出(零代码:替代过去的 E004_ZhiMu 专属 Die() 重写) // 死亡前摇无敌演出(零代码:替代过去的 E004_ZhiMu 专属 Die() 重写)
@@ -862,9 +852,9 @@ namespace BaseGames.Editor
} }
[MenuItem("BaseGames/Scene/Place/Enemy E005 (肥蛭)", priority = 115)] [MenuItem("BaseGames/Scene/Place/Enemy E005 (肥蛭)", priority = 115)]
public static void PlaceE005_FeiZhi_Enemy() => PlaceE005_FeiZhi_Enemy(EnemyBodyColliderType.Box); public static void PlaceE005_FeiZhi_Enemy() => PlaceE005_FeiZhi_Enemy(EnemyBodyColliderType.Box, null);
public static void PlaceE005_FeiZhi_Enemy(EnemyBodyColliderType bodyCollider) public static void PlaceE005_FeiZhi_Enemy(EnemyBodyColliderType bodyCollider, Sprite defaultSprite = null)
{ {
var report = new List<string>(); var report = new List<string>();
int undoGroup = Undo.GetCurrentGroup(); int undoGroup = Undo.GetCurrentGroup();
@@ -881,12 +871,14 @@ namespace BaseGames.Editor
rb.constraints = RigidbodyConstraints2D.FreezeRotation; rb.constraints = RigidbodyConstraints2D.FreezeRotation;
rb.collisionDetectionMode = CollisionDetectionMode2D.Continuous; rb.collisionDetectionMode = CollisionDetectionMode2D.Continuous;
Collider2D body = CreateBodyCollider(go, bodyCollider, new Vector2(0.9f, 1.0f)); Vector2 size = SpriteSizeOr(defaultSprite, new Vector2(0.9f, 1.0f));
Collider2D body = CreateBodyCollider(go, bodyCollider, size);
Transform visual = GetOrCreateChild(go.transform, "Visual"); Transform visual = GetOrCreateChild(go.transform, "Visual");
visual.localPosition = (Vector3)(Vector2)body.offset; visual.localPosition = (Vector3)(Vector2)body.offset;
GetOrAddComponent<Animator>(visual.gameObject); GetOrAddComponent<Animator>(visual.gameObject);
AnimancerComponent animancer = GetOrAddComponent<AnimancerComponent>(visual.gameObject); AnimancerComponent animancer = GetOrAddComponent<AnimancerComponent>(visual.gameObject);
SpriteRenderer sr5 = SetupSpriteRenderer(visual.gameObject); SpriteRenderer sr5 = SetupSpriteRenderer(visual.gameObject);
if (defaultSprite != null) sr5.sprite = defaultSprite;
EnemyBase enemyBase = GetOrAddComponent<EnemyBase>(go); EnemyBase enemyBase = GetOrAddComponent<EnemyBase>(go);
EnemyStats enemyStats = GetOrAddComponent<EnemyStats>(go); EnemyStats enemyStats = GetOrAddComponent<EnemyStats>(go);
@@ -896,12 +888,8 @@ namespace BaseGames.Editor
GetOrAddComponent<TransformBasedMovement>(go); // required by EnemyNavAgent [RequireComponent] GetOrAddComponent<TransformBasedMovement>(go); // required by EnemyNavAgent [RequireComponent]
PhysicsPerceptionSystem sensorHub = GetOrAddComponent<PhysicsPerceptionSystem>(go); PhysicsPerceptionSystem sensorHub = GetOrAddComponent<PhysicsPerceptionSystem>(go);
Transform hurtBoxT = GetOrCreateChild(go.transform, "HurtBox"); var (hurtBox, bodyContact, contactHitBox) =
SetLayer(hurtBoxT.gameObject, "EnemyHurtBox", report); SetupHurtAndContactBoxes(go, size, contactEnabled: true, report);
CapsuleCollider2D hurtCap = GetOrAddComponent<CapsuleCollider2D>(hurtBoxT.gameObject);
hurtCap.isTrigger = true;
hurtCap.size = new Vector2(0.85f, 0.95f);
HurtBox hurtBox = GetOrAddComponent<HurtBox>(hurtBoxT.gameObject);
Transform biteT = GetOrCreateChild(go.transform, "BiteHitBox"); Transform biteT = GetOrCreateChild(go.transform, "BiteHitBox");
SetLayer(biteT.gameObject, "EnemyHitBox", report); SetLayer(biteT.gameObject, "EnemyHitBox", report);
@@ -950,7 +938,11 @@ namespace BaseGames.Editor
AssignReference(acidAbl, "_muzzle", acidMuzzleT, report); AssignReference(acidAbl, "_muzzle", acidMuzzleT, report);
Object dmgSrc = FindFirstAsset("CMB_DS_EnemyBody"); Object dmgSrc = FindFirstAsset("CMB_DS_EnemyBody");
if (dmgSrc != null) AssignReference(biteHitBox, "_defaultSource", dmgSrc, report); if (dmgSrc != null)
{
AssignReference(biteHitBox, "_defaultSource", dmgSrc, report);
AssignReference(contactHitBox, "_defaultSource", dmgSrc, report);
}
// 死亡前摇无敌演出 + 动画事件池生成幼蛭(零代码:替代过去的 E005_FeiZhi 专属 Die()/SpawnProjectile 重写) // 死亡前摇无敌演出 + 动画事件池生成幼蛭(零代码:替代过去的 E005_FeiZhi 专属 Die()/SpawnProjectile 重写)
EnemyDeathSequence deathSeq = GetOrAddComponent<EnemyDeathSequence>(go); EnemyDeathSequence deathSeq = GetOrAddComponent<EnemyDeathSequence>(go);
@@ -970,9 +962,9 @@ namespace BaseGames.Editor
} }
[MenuItem("BaseGames/Scene/Place/Enemy E006 (讙)", priority = 116)] [MenuItem("BaseGames/Scene/Place/Enemy E006 (讙)", priority = 116)]
public static void PlaceE006_Huan() => PlaceE006_Huan(EnemyBodyColliderType.Box); public static void PlaceE006_Huan() => PlaceE006_Huan(EnemyBodyColliderType.Box, null);
public static void PlaceE006_Huan(EnemyBodyColliderType bodyCollider) public static void PlaceE006_Huan(EnemyBodyColliderType bodyCollider, Sprite defaultSprite = null)
{ {
var report = new List<string>(); var report = new List<string>();
int undoGroup = Undo.GetCurrentGroup(); int undoGroup = Undo.GetCurrentGroup();
@@ -989,12 +981,14 @@ namespace BaseGames.Editor
rb.constraints = RigidbodyConstraints2D.FreezeRotation; rb.constraints = RigidbodyConstraints2D.FreezeRotation;
rb.collisionDetectionMode = CollisionDetectionMode2D.Continuous; rb.collisionDetectionMode = CollisionDetectionMode2D.Continuous;
Collider2D body = CreateBodyCollider(go, bodyCollider, new Vector2(0.7f, 1.0f)); Vector2 size = SpriteSizeOr(defaultSprite, new Vector2(0.7f, 1.0f));
Collider2D body = CreateBodyCollider(go, bodyCollider, size);
Transform visual = GetOrCreateChild(go.transform, "Visual"); Transform visual = GetOrCreateChild(go.transform, "Visual");
visual.localPosition = (Vector3)(Vector2)body.offset; visual.localPosition = (Vector3)(Vector2)body.offset;
GetOrAddComponent<Animator>(visual.gameObject); GetOrAddComponent<Animator>(visual.gameObject);
AnimancerComponent animancer = GetOrAddComponent<AnimancerComponent>(visual.gameObject); AnimancerComponent animancer = GetOrAddComponent<AnimancerComponent>(visual.gameObject);
SpriteRenderer sr6 = SetupSpriteRenderer(visual.gameObject); SpriteRenderer sr6 = SetupSpriteRenderer(visual.gameObject);
if (defaultSprite != null) sr6.sprite = defaultSprite;
EnemyBase enemyBase = GetOrAddComponent<EnemyBase>(go); EnemyBase enemyBase = GetOrAddComponent<EnemyBase>(go);
EnemyStats enemyStats = GetOrAddComponent<EnemyStats>(go); EnemyStats enemyStats = GetOrAddComponent<EnemyStats>(go);
@@ -1005,20 +999,8 @@ namespace BaseGames.Editor
GetOrAddComponent<TransformBasedMovement>(go); // required by EnemyNavAgent [RequireComponent] GetOrAddComponent<TransformBasedMovement>(go); // required by EnemyNavAgent [RequireComponent]
PhysicsPerceptionSystem sensorHub = GetOrAddComponent<PhysicsPerceptionSystem>(go); PhysicsPerceptionSystem sensorHub = GetOrAddComponent<PhysicsPerceptionSystem>(go);
Transform hurtBoxT = GetOrCreateChild(go.transform, "HurtBox"); var (hurtBox, bodyContact, contactHitBox) =
SetLayer(hurtBoxT.gameObject, "EnemyHurtBox", report); SetupHurtAndContactBoxes(go, size, contactEnabled: true, report);
CapsuleCollider2D hurtCap = GetOrAddComponent<CapsuleCollider2D>(hurtBoxT.gameObject);
hurtCap.isTrigger = true;
hurtCap.size = new Vector2(0.65f, 0.95f);
HurtBox hurtBox = GetOrAddComponent<HurtBox>(hurtBoxT.gameObject);
Transform contactT = GetOrCreateChild(go.transform, "ContactDamageZone");
SetLayer(contactT.gameObject, "EnemyHitBox", report);
CircleCollider2D contactCol = GetOrAddComponent<CircleCollider2D>(contactT.gameObject);
contactCol.isTrigger = true;
contactCol.radius = 0.4f;
HitBox contactHitBox = GetOrAddComponent<HitBox>(contactT.gameObject);
BodyContactDamage bodyContact = GetOrAddComponent<BodyContactDamage>(contactT.gameObject);
Transform landT = GetOrCreateChild(go.transform, "LandingHitBox"); Transform landT = GetOrCreateChild(go.transform, "LandingHitBox");
SetLayer(landT.gameObject, "EnemyHitBox", report); SetLayer(landT.gameObject, "EnemyHitBox", report);