【问题标题】:Field of View for enemy only works with 1 enemy敌人的视野仅适用于 1 个敌人
【发布时间】:2016-08-19 10:02:33
【问题描述】:

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

它只适用于一个敌人。当我添加另一个时,新的敌人不会检测到玩家。所以可能和协程有关,但我不确定。

这是我的一些代码:

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

【问题讨论】:

  • OverlapSphere 有一个 targetMask,这个变量是否正确设置了玩家的层?
  • 您好,Rob,感谢您的评论。 targetMask 设置正确(就我的观点而言): public LayerMask targetMask; 我可以选择哪一层是目标层。第一个敌人可以很好地处理它,但不是第二个。 ://
  • 你没有说你是如何“添加另一个”的。我怀疑你没有读过这个脚本在做什么提示:如果第一个敌人看到玩家,但第二个没有,会发生什么? ...如果第一个没有看到玩家,但第二个看到了怎么办?)
  • @t3chnico 你能用几张播放过程中层次结构中对象的屏幕截图来更新你的问题吗?
  • 只是检查一下 - 您确定将脚本附加到所有其他敌人(和/或敌人预制件)吗?

标签: unity3d detection game-development ienumerator fieldofview


【解决方案1】:

谢谢你们的小提示。这真的是一个小的层次结构问题:( 对不起那个新手/DAU 问题。 干杯 妮可

【讨论】:

    猜你喜欢
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2013-08-24
    • 2023-01-15
    • 1970-01-01
    相关资源
    最近更新 更多