天天看點

Rigidbody SweepTest測試

和Physics的投射差不多,SweepTest可以直接投射目前碰撞

但是比較遺憾的是它對MeshCollider的支援不是很好,需要勾選Convex

投射和Physics一樣,隻要加了碰撞器,不管勾沒勾選Trigger都會被投射到

另外如果想移動剛體位置進行SweepTest的話,可以調用.position提前改變位置

比如我的遊戲中角色會瞬移到某個坐标,這時候判斷是否超過牆壁,這是我測試用的代碼,可以做到角色碰撞的修正:

using UnityEngine;

public class SweepTest : MonoBehaviour
{
    public Rigidbody rigidbodyComponent;


    void OnEnable()
    {
        RaycastHit raycastHit;
        if (rigidbodyComponent.SweepTest(transform.forward, out raycastHit, 10))
        {
            Debug.Log("Contact");
            var raycastPoint = raycastHit.point;

            var closesPoint = rigidbodyComponent.ClosestPointOnBounds(raycastPoint);

            rigidbodyComponent.transform.position += raycastPoint - closesPoint;
        }
        else
        {
            Debug.Log("Failure");
        }
    }
}      

測試一下(腳本執行前後):

Rigidbody SweepTest測試
Rigidbody SweepTest測試