和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");
}
}
}
測試一下(腳本執行前後):