你好家伙一直在我的项目上创建FPS游戏AI的FSM,我有一个关于raycast的问题,如果只有一个目标我的代码工作如此完美,但如果有两个目标或更多,我有一些问题,我只是想光线投射只有一个目标,但我不知道如何做到这一点,这里是用ontriggerstay如何光线投射只有一个目标Unity C#
void OnTriggerStay (Collider other)
{
if(other.gameObject.tag == "CT")
{
collideWithPlayer = true;
Vector3 direction = other.transform.position - transform.position;
float angle = Vector3.Angle(direction, transform.forward);
if(angle < fieldOfViewAngle * 0.5f)
{
RaycastHit hit;
if((Physics.Raycast(transform.position , direction, out hit, col.radius)))
{
Debug.DrawRay (transform.position, hit.point - transform.position, Color.cyan);
if(hit.collider.gameObject.tag == "CT")
{
aliveTarget = hit.point;
playerInSight = true;
transform.LookAt(aliveTarget);
}
else if ((hit.collider.gameObject.tag != "CT")) {playerInSight = false; }
}
}
}
}
香港专业教育学院试了很多方法,但仍然没有工作,我对光线投射代码,即时新手无论如何:D所以也许你们可以帮助我。这里的问题是如果一个目标已经看见(玩家洞察力应该是真实的)并且另一个目标进入视野内但被障碍覆盖,玩家洞察将触发假。这是因为这个脚本会对任何进入视野内的人进行光线投射,所以我只是只有在目标瞄准目标时,才能对一个目标进行光线投射,而不是再次进行光线投射。也许这对你们来说是一个新手问题,我很抱歉提出一个新手问题,但我现在很紧张,请帮助我谢谢你。
脚本上的问题可能是if语句或ontriggerstay()?
当您检查光线投射,检查是否有发现尚未停止光线投射检查的对象。 – MahanGM
感谢您的评论,以及如何检查是否有任何物品被发现? ive试过用bool,它没有工作 –
为什么当你与它发生碰撞时,为“CT”物体进行光线投射?你的意思是说有多个“CT”对象也会产生问题或其他对象? – MahanGM