Files
zeling_v2/Assets/_Game/Scripts/Enemies/AI/BD_BossPhaseTransition.cs
Joywayer a1b4e629aa feat: Implement Room Streaming System
- Add RoomStreamingManager to manage room loading and unloading based on player proximity.
- Create StreamingBudgetConfigSO for memory and performance budgeting of the streaming system.
- Introduce TransitionDirector to handle seamless and atmospheric fade transitions between rooms.
- Develop WorldGraph to represent room connectivity and facilitate neighbor queries and distance calculations.
- Implement RoomNode and RoomEdge classes to structure room data and connections.
2026-05-23 19:10:29 +08:00

55 lines
1.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#if GRAPH_DESIGNER
using UnityEngine;
using Opsive.BehaviorDesigner.Runtime.Tasks;
using Opsive.BehaviorDesigner.Runtime.Tasks.Actions;
using BaseGames.Enemies;
namespace BaseGames.Enemies.AI
{
/// <summary>
/// BD Action启动 Boss 阶段过渡演出(无敌帧 + 可选定格),等待过渡完成后返回 Success。
///
/// 返回 Running过渡演出进行中BossBase.IsPhaseTransitioning = true
/// 返回 Success过渡完成已切换到目标阶段。
/// 返回 FailureBossBase 组件不存在。
///
/// 典型 BT 用法:
/// Sequence [ BD_IsHPBelow(0.5) → BD_BossPhaseTransition(Phase=1, Duration=1.5) → ... ]
/// </summary>
[TaskName("Boss Phase Transition")]
[TaskCategory("BaseGames/Enemy/Boss")]
[TaskDescription("触发 Boss 阶段过渡演出(无敌 + 动画 + 广播事件)")]
public class BD_BossPhaseTransition : Action
{
[Tooltip("切换到的目标阶段索引")]
[SerializeField] private int m_TargetPhase = 1;
[Tooltip("无敌帧 + 过渡演出持续时间(秒)")]
[SerializeField, Min(0f)] private float m_InvincibleDuration = 1.5f;
private BossBase _boss;
private bool _started;
public override void OnAwake() => _boss = GetComponent<BossBase>();
public override void OnStart()
{
_started = false;
}
public override TaskStatus OnUpdate()
{
if (_boss == null) return TaskStatus.Failure;
if (!_started)
{
_boss.BeginPhaseTransition(m_TargetPhase, m_InvincibleDuration);
_started = true;
}
return _boss.IsPhaseTransitioning ? TaskStatus.Running : TaskStatus.Success;
}
}
}
#endif