我需要一些轉換附帶撞機移動到特定位置,然後檢查是否其中一人被擊中光線投射。光線投射的瞬間感動撞機
我已經做了用簡單的方式(僞代碼):
foreach(object in objects){
actual_position = object.transform.position
object.transform.position = object.new_position
}
if(Physics.Raycast(...)) objectHit();
// Then I revert each of them them back to their actual_position
(測試之間的相同位置的每個對象)用同樣的情況下測試多次後,光線投射有時會錯過,有時不(約50/50)。
做了一些研究,發現在光線投射文檔頁面:
如果從腳本或動畫中移動對撞機,需要有 被至少一個FixedUpdate執行,使得物理庫能 更新其數據結構,在Raycast將撞擊對撞機 它是新的位置。
因此,我平息了我的憤怒,開始尋找解決方案。 這個討論有使用協程,等待下一步打勾的方式:我affraid它不會爲我工作,因爲我需要的對象要回自己的真實位置瞬間 Raycast doesn't work properly
。 這個過程每幀可能發生多次(每次玩家發射他的武器)
有沒有辦法強制碰撞器更新?
如果不是......我應該讓我自己的光線投射和對撞機? :(
感謝
您是否嘗試過使用類似'Bounds.IntersectRay'?如果你的物體上有一個簡單的對撞機(或者你的raycast不需要100%準確),那麼你可以使用'object.GetComponent().bounds'獲得邊界,並且將邊界對象移動到新的位置,檢查它,然後只在對象不移動時才移動對象,這樣做的性能也會比移動兩次更好,因爲如果它不應該移動它,https: //docs.unity3d.com/ScriptReference/Bounds.IntersectRay.html –
看起來像一個聰明的解決方案,我的對撞機目前是簡單的膠囊,但我想這也適用於更復雜的MeshCollider。我看到的唯一問題是,我將不得不測試每個對象,並確保它們和射線源之間沒有隔離牆。這比投射光線投影更復雜,但爲什麼不呢。非常感謝你的幫助。 – FLX
看着你鏈接的答案我在想,也許你可以嘗試使用'yield return new WaitForFixedUpdate();',因爲它會在每次物理更新之前調用? – Kardux