我正在制作第三人称动作游戏,其中玩家是直升机,他可以在移动时拍摄其他物体。问题是我试图找到在相机中心的圆圈内的敌人物体,我需要跟踪它们并拍摄它们。
由于我需要更厚的光线投射,所以我尝试了球形播放和封套广播,因此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);
}
}
我从相机看过raycast,所以我想知道是否有像摄像机中的circlecast那样的东西可以做到这一点。如果没有,我该怎么办?
非常感谢任何帮助。
答案 0 :(得分:1)
如果您想检测敌人是否位于相机前方的锥形区域内,使用SphereCast
或RayCast
将无法满足您的需求。
相反,您可以考虑检查敌人的相对位置和相机的前向矢量之间的角度,看它是否低于特定值,因此在锥体内。
对于60度视野,并假设您将敌人Transform
组件存储在数组/列表中,您的代码可能如下所示:
foreach (Transform enemy in enemies){
if (Vector3.Angle(transform.forward, enemy.position - transform.position) < 30){
Destroy(enemy.gameObject);
}
}
希望这有帮助!如果您有任何疑问,请告诉我。 (答案改编自this Unity question。)