feat(wizard): 敌人/Boss 加默认外观 Sprite 字段并透传给脚手架(碰撞体尺寸依据)
This commit is contained in:
@@ -62,6 +62,7 @@ namespace BaseGames.Editor
|
|||||||
// 小怪类型选择 — 具体敌人类型
|
// 小怪类型选择 — 具体敌人类型
|
||||||
private int _enemyTypeIndex = 0;
|
private int _enemyTypeIndex = 0;
|
||||||
private SceneObjectPlacerTool.EnemyBodyColliderType _enemyBodyCollider = SceneObjectPlacerTool.EnemyBodyColliderType.Box;
|
private SceneObjectPlacerTool.EnemyBodyColliderType _enemyBodyCollider = SceneObjectPlacerTool.EnemyBodyColliderType.Box;
|
||||||
|
private Sprite _defaultSprite; // 敌人/Boss 默认外观 Sprite:碰撞体尺寸依据(可留空)
|
||||||
private static readonly (string id, string name)[] EnemyTypes =
|
private static readonly (string id, string name)[] EnemyTypes =
|
||||||
{
|
{
|
||||||
("E001", "草蛭"),
|
("E001", "草蛭"),
|
||||||
@@ -298,9 +299,14 @@ namespace BaseGames.Editor
|
|||||||
colliderField.RegisterValueChangedCallback(evt => _enemyBodyCollider = (SceneObjectPlacerTool.EnemyBodyColliderType)evt.newValue);
|
colliderField.RegisterValueChangedCallback(evt => _enemyBodyCollider = (SceneObjectPlacerTool.EnemyBodyColliderType)evt.newValue);
|
||||||
container.Add(colliderField);
|
container.Add(colliderField);
|
||||||
|
|
||||||
|
var spriteField = new UnityEditor.UIElements.ObjectField("默认外观 Sprite(碰撞体尺寸依据,可留空)")
|
||||||
|
{ objectType = typeof(Sprite), allowSceneObjects = false, value = _defaultSprite };
|
||||||
|
spriteField.RegisterValueChangedCallback(evt => _defaultSprite = evt.newValue as Sprite);
|
||||||
|
container.Add(spriteField);
|
||||||
|
|
||||||
var sceneGroup = MakeActionGroup();
|
var sceneGroup = MakeActionGroup();
|
||||||
string sceneLabel = $"放置 {id} {name} 到场景";
|
string sceneLabel = $"放置 {id} {name} 到场景";
|
||||||
sceneGroup.Add(MakeSceneButton(sceneLabel, () => PlaceSpecificEnemy(id, _enemyBodyCollider)));
|
sceneGroup.Add(MakeSceneButton(sceneLabel, () => PlaceSpecificEnemy(id, _enemyBodyCollider, _defaultSprite)));
|
||||||
sceneGroup.Add(MakeSceneButton("迁移选中对象 Visual 节点", MigrateSelectedEnemyVisualNode));
|
sceneGroup.Add(MakeSceneButton("迁移选中对象 Visual 节点", MigrateSelectedEnemyVisualNode));
|
||||||
container.Add(sceneGroup);
|
container.Add(sceneGroup);
|
||||||
}
|
}
|
||||||
@@ -340,8 +346,14 @@ namespace BaseGames.Editor
|
|||||||
root.Add(MakeSectionHeader("▶ 场景搭建"));
|
root.Add(MakeSectionHeader("▶ 场景搭建"));
|
||||||
root.Add(MakeHelpBox("放置嘲风完整组件树(ChaoFengBoss + 浮空控制器 + 击倒计数 + Phase1 HitBox × 4 + 炮口 × 3)。"));
|
root.Add(MakeHelpBox("放置嘲风完整组件树(ChaoFengBoss + 浮空控制器 + 击倒计数 + Phase1 HitBox × 4 + 炮口 × 3)。"));
|
||||||
|
|
||||||
|
var bossSpriteField = new UnityEditor.UIElements.ObjectField("默认外观 Sprite(碰撞体尺寸依据,可留空)")
|
||||||
|
{ objectType = typeof(Sprite), allowSceneObjects = false, value = _defaultSprite };
|
||||||
|
bossSpriteField.RegisterValueChangedCallback(evt => _defaultSprite = evt.newValue as Sprite);
|
||||||
|
root.Add(bossSpriteField);
|
||||||
|
|
||||||
var sceneGroup = MakeActionGroup();
|
var sceneGroup = MakeActionGroup();
|
||||||
sceneGroup.Add(MakeSceneButton("放置嘲风到场景并绑定 SO", SceneObjectPlacerTool.PlaceChaoFeng));
|
sceneGroup.Add(MakeSceneButton("放置嘲风到场景并绑定 SO",
|
||||||
|
() => SceneObjectPlacerTool.PlaceChaoFeng(SceneObjectPlacerTool.EnemyBodyColliderType.Box, _defaultSprite)));
|
||||||
sceneGroup.Add(MakeSceneButton("迁移选中对象 Visual 节点", MigrateSelectedEnemyVisualNode));
|
sceneGroup.Add(MakeSceneButton("迁移选中对象 Visual 节点", MigrateSelectedEnemyVisualNode));
|
||||||
root.Add(sceneGroup);
|
root.Add(sceneGroup);
|
||||||
|
|
||||||
@@ -617,19 +629,19 @@ namespace BaseGames.Editor
|
|||||||
$"全部 {id} SO 已创建(已存在的跳过)。\n请放置到场景后检查组件绑定。", "确定");
|
$"全部 {id} SO 已创建(已存在的跳过)。\n请放置到场景后检查组件绑定。", "确定");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void PlaceSpecificEnemy(string id, SceneObjectPlacerTool.EnemyBodyColliderType bodyCollider)
|
private static void PlaceSpecificEnemy(string id, SceneObjectPlacerTool.EnemyBodyColliderType bodyCollider, Sprite defaultSprite)
|
||||||
{
|
{
|
||||||
switch (id)
|
switch (id)
|
||||||
{
|
{
|
||||||
case "E001": SceneObjectPlacerTool.PlaceE001_CaoZhi(bodyCollider); break;
|
case "E001": SceneObjectPlacerTool.PlaceE001_CaoZhi(bodyCollider, defaultSprite); break;
|
||||||
case "E002": SceneObjectPlacerTool.PlaceE002_HuangZhi(bodyCollider); break;
|
case "E002": SceneObjectPlacerTool.PlaceE002_HuangZhi(bodyCollider, defaultSprite); break;
|
||||||
case "E003": SceneObjectPlacerTool.PlaceE003_YouZhi_Enemy(bodyCollider); break;
|
case "E003": SceneObjectPlacerTool.PlaceE003_YouZhi_Enemy(bodyCollider, defaultSprite); break;
|
||||||
case "E004": SceneObjectPlacerTool.PlaceE004_ZhiMu_Enemy(bodyCollider); break;
|
case "E004": SceneObjectPlacerTool.PlaceE004_ZhiMu_Enemy(bodyCollider, defaultSprite); break;
|
||||||
case "E005": SceneObjectPlacerTool.PlaceE005_FeiZhi_Enemy(bodyCollider); break;
|
case "E005": SceneObjectPlacerTool.PlaceE005_FeiZhi_Enemy(bodyCollider, defaultSprite); break;
|
||||||
case "E006": SceneObjectPlacerTool.PlaceE006_Huan(bodyCollider); break;
|
case "E006": SceneObjectPlacerTool.PlaceE006_Huan(bodyCollider, defaultSprite); break;
|
||||||
default:
|
default:
|
||||||
Debug.LogError($"[CharacterWizardWindow] 未注册的敌人 id '{id}',请在 SceneObjectPlacerTool 中实现对应 PlaceE...() 方法并注册。");
|
Debug.LogError($"[CharacterWizardWindow] 未注册的敌人 id '{id}',请在 SceneObjectPlacerTool 中实现对应 PlaceE...() 方法并注册。");
|
||||||
SceneObjectPlacerTool.PlaceEnemy(bodyCollider);
|
SceneObjectPlacerTool.PlaceEnemy(bodyCollider, defaultSprite);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user