更新结算界面
This commit is contained in:
@@ -60,6 +60,19 @@ namespace IndianOceanAssets.Engine2_5D
|
||||
[Tooltip("巡逻半径")]
|
||||
[SerializeField] private float bellPatrolRadius = 3f;
|
||||
|
||||
[Header("近战攻击")]
|
||||
[Tooltip("攻击范围(进入此范围后触发攻击)")]
|
||||
[SerializeField] private float attackRange = 1.5f;
|
||||
|
||||
[Tooltip("攻击冷却时间(秒)")]
|
||||
[SerializeField] private float attackCooldown = 1.5f;
|
||||
|
||||
[Tooltip("每次攻击造成的伤害")]
|
||||
[SerializeField] private int attackDamage = 1;
|
||||
|
||||
[Tooltip("攻击动画触发器名称(Animator Trigger)")]
|
||||
[SerializeField] private string attackAnimTrigger = "Attack";
|
||||
|
||||
// 状态枚举
|
||||
private enum State
|
||||
{
|
||||
@@ -83,14 +96,28 @@ namespace IndianOceanAssets.Engine2_5D
|
||||
private float _patrolTimer; // 巡逻计时器
|
||||
private Vector3 _patrolTarget; // 当前巡逻目标点
|
||||
|
||||
// 攻击相关
|
||||
private float _attackTimer; // 攻击冷却计时器
|
||||
private Animator _animator; // 敌人动画
|
||||
private HealthSystem _playerHealth; // 玩家血量引用
|
||||
|
||||
private void Start()
|
||||
{
|
||||
if (playerTarget == null)
|
||||
{
|
||||
var player = GameObject.FindWithTag("Player");
|
||||
if (player != null)
|
||||
{
|
||||
playerTarget = player.transform;
|
||||
_playerHealth = player.GetComponent<HealthSystem>();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_playerHealth = playerTarget.GetComponent<HealthSystem>();
|
||||
}
|
||||
|
||||
_animator = GetComponent<Animator>();
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
@@ -129,15 +156,24 @@ namespace IndianOceanAssets.Engine2_5D
|
||||
// ===== ChasingPlayer:追击玩家 =====
|
||||
private void UpdateChasingPlayer()
|
||||
{
|
||||
// 更新攻击冷却
|
||||
_attackTimer -= Time.deltaTime;
|
||||
|
||||
// 检测是否看到玩家
|
||||
if (CanSeePlayer())
|
||||
{
|
||||
_loseSightTimer = 0f; // 重置计时器
|
||||
|
||||
// 追击玩家
|
||||
float dist = XZDistance(transform.position, playerTarget.position);
|
||||
if (dist > stopDistance)
|
||||
|
||||
// 进入攻击范围 → 近战攻击
|
||||
if (dist <= attackRange)
|
||||
{
|
||||
TryAttack();
|
||||
}
|
||||
else if (dist > stopDistance)
|
||||
{
|
||||
// 追击玩家
|
||||
MoveToward(playerTarget.position, chaseSpeed);
|
||||
}
|
||||
}
|
||||
@@ -164,6 +200,28 @@ namespace IndianOceanAssets.Engine2_5D
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 尝试近战攻击。在攻击冷却就绪时触发。
|
||||
/// </summary>
|
||||
private void TryAttack()
|
||||
{
|
||||
if (_attackTimer > 0f) return; // CD 未就绪
|
||||
|
||||
_attackTimer = attackCooldown;
|
||||
|
||||
// 对玩家造成伤害
|
||||
if (_playerHealth != null)
|
||||
{
|
||||
_playerHealth.Damage(attackDamage);
|
||||
}
|
||||
|
||||
// 触发攻击动画
|
||||
if (_animator != null && !string.IsNullOrEmpty(attackAnimTrigger))
|
||||
{
|
||||
_animator.SetTrigger(attackAnimTrigger);
|
||||
}
|
||||
}
|
||||
|
||||
// ===== ChasingBell:追击铃铛 =====
|
||||
private void UpdateChasingBell()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user