关于射线碰撞
2014-08-21 22:55
197 查看
方法一:Physics.Raycast 光线投射
1.static function Raycast (origin : Vector3, direction : Vector3, distance :float = Mathf.Infinity, layerMask :
int = kDefaultRaycastLayers) : bool
一个静态的发射射线的方法,在场景中投下可与所有碰撞器碰撞的一条光线。
参数解释:
origin:射线起始点
direction:射线方向
distance:射线长度
layerMask:只选定Layermask层内的碰撞器,其它层内碰撞器忽略。
返回布尔类型,当光线投射与任何碰撞器交叉时为真,否则为假。
(注意:如果从一个球型体的内部到外部用光线投射,返回为假。 )这一点测试不成功!
2.static function Raycast (origin : Vector3, direction : Vector3, out
hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask :
int = kDefaultRaycastLayers) : bool
在场景中投下可与所有碰撞器碰撞的一条光线,并返回碰撞的细节信息。
Parameters参数
originThe starting point of the ray in world coordinates.
在世界坐标,射线的起始点。
direction
The direction of the ray.
射线的方向。
distance
The length of the ray
射线的长度。
hitInfo
If true is returned, hitInfo will contain more information about where the collider was hit (See Also: RaycastHit).
如果返回true,hitInfo将包含碰到器碰撞的更多信息。
layerMask
A Layer mask that is used to selectively ignore colliders when casting a ray.
只选定Layermask层内的碰撞器,其它层内碰撞器忽略。
Returns
当光线投射与任何碰撞器交叉时为真,否则为假。
使用c#中out关键字传入一个空的碰撞信息类,然后碰撞后赋值。可以得到碰撞物体的transform,rigidbody,point等信息。
详细解释一下:
LayerMask 层蒙版
如图所示,每一个物体都有一个Tag和Layer标签,tag就是一个简单的标签,可以用来区分不同的物体,LayerMask的作用是可以选择性地过滤物体,例如当投射射线时,比如camera.cullingmask和光线投射时候。
如图,可以在TagManager中编辑tag和Layer
然后设置物体的Layer层级,在摄像机中设置camera.cullingmask,可以控制摄像机的渲染层级,用在射线上,可以控制射线碰撞什么,不碰撞什么。
//Raycast hit
RaycastHit hit;
LayerMask mask = 1 << 8;
void testRay(){
if(Physics.Raycast(transform.position,Vector3.right,out
hit,100, mask.value)){
Debug.DrawLine(transform.position,hit.point,Color.red,1);
}
}
上面的例子是从当前脚本所绑定的物体做标点向右发射长度100的射线,射线碰撞层级为8,其他层级忽略。
为了测试,我们在碰撞到物体后画一条红色线条,表示射线,停留一秒钟。
上面这些是射线的一些基本操作。
方法二:Physics.RaycastAll 光线投射
static function RaycastAll (ray : Ray, distance :float = Mathf.Infinity,
layerMask : int = kDefaultRaycastLayers) : RaycastHit[]
static function RaycastAll (origin : Vector3,
direction : Vector3,
distance : float = Mathf.Infinity,
layermask : int = kDefaultRaycastLayers) : RaycastHit[]
投射一条光线并返回所有碰撞,也就是投射光线并返回一个RaycastHit[]结构体。
有一部分人说没效果,我想可能是layer值没有设置正确,layer的值应该是等于2的n次方,这个n是layer面板上的值,只要设置正确,应该是没有问题的
相关文章推荐
- Unity3D总结:关于射线碰撞
- Unity3D总结:关于射线碰撞
- Unity3D总结:关于射线碰撞
- Unity3D总结:关于射线碰撞
- Unity3D总结:关于射线碰撞
- Unity3D总结:关于射线碰撞
- Unity3D总结:关于射线碰撞
- Unity3D总结:关于射线碰撞
- 有关于碰撞检测丢失碰撞点的bug
- 3D模型下的鼠标拣选和碰撞检测-射线与圆的相交算法
- Flash game中关于碰撞检测之Rectangle篇
- 场景管理(二):场景上物体间以及物体地图间的碰撞检测(射线碰撞方式检测)
- Box2D 射线和AABB的碰撞检测
- OGRE碰撞检测之射线查询地形
- 射线使用-碰撞检测
- 关于对静态模型(.x)做的地形高度检测的研究(mesh顶点转换数组,射线与模型的相交检测)
- 关于两个不规则图形的碰撞检测
- 关于碰撞检测和物理引擎
- 关于碰撞检测和物理引擎
- 关于碰撞