你好傢伙一直在我的項目上創建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