50 lines
1.5 KiB
C#
50 lines
1.5 KiB
C#
using System;
|
||
using UnityEngine;
|
||
using Gameplay;
|
||
using Interface;
|
||
using Gameplay.Enemy;
|
||
using Gameplay.Player;
|
||
|
||
namespace Gameplay.Combat
|
||
{
|
||
[RequireComponent(typeof(Collider))]
|
||
public class CombatTrigger : MonoBehaviour
|
||
{
|
||
//[Tooltip("战斗管理器引用(场景中单例/对象)")]
|
||
private CombatFlowManager combatManager;
|
||
|
||
[Tooltip("触发时指定的玩家 Combatant(可为空,manager 使用已配置的)")]
|
||
public PlayerController player;
|
||
|
||
[Tooltip("触发时指定的敌人 Combatant(可为空,manager 使用已配置的)")]
|
||
public EnemyController enemy;
|
||
|
||
[Tooltip("被触发后是否自动禁用触发器,避免重复触发")]
|
||
public bool disableAfterTrigger = true;
|
||
|
||
private void Start()
|
||
{
|
||
combatManager = CombatFlowManager.Instance;
|
||
}
|
||
|
||
private void Reset()
|
||
{
|
||
// Collider 需要 isTrigger
|
||
var col = GetComponent<Collider>();
|
||
col.isTrigger = true;
|
||
}
|
||
|
||
private void OnTriggerEnter(Collider other)
|
||
{
|
||
// 简单检测:玩家层或带有 "Player" 标签的物体
|
||
if (combatManager == null) return;
|
||
|
||
if (other.CompareTag("Player") || other.gameObject.layer == LayerMask.NameToLayer("Player"))
|
||
{
|
||
combatManager.StartCombat(player, enemy);
|
||
if (disableAfterTrigger) gameObject.SetActive(false);
|
||
}
|
||
}
|
||
}
|
||
}
|