Unity3D的射线检测Physics.Raycast

官方示例中使用Physics.Raycast检测摄像机有没有找到Palyer,并且中间没有被墙挡住的方法:
使用:public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo);
Unity3D的射线检测Physics.Raycast_第1张图片
上面使用的Physics.Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo);会将第一个碰撞到的物体通过out参数hitInfo传送出来。
如果需要检测所有碰撞到的物体,可以使用public static RaycastHit[] RaycastAll(Ray ray);
还有各种重写方法可以设定距离,方向,layermask。
关于类Ray,它的构造函数Ray(Vector3 origin, Vector3 direction);表明其他它就代表一个射线源的坐标和一个方向向量。

除了名称空间UnityEngine中含有的物理类的方法可以如上使用外,摄像机也有类似的方法,主要用来处理触屏的点击事件。
Camera.ScreenPointToRay 屏幕位置转射线
返回一条射线从摄像机通过一个屏幕点。产生的射线是在世界空间中,从相机的近裁剪面开始并穿过屏幕position(x,y)像素坐标(position.z被忽略)。屏幕空间以像素定义。屏幕的左下为(0,0);右上是(pixelWidth,pixelHeight)。

if(Input.touches.Count > 0)
 {
     Ray ray = Camera.main.ScreenPointToRay(Input.touches[0].position);
     // do stuff ...
 }

如上获取屏幕点击位置的Ray,然后通过Physics.Raycast等方法获取触碰到的对象就可以实现屏幕点击物体的互动了。

这里有一篇应用参考:unity3d 鼠标点击或触摸 控制角色对象行走

你可能感兴趣的:(unity3d,碰撞检测,射线)