您的位置:首页 > 其它

Rigidbody SweepTest测试

2016-02-24 23:04 375 查看
和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("Contract");
var raycastPoint = raycastHit.point;

var closesPoint = rigidbodyComponent.ClosestPointOnBounds(raycastPoint);

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


测试一下(脚本执行前后):





极端情况测试:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: