U3d 射线Ray

作者: valiant_xin | 来源:发表于2017-08-16 11:25 被阅读0次

    现在想要实现这样一个需求:当鼠标放到物体上的时候,让物体的大小发生改变,并且不停的旋转,当鼠标点击进行拖动的时候,让物体随着鼠标进行拖动。

    1.首先呢,大小和旋转其实很好做,只不过是改变缩放度大小,还有让它随着时间改变rotation而已。

    OnMouseEnter():当鼠标进入的时候,当鼠标进入显示物体边缘的一瞬间,只执行一次。

    OnMouseExit():当鼠标退出的时候,当鼠标退出显示物体边缘的一瞬间执行,只执行一次。

    OnMouseOver():当鼠标覆盖在物体上的时候,只要鼠标还覆盖在物体上,就会不停的执行,多次执行。

    如此就能实现旋转和缩放。

    2.旋转和缩放完成了,那么接下来就该让物体随着拖动鼠标进行移动了。

    在这里,使用射线可以实现。从摄像机直接发射出一条射线,打到屏幕内物体上,就能检测到对应鼠标的点应该在3d世界中具体在哪个位置。

    OnMouseDrag():当鼠标拖动的时候执行,单机鼠标左键,拖动物体的时候触发,会一直执行,多次执行。

    Input.mousePosition:鼠标所在位置,鼠标在屏幕上的位置。

    Ray ray = camera.ScreenPointToRay(Input.mousePosition);从照相机射出来的射线

    if (Physics.Raycast(ray, out hit, 1000f, 1<<8))当成功发出射线,一些碰撞信息都会保存在hit中,在这里射线的长度是1000,检测和射线碰撞的层是第八层。

    LayerMask.NameToLayer("Terrain")我这里自定义第八层layer为Terrain,所以打印出来的信息也是8,之前想要将这个放到Physics.Raycast最后一个参数,发现并不好使。试验后才发现最后一个参数是通过位移得来的。

    当发生射线和地面碰撞的时候,就把改变物体的位置,这样就能够让物体随着鼠标进行拖动了。

    Debug.DrawLine(ray.origin, hit.point, Color.red):这个只是画一条线,方便进行观察,实际开发中并不需要,这是画一条从射线发射点到碰撞点的红色线段。

    相关文章

      网友评论

        本文标题:U3d 射线Ray

        本文链接:https://www.haomeiwen.com/subject/qbnbrxtx.html