敌人的视野仅适用于1名敌人

问题描述 投票:-1回答:1

我对敌人的“视野”的脚本有一些问题。在观看教程为玩家创建视野后,我认为我可以将其切换到敌人的位置,以便他们能够检测到玩家并做其他一些事情。我创建了一个布尔变量playerInRange来检测敌人是否可以检测到玩家并将此变量设置为true或false。

它只适用于一个敌人。当我添加另一个时,新敌人将无法检测到该玩家。所以也许它与协程有关,但我不确定。

这是我的一些代码:

void Start() {
    StartCoroutine("FindTargetsWithDelay", .2 f);
}

IEnumerator FindTargetsWithDelay(float delay) {
    while (true) {
        yield
        return new WaitForSeconds(delay);
        FindVisibleTargets();
    }
}

public void FindVisibleTargets() {
    visibleTargets.Clear();

    Collider[] targetsInViewRadius = Physics.OverlapSphere(transform.position, viewRadius, targetMask);

    for (int i = 0; i < targetsInViewRadius.Length; i++) {
        Transform target = targetsInViewRadius[i].transform;
        Vector3 dirToTarget = (target.position - transform.position).normalized;
        if (Vector3.Angle(transform.forward, dirToTarget) < viewAngle / 2) {
            float dstToTarget = Vector3.Distance(transform.position, target.position);

            if (!Physics.Raycast(transform.position, dirToTarget, dstToTarget, obstacleMask)) {

                // Not so nice solution!
                // The movement should be in a separate script!
                visibleTargets.Add(target);
                nav.SetDestination(player.position);
                anim.SetBool("IsRunning", true);

                if (dstToTarget < attackRange) {
                    playerInRange = true;
                    Debug.Log(playerInRange);
                }

            }
        } else {
            anim.SetBool("IsRunning", false);
            playerInRange = false;
            Debug.Log(playerInRange);
        }
    }
}
unity3d detection game-development ienumerator fieldofview
1个回答
-1
投票

谢谢你们的小小提示。这真的是一个小的层次结构问题:(抱歉新手/ DAU问题。干杯尼科

© www.soinside.com 2019 - 2024. All rights reserved.