-1

敵の「視野」のスクリプトに問題があります。プレイヤーの視野を作成するためのチュートリアルを見た後、敵がプレイヤーを検出して他のことを行うように、視野を敵の視野に切り替えることができると思いました。playerInRange敵がプレイヤーを検出できるかどうかを検出するブール変数を作成し、この変数を true または false に設定しました。

敵が1体いるだけでも効果あり。別の敵を追加すると、新しい敵はプレイヤーを検出しません。コルーチンに関連している可能性がありますが、よくわかりません。

これが私のコードのほんの一部です:

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);
        }
    }
}
4

1 に答える 1

-1

皆さん、ちょっとしたヒントをありがとう。それは本当に小さな階層の問題でした:(その初心者/ DAUの質問で申し訳ありません.乾杯ニコ

于 2016-08-22T05:10:25.983 に答える