You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让敌人抵达目标玩家后禁用指定脚本?(含代码片段)

解决敌人抵达玩家后禁用GameManager的casting脚本问题

看起来你已经搭好了敌人追踪玩家的基础框架,接下来只需要补充抵达检测逻辑,再执行禁用脚本的操作就行。我帮你一步步完善代码:

首先得明确“抵达目标”的判断标准——这里推荐用NavMeshAgent自带的导航属性,更贴合导航系统的逻辑;当然你也可以直接计算敌人与玩家的距离来判断,两种方式我都会提到:

public float lookRadius = 40f;
Transform target;
UnityEngine.AI.NavMeshAgent agent;
Rigidbody theRigidBody;
// 添加标志位,避免重复执行禁用操作
private bool hasReachedTarget = false;

void Start() {
    target = PlayerManager.instance.player.transform;
    agent = GetComponent<UnityEngine.AI.NavMeshAgent>();
    theRigidBody = GetComponent<Rigidbody>();
}

void Update() {
    float distance = Vector3.Distance(target.position, transform.position);

    // 敌人在追踪范围内,且还未抵达目标时持续导航
    if (distance <= lookRadius && !hasReachedTarget) {
        agent.SetDestination(target.position);

        // 方式1:用导航组件的剩余距离判断是否抵达
        if (agent.remainingDistance <= agent.stoppingDistance && !agent.pathPending) {
            OnEnemyReachTarget();
        }

        // 方式2:直接判断敌人与玩家的距离(比如小于1米就算抵达)
        // if (distance <= 1f) {
        //     OnEnemyReachTarget();
        // }
    }
}

// 自定义的抵达触发函数,专门处理抵达后的逻辑
void OnEnemyReachTarget() {
    // 标记为已抵达,防止Update帧重复触发
    hasReachedTarget = true;
    
    // 找到GameManager并获取casting脚本
    GameManager gameManager = FindObjectOfType<GameManager>();
    if (gameManager != null) {
        // 如果casting是你自定义的脚本类型,直接用泛型GetComponent更安全
        casting castingScript = gameManager.GetComponent<casting>();
        // 如果你不确定脚本类型,也可以用字符串查找(不推荐,容易出错)
        // MonoBehaviour castingScript = gameManager.GetComponent<MonoBehaviour>("casting");
        
        if (castingScript != null) {
            castingScript.enabled = false;
            Debug.Log("已禁用GameManager下的casting脚本");
        } else {
            Debug.LogWarning("GameManager上没找到名为casting的脚本哦");
        }
    } else {
        Debug.LogWarning("场景里找不到GameManager对象呀");
    }

    // 额外:让敌人抵达后停止移动,符合逻辑
    agent.isStopped = true;
}

关键细节说明:

  • agent.pathPending判断:避免导航路径还在计算时误判,确保路径稳定后再判断剩余距离。
  • hasReachedTarget标志位:防止每一帧都执行禁用操作,确保只触发一次。
  • 两种抵达判断方式:你可以根据需求选——用导航停止距离更贴合AI导航逻辑,用直接距离判断更灵活。

这样就能精准触发敌人抵达后的禁用操作啦!

内容的提问来源于stack exchange,提问作者user9540087

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:29:14