用GL实现,性能要好一些

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class GLTest : MonoBehaviour
{//当添加到一个物体上时,从物体位置出发,绘制带色彩的射线public Color color;public float degree = 120;public float radius = 3.0f;public float radiusInterval = 1F;private Transform m_transform;static Material lineMaterial;/// <summary>/// 三角形的后两个顶点/// </summary>private List<Vector3> vertexs;/// <summary>/// 射线的发射方向/// </summary>private List<Vector3> dirs;RaycastHit hit;private float startTime = 0F;public float intervalTime = 0.1F;static void CreateLineMaterial(){if (!lineMaterial){//Unity内置着色器,用于绘制简单色彩Shader shader = Shader.Find("Hidden/Internal-Colored");//Shader shader = Shader.Find("Unlit/Color");lineMaterial = new Material(shader);lineMaterial.hideFlags = HideFlags.HideAndDontSave;// Turn on alpha blendinglineMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);lineMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);// Turn backface culling offlineMaterial.SetInt("_Cull", (int)UnityEngine.Rendering.CullMode.Off);// Turn off depth writeslineMaterial.SetInt("_ZWrite", 0);}}private void Awake(){m_transform = transform;vertexs = new List<Vector3>();//三角形的后两个顶点dirs = new List<Vector3>();//数目为degree+1float angle = -degree / 2F;for (float i = 0; i <= degree; i += radiusInterval){float currentAngle = angle + i;float rad = currentAngle * Mathf.Deg2Rad;dirs.Add(new Vector3(Mathf.Sin(rad), 0, Mathf.Cos(rad)));}startTime = Random.Range(0, intervalTime);}private void Update(){startTime += Time.deltaTime;if (startTime > intervalTime){vertexs.Clear();Vector3 pos = m_transform.position;foreach (var dir in dirs){Vector3 worldDir = m_transform.TransformDirection(dir);//将模型空间坐标转换为世界空间坐标if (Physics.Raycast(pos, worldDir, out hit, radius)){//将世界坐标转换为模型坐标后存到vertex中vertexs.Add(m_transform.InverseTransformPoint(hit.point));}else{vertexs.Add(dir * radius);}}startTime = 0F;}}// 当所有常规渲染完成后调用public void OnRenderObject(){CreateLineMaterial();lineMaterial.SetPass(0);GL.PushMatrix();GL.MultMatrix(transform.localToWorldMatrix);GL.Begin(GL.TRIANGLES);if (vertexs.Count > 0){for (int i = 0; i < dirs.Count-1; i++){GL.Color(color);GL.Vertex3(0, 0, 0);GL.Vertex3(vertexs[i].x, vertexs[i].y, vertexs[i].z);GL.Vertex3(vertexs[i + 1].x, vertexs[i + 1].y, vertexs[i + 1].z);}}GL.End();GL.PopMatrix();}
}

【Unity】可视化视野相关推荐

  1. 关于Untiy编写敌人可视化视野

    关于Untiy编写敌人可视化视野 最近遇到了一个编写可视化视野范围的问题,写出来了以后记录一下可视化视野的方法,因为用到的方法较多,我又想把原理讲解明白,所以本文的篇幅较长,如果你是没有耐心的话,建议 ...

  2. unity 可视化渲染管线_如何为高端可视化设置Unity的高清渲染管道

    unity 可视化渲染管线 Prior to Unite Copenhagen in September 2019, Unity collaborated with Lexus and its age ...

  3. Unity 可视化编辑工具 树节点 Tree Node Editor 四

    Unity 可视化编辑工具 树节点 Tree Node Editor 四 接上一篇Unity Behavior Tree Editor 行为树编辑器实现 三 上一篇主要讲解编辑器的使用,像关于自定义条 ...

  4. Unity可视化编程插件: Bolt,可以像UE4的蓝图那样啦

    一.Bolt介绍 Unity公众号上推了一篇文章:<Bolt可视化编程现已面向所有Unity用户免费开放> Bolt是Unity的一个可视化编程插件,通过节点式的编辑图表来制定逻辑,策划人 ...

  5. Unity可视化编程Visual Scripting学习笔记5:2D围绕一点正转反转(输入事件)

    总览 KanXiang QianJin 1.看向目标 需要一个一个参数:目标 2.横向移动 需要一个参数:速度 3.横向移动速度乘-1实现反向移动 3.1添加输入事件 ·  这里选择按下空格的瞬间为触 ...

  6. Unity摄像机视野切换

    项目场景: 提示:该脚本是挂载到相机上的,当相机视野看不到目标的时候,会自动切换不同视野来捕捉目标,直到看见目标物体为止 问题描述 用途:比如当我们相机跟随主角移动的时候,主角走到了一些角落挡住了相机 ...

  7. Unity 可视化脚本 Bolt插件 使用评测

    之前使用过Player Maker,就一直对类似的可以化脚本插件不太感冒,感觉很低级.最近看了Unity Asset Score排名,无意之中看到了Bolt还是第一名.(现在回想第一次听到它应该是在U ...

  8. Unity可视化编程插件bolt1.4.15 (一)bolt下载与安装

    (一)下载bolt 官网下载 百度网盘(提取码:pcyx ) (网盘的是我打包的,不需要其他步骤) 官网下载: ①导入后,点击import. ②然后会弹出一个窗口如图 在弹出的BOLT对话框中,点击& ...

  9. unity 锥形视野

    playmaker生态系统 vision--Dynamic Vision Cone Fov

最新文章

  1. c++中const与函数一起用的时候需要注意什么?
  2. 扩展资源服务器解决oauth2 性能瓶颈
  3. Oracle Lsnrctl - 关于oracle监听器的命令和解释
  4. SpringBoot中过滤器和监听器
  5. 学习vim的正确姿势!
  6. 使用java实现冒泡排序和选择排序
  7. sdoi r1前的注意事项
  8. curviloft插件怎么用_完结篇——你想要的逆天插件系列这里都有
  9. c语言程序设计多个文件,c语言如何单文件变多文件(2个文件),求大神帮忙!!...
  10. ccf_201712-02
  11. C语言大数阶乘的求法
  12. java 静态方法 非静态变量_深度分析:Java 静态方法/变量,非静态方法/变量的区别,今天一并帮你解决!...
  13. 在线JSON转Excel工具
  14. Mybatis提高查询效率的方式
  15. html插入图片出现红叉,网页上的图片显示为红叉的解决方法
  16. js截取视频第一帧作为封面
  17. HashMap-链表与红黑树转换触发条件
  18. 电流互感器的一些计算
  19. 一、Linux 教程-基础
  20. 定义一个圆类(Circle)

热门文章

  1. 三亚旅游攻略!三亚亚龙湾五号度假别墅酒店攻略
  2. 地图序列等级·回合游戏文案
  3. 计算机成瘾综合症的表现有,《小心“网络成瘾综合症”》教学设计
  4. 【数据分析与智能计算】第二章: 综合练习题及答案讲解
  5. coreldraw矫正两张图_利用CorelDRAW矫正图像
  6. IPv6是什么意思?哪款堡垒机支持IPv6资产纳管?
  7. 莫氏硬度6级以上,手机玻璃其实很硬【转】
  8. findbugs简介
  9. 进度条,message
  10. VSCode远程连接时Remote host key has changed, port forwarding is disabled