refactor(scaffold): E002-E006 统一 Box HurtBox/接触伤害区 + sprite 尺寸(补全缺失的接触伤害区)
This commit is contained in:
@@ -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);
|
||||||
|
|
||||||
// HurtBox(component.enabled 初始为 false:仅悬挂脆弱窗口期间由能力开启)
|
// HurtBox + ContactDamageZone(component.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);
|
||||||
|
|||||||
Reference in New Issue
Block a user