和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");
}
}
}
测试一下(脚本执行前后):