碰撞體速度過快穿透的問題


問題:假設現在A物體以非常高的速度移動,而unity每一幀的檢測時間大概是0.02秒,也就是說如果物體A速度過快,

在不用0.02秒的時間就已經穿過了其他物體,那么這個時候是無法檢測A與其他物體之間的碰撞信息的

主要原因是:

1.未設置好更新位置的代碼位置

2.碰撞盒太小

3.物理碰撞檢測間隔太長。

總之,根本原因就是在執行一次碰撞檢測之前,移動的位移超過了碰撞本身的大小。

解決方案:

void Update ()   
{  
        Vector3 oriPos = transform.position;//記錄原來的位置  
        transform.Translate (Vector3.forward * speed * Time.deltaTime); //移動  
        float length = (transform.position - oriPos).magnitude;//射線的長度  
        Vector3 direction = transform.position - oriPos;//方向  
        RaycastHit hitinfo;  
        bool isCollider = Physics.Raycast (oriPos, direction,out hitinfo,length);//在兩個位置之間發起一條射線,然后通過這條射線去檢測有沒有發生碰撞  
        if(isCollider)  
        {  
            ....  
        }  
}  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM