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

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

  • 旋转三步走,相机射线

    一.Ray (1)构建一条射线:1.起点 2.方向 Ray=new ray(); (2)发射射线:Physics....

  • Ray射线

    获取射线Ray ray = cam.getPickRay(screenX, screenY); 计算距离Vecto...

  • VR中准心的设计(基于HTC Vive的项目)

    第一,摄像机发射射线,脚本如下: { Ray ray = new Ray(transform.posit...

  • CAD射线RAY

    1:射线的快捷键是RAY,射线即为一端有端点,而另一端没有端点并无限长,通过在命令行键入快捷命令ray,通过鼠标左...

  • U3D方法名

    U3D基础 U3D进阶 脚本的生命周期: 常用 API 之工具类: 射线: 愤怒的小鸟遇到的函数

  • cesium pick和射线的使用(工具篇)

    一,ray(射线)的使用 cesium里的射线用得比较广泛,很多拾取功能需要根据射线来进行摄取,像“视线分析”,“...

  • CAD射线快捷键RAY

    1:射线的快捷键是RAY,射线即为一端有端点,而另一端没有端点并无限长,通过在命令行键入快捷命令ray,通过鼠标左...

  • Unity Ray射线跟随鼠标

    一、射线跟随鼠标点击位置 二、射线实时跟随鼠标位置

  • DXF

    直线 Line 构造线 XLine 射线 Ray 圆 Circle 圆弧 Arc 椭圆 Ellipse 多段线 P...

网友评论

    本文标题:U3d 射线Ray

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