unity3d 显示射线定义射线 BUG

SphereCast-球形射线的使用和它目前存在的问题
功能简介 &
假想,按照规定好的数据(圆心/半径/位置/投射方向),生成一个半球体.&
然后沿着球形表面投射出无数条Raycast射线.
并只返回距离圆心点最近的碰撞目标信息. &
代码片段功能 &
[1] 以自身位置+高度1米为圆心. 以radius为半径, 沿着自身的正前方,投射出无数条长度为len的射线.
并返回距离我最近的碰撞点信息.&
[2] 如果碰撞到有效目标,就绘制出一条连接目标点的黑线, 否则就绘制出一条向前延伸一米的红线.
SphereCast存在的问题和BUG (unity版本5.4.3f1)&
如果哪位朋友知道BUG原因请告知,谢谢
[1] 存在的问题
如果探测目标与球形射线的圆心距离小于球形射线的半径. 那么射线会直接无视并穿透这个探测目标.
使用SphereCast的时候一定要严防小心这个问题.&
[2] 存在的BUG
BUG如何触发 - (1) 探测目标的碰撞机制必须是BoxCollider. &(2)
探测目标的体积必须非常大,比如大于1000米.
BUG的触发测试 - 满足上面的触发条件, 然后将这个碰撞体与球形检测范围相靠拢. 你会发现当碰撞体与球形
探测范围距离较近,但是并未小于球形半径的情况下, 射线依然出现了无视并穿透目标的状况.
此计算误差大小和出现的概率与BoxCollider的尺寸成正比.
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。最近开始研究U3D,它的强大就不多说了, 今天研究了研究射线相关东西,总结了些东西放上来,一来做个笔记,二来和大家分享分享!嘿嘿~ &如果有不对的地方希望指出哈 !- _ - 进入正题
射线:射线是3D世界中一个点向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停止发射&。
用途:射线应用范围比较广,&多用于碰撞检测(如:子弹飞行是否击中目标)、角色移动等 等。
1、Ray&Camera.main.ScreenPointToRay(Vector3&pos)&&&返回一条射线从摄像机到屏幕指定一个点
2、Ray&Camera.main.ViewportPointToRay(Vector3&pos)&&返回一条射线从摄像机到视口(视口之外无效)指定一个点
3、Ray&射线类&
4、RaycastHit&光线投射碰撞信息
5、bool&Physics.Raycast(Vector3&origin,&Vector3&direction,&float&distance,&int&layerMask)
& & 当光线投射与任何碰撞器交叉时为真,否则为假。
& & bool&Physics.Raycast(Ray&ray,&Vector3&direction,&RaycastHit&out&hit,&float&distance,&int&layerMask)
& & 在场景中投下可与所有碰撞器碰撞的一条光线,并返回碰撞的细节信息()。
& & bool&Physics.Raycast(Ray&ray,&float&distance,&int&layerMask)
& & 当光线投射与任何碰撞器交叉时为真,否则为假。
& & bool&Physics.Raycast(Vector3&origin,&Vector3&direction,&RaycastHit&out&hit,float&distance,&int&layerMask)
& & 当光线投射与任何碰撞器交叉时为真,否则为假。
& & 注意:如果从一个球型体的内部到外部用光线投射,返回为假。
& & 参数理解:
  origin&:&在世界坐标中射线的起始点
  direction:&射线的方向
  distance:&射线的长度
  hit:&使用c#中out关键字传入一个空的碰撞信息类,然后碰撞后赋值。可以得到碰撞物体的transform,rigidbody,point等信息。&
  layerMask:&只选定Layermask层内的碰撞器,其它层内碰撞器忽略。&选择性的碰撞
6、RaycastHit[]&RaycastAll(Ray&ray,&float&distance,&int&layerMask)
&&&投射一条光线并返回所有碰撞,也就是投射光线并返回一个RaycastHit[]结构体。
& 下面一个利用射线做的拾取的小例子(将代码直接拖拽到主相机上)
1 using UnityE
2 using System.C
4 public class RayTest : MonoBehaviour {
// Use this for initialization
void Start () {
// Update is called once per frame
void Update ()
if(Input.GetMouseButton(0))
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//从摄像机发出到点击坐标的射线
RaycastHit hitI
if(Physics.Raycast(ray,out hitInfo))
Debug.DrawLine(ray.origin,hitInfo.point);//划出射线,只有在scene视图中才能看到
GameObject gameObj = hitInfo.collider.gameO
Debug.Log("click object name is " + gameObj.name);
if(gameObj.tag == "boot")//当射线碰撞目标为boot类型的物品 ,执行拾取操作
Debug.Log("pick up!");
阅读(...) 评论()他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)unity3d 射线扫描 忽略图层
时间: 13:13:38
&&&& 阅读:128
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&原地址:http://blog.csdn.net/w/article/details/
static RaycastHit2D[]&RaycastAll(origin,direction,float&distance&= Mathf.Infinity,int&layerMask&= DefaultRaycastLayers,float&minDepth&= -Mathf.Infinity,float&maxDepth&= Mathf.Infinity);
The point in 2D space where the ray originates.
Vector representing the direction of the ray.
Maximum distance over which to cast the ray.
Filter to detect Colliders only on certain layers.
Only include objects with a Z coordinate (depth) greater than this value.
Only include objects with a Z coordinate (depth) less than this value.
Casts a ray against colliders in the scene, returning all colliders that contact with it.发射一条射线到场景中,检测射线射到的所有碰撞机(collider)
RaycastHit2D[]&rhArFirst&=&Physics2D.RaycastAll(qieObject.transform.position,&vectorDir,&StageManager.elementSize,3);&&
标签:&&&&&&&&&&&&&&&&&&&&&&&&原文:http://www.cnblogs.com/123ing/p/3911959.html
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!}

我要回帖

更多关于 unity3d 射线 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信