1、准备工作

①创建一个Sphere为发射点,添加LineRenderer组件。
②调整LineRenderer组件下的宽度属性:

当然想更好看些可以添加个材质修改个颜色啥的。

③最后随便创建几个Cube当反射墙面(顺便修改tag为"Mirro")。

2、编写脚本,挂到Sphere上。

using System.Collections.Generic;
using UnityEngine;public class LaserControl : MonoBehaviour
{/// <summary>/// LineRenderer组件/// </summary>public LineRenderer lr;/// <summary>/// 发射点/// </summary>public Transform gunTransfrom;/// <summary>/// 射线检测到的碰撞信息/// </summary>private RaycastHit hit;/// <summary>/// LineRenderer线段的两端点信息/// </summary>private List<Vector3> linePoints = new List<Vector3>();private void Update(){//清空上一帧的两端点信息linePoints.Clear();//执行反射方法Reflection(gunTransfrom.position, gunTransfrom.forward);//设置LineRenderer端点数量lr.positionCount = linePoints.Count;//遍历所有端点for (int i = 0; i < linePoints.Count; i++){//设置两端点信息lr.SetPosition(i, linePoints[i]);}}/// <summary>/// 反射方法/// </summary>/// <param name="position">发射点位置</param>/// <param name="direction">方向</param>private void Reflection(Vector3 position, Vector3 direction){//在Scene视图中观察射线是否正确射出Debug.DrawRay(position, direction * 1000, Color.red);//判断射线是否打到墙面if (Physics.Raycast(position, direction, out hit, float.PositiveInfinity)){//如果碰到的是墙面if (hit.collider.tag == "Mirro"){//入射向量Vector3 inLine = hit.point - position;//入射线与法向量的夹角float angle = 180 - Vector3.Angle(inLine, hit.normal);//法向量的长度float normalx = Mathf.Cos(angle * Mathf.Deg2Rad) * Vector3.Distance(position, hit.point);//法向量的终点Vector3 normalPoint = hit.point + hit.normal.normalized * normalx;//反射点Vector3 outPoint = normalPoint - position + normalPoint;//反射向量Vector3 outLine = outPoint - hit.point;//存储端点linePoints.Add(position);//递归Reflection(hit.point, outLine);}//如果不是墙面else if (hit.collider != null){  //停止反射linePoints.Add(position);linePoints.Add(hit.point);}}//如果没有照射到任何物体else{//射线正常射出5000的长度linePoints.Add(position);linePoints.Add(direction.normalized * 5000);}}
}

最后别忘了回到Unity中给LineRenderer和发射点赋值:
(两个都把Sphere拖上去就行)
这样就完成了简单的反射效果。

有更好的方法欢迎指点。

Unity实现镜面反射效果相关推荐

  1. CSharpGL(39)GLSL光照示例:鼠标拖动太阳(光源)观察平行光的漫反射和镜面反射效果...

    CSharpGL(39)GLSL光照示例:鼠标拖动太阳(光源)观察平行光的漫反射和镜面反射效果 开始 一图抵千言.首先来看鼠标拖动太阳(光源)的情形. 然后是鼠标拖拽旋转模型的情形. 然后我们移动摄像 ...

  2. unity 条目换位效果_Unity AI主题博客条目

    unity 条目换位效果 Welcome to the first of Unity's new AI-themed blog entries! We have set up this space a ...

  3. Unity 实现贴花效果的制作教程

    c#教程​https://www.cnblogs.com/Yesi/p/15829200.html ​ 有些游戏中的战斗痕迹的效果会通过贴花来实现的,贴花的方式多种多样.而在Unity中,有一种给官方 ...

  4. unity气流模拟效果

    机房气流模拟效果 参考 效果展示: 资源链接:unity气流模拟效果-Unity3D文档类资源-CSDN下载

  5. 用Unity实现景深效果

    用Unity实现景深效果 景深也是一种非常常见的后处理手段,它用来模拟相机拍摄画面的效果.今天我们讨论如何在Unity中实现它. 简单来说,景深效果可以拆分为两个部分,一个部分是聚焦,使画面中指定的区 ...

  6. Unity 翻书效果

    Unity翻书效果 目前做的VR项目中需要一个翻阅魔法书的效果,考虑过使用UnityBookPageCurl-master插件,但是那个插件是纯UI显示的,只有二维效果,在VR里观感不佳,之后在网上找 ...

  7. Unity时光倒流效果实现

    Unity时光倒流效果实现<25/11/2017> 场景:一个Panel,一个由众多小Cube堆叠而成的巨大Cube,巨大Cube中心放置爆炸点Bomb. 实现方式:一共就三个脚本,每个C ...

  8. Unity UV 水效果实现

    Unity UV 水效果实现 Unity Water Shader 组件搭载 基本参数调节 所需图片 效果呈现 Unity Water Shader Shader "Custom/SeaWa ...

  9. [Unity Shader]凌波微步效果

    [Unity Shader]凌波微步效果 相信很多人都看过天龙八部,里面的段誉有一个技能就是凌波微步:移动的时候人先到,衣角跟随其后.说白了就是移动时有一个残影跟着他.下面先看下最终效果 下面我们看如 ...

最新文章

  1. AngularJS DEMO - 不断更新中
  2. linux系统中scanf函数,Linux下scanf宽度控制问题
  3. python复杂非线性方程_非线性方程python入门——屠龙刀
  4. qt设置鼠标追踪后,鼠标还是需要点击后才能变样式
  5. 广告流量分析之评价指标的选择(二)
  6. 多肉建议多久浇一次水?
  7. 编码基本功:工作中,大多数人不会举一反三
  8. LeetCode 38. Cound and Say
  9. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day33】—— 手撸算法2
  10. 关于基础微积分的结束语
  11. SDNU-1093.DNA排序
  12. java中快速排序的优化
  13. NBIOT开发(一):NBIOT模组以及芯片厂家都有哪些?
  14. 09. 软件测试工程师的核心竞争力是什么
  15. 编程中最神奇的数字,你知道吗?
  16. 场效应管(FET)总结:
  17. No.77 组合:回溯法
  18. 正则表达式基础知识---文本操作(尚学堂视频笔记)
  19. 移动互联网时代的大数据挖掘和精准营销
  20. 05mysql---函数

热门文章

  1. k8s报错503或者其他网络错误 Readiness probe failed: HTTP probe failed with statuscode: 503
  2. 07.26爬虫request模块之药监局学习笔记
  3. Choosing Teams
  4. Arduino 数码管 硬件 4位数码管 TM1637驱动芯片 库文件 示例
  5. Using PyTorch Version of YOLOV3/TinyYOLOV3
  6. 由于轮播图片超宽造成的影响
  7. 利用闲置的树莓派4B搭建一个NAS(二)
  8. Permissions 0777 for xxx are too open
  9. windows内核开发学习笔记十五:IRP结构
  10. NLP学习(二)—中文分词技术