Unity3d中相机某些区域中物体的碰撞检测

时间:2015-09-17 16:08:40

标签: unity3d

我正在制作第三人称动作游戏,其中玩家是直升机,他可以在移动时拍摄其他物体。问题是我试图找到在相机中心的圆圈内的敌人物体,我需要跟踪它们并拍摄它们。

由于我需要更厚的光线投射,所以我尝试了球形播放和封套广播,因此Raycast无法提供帮助。 我有一个GUI元素,可以让玩家知道他可以拍摄的地方。当使用Spherecast或Capsulecast时,当敌人靠近但是当敌人远远落后时我会猜测球星在沿着z旅行时会变得很小而且没有# 39;多次击中物体。

if (Physics.SphereCast (startPoint, 1f, transform.forward, out hit)) {
            if (hit.collider.CompareTag ("Shootable") ){
                Debug.Log(hit.collider.name);
                Destroy(hit.collider.gameObject);
            }
        }

I want to track objects which are inside the circle in the center

我从相机看过raycast,所以我想知道是否有像摄像机中的circlecast那样的东西可以做到这一点。如果没有,我该怎么办?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

如果您想检测敌人是否位于相机前方的锥形区域内,使用SphereCastRayCast将无法满足您的需求。

相反,您可以考虑检查敌人的相对位置和相机的前向矢量之间的角度,看它是否低于特定值,因此在锥体内。

对于60度视野,并假设您将敌人Transform组件存储在数组/列表中,您的代码可能如下所示:

foreach (Transform enemy in enemies){
    if (Vector3.Angle(transform.forward, enemy.position - transform.position) < 30){
        Destroy(enemy.gameObject);
    }
}

希望这有帮助!如果您有任何疑问,请告诉我。 (答案改编自this Unity question。)