Refactor interaction prompt system to use world space prompts
- Removed the InteractPromptWidget from HUD and its references in HUDController. - Introduced IInteractPromptView interface for world space interaction prompts. - Implemented WorldInteractPrompt class to manage display of interaction prompts in world space. - Updated InteractableDetector to handle showing/hiding of world space prompts based on player proximity to interactable objects. - Created a new prefab for UI_WorldInteractPrompt to facilitate the new interaction prompt system.
This commit is contained in:
@@ -87,21 +87,8 @@ namespace BaseGames.Editor.UI
|
||||
le.preferredHeight = 40f;
|
||||
}
|
||||
|
||||
// ── 交互提示(InteractPrompt)─────────────────────────────────────
|
||||
GameObject interactPromptGo = GetOrCreateChild(hudRootGo.transform, "InteractPrompt").gameObject;
|
||||
InteractPromptWidget interactWidget = GetOrAddComponent<InteractPromptWidget>(interactPromptGo);
|
||||
|
||||
GameObject promptRootGo = GetOrCreateChild(interactPromptGo.transform, "Root").gameObject;
|
||||
GameObject promptKeyIconGo = GetOrCreateChild(promptRootGo.transform, "KeyIcon").gameObject;
|
||||
Image keyIcon = GetOrAddComponent<Image>(promptKeyIconGo);
|
||||
GameObject promptLabelGo = GetOrCreateChild(promptRootGo.transform, "LabelText").gameObject;
|
||||
TMP_Text promptLabel = GetOrAddComponent<TextMeshProUGUI>(promptLabelGo);
|
||||
promptLabel.text = "互动";
|
||||
promptRootGo.SetActive(false);
|
||||
|
||||
AssignRef(interactWidget, "_keyIcon", keyIcon);
|
||||
AssignRef(interactWidget, "_labelText", promptLabel);
|
||||
AssignRef(interactWidget, "_root", promptRootGo);
|
||||
// 交互提示已改为「每个交互物自带的世界空间提示」(WorldInteractPrompt),
|
||||
// 不再放在屏幕固定 HUD 上。由交互物脚手架在各自预制体/场景物体上创建。
|
||||
|
||||
// ── 法术槽(SpellSlot)───────────────────────────────────────────
|
||||
GameObject spellSlotGo = GetOrCreateChild(hudRootGo.transform, "SpellSlot").gameObject;
|
||||
@@ -209,7 +196,6 @@ namespace BaseGames.Editor.UI
|
||||
AssignRef(hudCtrl, "_spiritGaugeFill", spiritFill);
|
||||
AssignRef(hudCtrl, "_lingZhuText", lingZhuText);
|
||||
AssignRef(hudCtrl, "_springContainer", springContainerGo.transform);
|
||||
AssignRef(hudCtrl, "_interactPromptWidget", interactWidget);
|
||||
AssignArrayRefs(hudCtrl, "_formIcons", formImages, report);
|
||||
|
||||
// ── HP 格子 / 回春图标 Prefab(自动创建并绑定,无需手工补)──────────
|
||||
@@ -229,9 +215,6 @@ namespace BaseGames.Editor.UI
|
||||
AssignAsset(hudCtrl, "_onSpringChargesChanged", report, false, "EVT_SpringChargesChanged", "EVT_SpringCharges");
|
||||
AssignAsset(hudCtrl, "_onFormChanged", report, false, "EVT_FormChanged");
|
||||
|
||||
AssignAsset(interactWidget, "_onShowPrompt", report, false, "EVT_ShowInteractPrompt", "EVT_InteractPromptShow");
|
||||
AssignAsset(interactWidget, "_onHidePrompt", report, false, "EVT_HideInteractPrompt", "EVT_InteractPromptHide");
|
||||
|
||||
AssignAsset(bossHPBar, "_onBossFightToggled", report, false, "EVT_BossFightToggled", "EVT_BossFightStarted");
|
||||
AssignAsset(bossHPBar, "_onBossHPChanged", report, false, "EVT_BossHPChanged");
|
||||
AssignAsset(bossHPBar, "_onBossHPMaxSet", report, false, "EVT_BossHPMaxSet");
|
||||
@@ -266,8 +249,6 @@ namespace BaseGames.Editor.UI
|
||||
// 右下角:法术槽 + 工具栏
|
||||
SetRect(spellSlotGo.transform, BottomRight, BottomRight, new Vector2(-40f, 40f), new Vector2(90f, 90f));
|
||||
SetRect(toolHUDGo.transform, BottomRight, BottomRight, new Vector2(-150f, 40f), new Vector2(180f, 90f));
|
||||
// 底部居中:交互提示
|
||||
SetRect(interactPromptGo.transform, BottomCenter, BottomCenter, new Vector2(0f, 140f), new Vector2(320f, 64f));
|
||||
|
||||
// ── 手工步骤说明 ──────────────────────────────────────────────────
|
||||
// _hpCellPrefab / _springIconPrefab 已自动创建并绑定(占位红/青方块,美术可替换)。
|
||||
|
||||
Reference in New Issue
Block a user