当前位置: 首页 > wzjs >正文

义马网站建设电话长沙seo网站优化

义马网站建设电话,长沙seo网站优化,怎样做网站卖自己的产品教程,网站建设结构分布一、最终效果: 二、代码来源及思路 unity-raycast-reflection/Assets/RaycastReflection.cs at master Loafwad/unity-raycast-reflection GitHub 在GitHub找到了现成的,效果很好,稍微改了一点来满足我的需求,并加上了注释理解…

一、最终效果:

二、代码来源及思路

unity-raycast-reflection/Assets/RaycastReflection.cs at master · Loafwad/unity-raycast-reflection · GitHub

在GitHub找到了现成的,效果很好,稍微改了一点来满足我的需求,并加上了注释理解,代码如下

using System.Collections;
using System.Collections.Generic;
//using UnityEditor.EditorTools;
using UnityEngine;public class MirrorReflection : MonoBehaviour
{//挂在发射光线的物体上[Tooltip("光线反射次数")]public int refelections;[Tooltip("光线最大长度")]public float maxLength;/// <summary>/// 通过这个transform旋转后的up来决定射线方向/// </summary>[Tooltip("光线射出的方向")]public Transform direction;LineRenderer lineRenderer;Ray ray;RaycastHit hit;void Awake(){lineRenderer =GetComponent<LineRenderer>();    }void Update(){//ray在这为初始光线的起点和方向ray = new Ray(transform.position,direction.up);//设定初始光线起点lineRenderer.positionCount=1;lineRenderer.SetPosition(0,transform.position);//定义剩余长度float remainingLength = maxLength;//反射for(int i=0;i<refelections;i++){//如果打到物体if(Physics.Raycast(ray.origin,ray.direction,out hit,remainingLength)){//光线击中物体lineRenderer.positionCount+=1;lineRenderer.SetPosition(lineRenderer.positionCount-1,hit.point);//设置末端点位置remainingLength-=Vector3.Distance(ray.origin,hit.point);//更新剩余光线长度//如果打到的物体不是镜子,则不继续发生折射if(hit.collider.tag!="Mirror"){break;}//将Ray更新成折射后的射线ray=new Ray(hit.point,Vector3.Reflect(ray.direction,hit.normal));}//如果没打到任何东西else if(i==refelections-1){//则在设定长度的末端生成一个端点lineRenderer.positionCount+=1;lineRenderer.SetPosition(lineRenderer.positionCount-1,ray.origin+ray.direction*remainingLength);}}}
}

思路: 该脚本挂在光源物体上(发射光柱的物体,即光柱起点物体),给光源物体加上一个子物体法平面用于调节光柱方向。

围绕Vector3的reflect方法确定所需参数,利用unity提供的Ray类型在代码中确定光柱的起点和方向,LineRenderer渲染实际光柱

ray建立入射光线的起点以及入射方向,使用Raycast方法(它有很好的特性:能获取被射点的法线normal向量)得到入射点的法线向量,即可完成光线入射

而如果入射物体是镜子,则可以发生反射。更新ray的起点为入射点,方向为使用reflect方法计算得出的反射方向向量。

如果入射物体不是镜子,则不计算反射光线,也不更新ray,仅在最后一次循环时更新光柱末端点

写在update里起到每帧都会重新发射一次光线的作用

for循环决定了一帧内一共能反射多少次(通过refelections来控制数量)

三、场景搭建步骤

1、创建一个发射光线的物体,我这里创了一个球体来代表光源

2、给光源添加LineRenderer组件,size改成0,线的材质可以根据自己需求改,我这里用默认材质

3、再在光源物体下创建一个法平面子物体(作用是决定光源物体发射的光线的方向)

个人认为直接创建一个平面物体在下面好一些,调方向的时候很直观

调好方向后关掉MeshRenderer(自带的collider可以移除掉)

PS.为什么不直接转光源物体来决定方向?LineRenderer不会跟着物体转

5、给光源物体挂上MirrorRefelection脚本,设定好需要的反射次数,光柱总长度,以及挂上直接设置的法平面

4、创建一个带“mirror”tag的镜子,我这里创建了一个平面来当作镜子,并且设置了一个镜子材质

注意:ray要想成功打到物体要求那个物体必须有collider才能检测到,因此使用自定义模型时一定要记住添加碰撞体(并且meshcollider的话要求勾选convex)

5、运行,可以多复制几个镜子验证效果

这样看效果还比较差,需要调节LineRenderer的参数

这样就发现圆润多了

但是我们会发现悬空了,悬空的原因是平面的collider比较大,不贴合平面本身

所以自己建一个boxcollider调整一下位置就好啦

http://www.dtcms.com/wzjs/467098.html

相关文章:

  • 丹东网站网站建设手机网页链接制作
  • 广西柳州做网站优化设计
  • 做网站不难吧2023年7月疫情爆发
  • 商丘做网站用什么程序比较好seo网上培训课程
  • 深圳网站建设10强提高seo关键词排名
  • 政务网站建设经验做法搜索引擎关键词排名
  • 做图的模板下载网站有哪些内容网站首页模板
  • 可以做试题的网站宁波网站关键词优化代码
  • 做网站托管百度云盘网官网
  • 做物流的网站中国关键词网站
  • 做兼职用什么网站最好刷关键词怎么刷
  • 建设网站的一般过程网站优化公司开始上班了
  • 香港服务器可以放博彩网站吗深圳网站seo地址
  • 用vs做的网站怎么打开今日头条热点新闻
  • 国内做钢铁的网站如何写软文赚钱
  • 济南新网站优化软文优化
  • 建设vip视频解析网站违法吗暴风seo论坛
  • php网站开发实例教程 源代码百度推广怎么推
  • 建设商业网站的功能定位安徽百度seo教程
  • 深圳 服装 网站建设seo怎么做整站排名
  • 郑州网站建设设计山西网页制作
  • 怎么做才能让网站快速收录西安关键词排名提升
  • 石景山青岛网站建设b站推广网站入口2023的推广形式
  • 辽宁省建设工程信息网推荐中项网潍坊seo关键词排名
  • 电子商务网站的建设和维护网站页面分析作业
  • 白石龙做网站查数据的网站有哪些
  • wordpress怎么弄表单湖南有实力seo优化
  • 高端网站建设套餐百度指数怎么下载
  • 淄博做网站建设智能网站推广优化
  • 网站建设算不算固定资产网络营销的推广方式