激光交接文档

激光组件

交接人:王小梯(136821) ps:有问题仍然可以微信问我 13137154858
器材:陈伟超(352124)(关于激光相关的问题可以咨询他)
这个文档是用来说明组件中的代码执行逻辑的,不是接口文档

1 类图(简易)

2 逻辑说明

带有Refract的方法都是关于折射的
带有Refrect的方法都是关于反射的

折射光线越强,反射光线越弱。即,折射光线的Alpha越大,反射光线的Alpha越小。

激光使用LineRenderer组件绘制,激光线条和物体上的Mesh碰撞时,计算反射光线和折射光线。
检测过程不是通过射线检测,因为射线检测只能作用在MeshCollider上,而且使用MeshCollider会不准确。最重要的是射线无法从MeshCollider内部检测网格。

激光检测的入口LitEngine.StartRay
激光检测的过程可以理解为使用前序遍历创建二叉树,左节点为反射光线的创建,右节点为入射光线的创建。

每次调用PointAdd方法,就表示其中一段激光结束,开启下一段激光。也表示激光和Mesh碰撞了。

LitUtils.GetInteractPoint用来判断射线和Mesh的碰撞信息的。

激光每次折射和反射后,颜色会变浅。

激光在闭合的Mesh内部反射时,会出现反射多次的情况,如果没有激光反射的限制,则必然会出现死循环。所以目前从Mesh外进入内部的激光,反射次数会被缓存下来,如果反射次数超过3,则后面的反射激光不再创建,但是折射激光没有任何限制。

由于激光的折射反射依赖Mesh,对Mesh要求比较高,部分模型如方形玻璃砖,每个面上存在两层Mesh,肉眼虽然看不出来,但是激光在检测的时候,就会出现碰到第一层时开始折射,但是折射激光走了很短的一段距离后,就会再次折射,导致折射两次,效果和正常的不一致。

3 光学设置

  • 默认关闭显示角度和反射光线

  • 开启反射光线后

  • 开启显示光线角度

有些元器件不受光学设置的影响,不管是否开启反射光线,都会显示反射光线

4 待优化部分

1、目前激光数量很多时,会很卡
2、激光数量很多时,如果同时开启激光的辅助线,几乎卡死Unity
3、目前激光存在两种折射的逻辑

  • CalculateRefract计算单层介质的折射,即从空气中进入介质折射一次之后,再次折射就变成了从介质中进入空气的逻辑了。
  • CalculateMultiRefract计算多层介质的折射,即在介质中折射一次之后,再次折射依然是在一个新的介质中折射。