最近再做一个光线类的小游戏,时间不太够写算法的,但是不能断对算法的研究,周六日补吧~

今天说说写光线的时候遇到的一个问题,在使用LineRender组件的时候,一旦在顶点数组中多加一个点从而增加一条线段的时候会发生光线头粗尾细的情况,效果很差,从网上找的资料貌似是绘制三角面片的问题,具体原因我也不太清楚,于是我打算用一堆LineRender对多个线段进行渲染,所以自己封装了一个LineRenderGroup类,接口不一定很完善,主要为项目提供接口的,如果大家有不同的需要可以自己加,至于以前使用一个渲染器出问题的图片我懒得贴了,懒人创造世界嘛~

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
/// <summary>
/// 线性渲染器组类
/// 用来绘制多条线段,避免了一个渲染器发生的头粗尾短的现象
/// </summary>
public class LineRenderGroup : MonoBehaviour {private Transform _transform;private int size = 0;                                           //允许存在的线段的数量private List <LineRenderer> segmentList;                  //线段存放的集合private const string objectName = "Segment";private Material lightMaterial;private float thickness = Gloabal.lineWidth;public float Thickness {get {return thickness;}set {thickness = value;SetSegmentThickness ();}}void Awake () {_transform = transform;segmentList = new List<LineRenderer> ();lightMaterial = Resources.Load ("LightShader", typeof (Material)) as Material;}//设置线段顶点的方法public void SetSegment (int index, Segment segment) {segmentList [index].SetPosition (0, segment.startPoint);segmentList [index].SetPosition (1, segment.endPoint);}//设置整体线段粗细的方法public void SetSegmentThickness () {for (int i = 0; i < segmentList.Count; i++) {segmentList [i].SetWidth (thickness, thickness);}}//设置光线颜色(该方法未实现)!!public void SetLightColor (Color c) {for (int i = 0; i < segmentList.Count; i++) {segmentList [i].material.color = c;}}//设置允许存在的顶点的数量public void SetSegmentCount (int count) {this.size = count;if (size > segmentList.Count) {AddSegment (size - segmentList.Count);}if (size < segmentList.Count) {RemoveSegment (segmentList.Count - size);}}//添加线段的方法private void AddSegment (int addCount) {for (int i = 0; i < addCount; i++) {GameObject g = new GameObject (objectName);g.transform.SetParent (_transform);LineRenderer lineRender = g.AddComponent <LineRenderer> ();lineRender.SetWidth (thickness, thickness);lineRender.SetVertexCount (2);lineRender.SetPosition (0, Vector3.zero);lineRender.SetPosition (1, Vector3.zero);lineRender.material = lightMaterial;segmentList.Add (lineRender);}}//移除线段的方法(采用将线段两个端点设置为同一点的方法,也可以使用对象池回收多余的LineRender)private void RemoveSegment (int increaseCount) {int length = segmentList.Count;for (int i = 0; i < increaseCount; i++) {segmentList [length - i - 1].SetPosition (0, Vector3.zero);segmentList [length - i - 1].SetPosition (1, Vector3.zero);}}
}

修改颜色的方法的bug解决了,和代码无关,我选择的shader的问题~

效果图:

Unity之线性渲染器相关推荐

  1. Unity API-----Renderer(渲染器)

    Unity API-----Renderer(渲染器) 官方文档阅读记录 版本 : 2019.3 官方文档传送门 Renderer是UnityEngine命名空间下的一个类. Renderer继承于C ...

  2. 《UnityAPI.SkinnedMeshRenderer蒙皮网格渲染器》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+BakeMesh+bones+立钻哥哥++OK++)

    <UnityAPI.SkinnedMeshRenderer蒙皮网格渲染器> 版本 作者 参与者 完成日期 备注 UnityAPI_SkinnedMeshRenderer_V01_1.0 严 ...

  3. 【Unity入门计划】基本概念(6)-精灵渲染器 Sprite Renderer

    目录 官方文档 1 Sprite 精灵 2 Sprite Renderer 精灵渲染器 2.1 Sprite 精灵 2.2 Color 着色 2.3 Filp 翻转 2.4 Draw Mode 当前的 ...

  4. Unity Trail Renderer(拖尾渲染器)

    @[TOC](Unity Trail Renderer(拖尾渲染器)) 介绍 Trail Renderer(拖尾渲染器)是Unity源生自带的组件,直接添加就好. 使用拖尾渲染器 (trail ren ...

  5. unity绘制管道_【译文】unity可编程渲染管道#1——自定义管道

    前言 Scriptable Render Pipeline定制流水线控制渲染创建管道资产和实例.剔除,过滤,排序,渲染.保持记忆清洁.提供良好的编辑体验.这是涵盖Unity可编写脚本的渲染系列教程的第 ...

  6. Android 颜色渲染(五) LinearGradient线性渲染

    版权声明:本文为博主原创文章,未经博主允许不得转载. Android 颜色处理(五) LinearGradient线性渲染 相信很多人都看过歌词同步的效果, 一是竖直方向的滚动,另一方面是水平方面的歌 ...

  7. 显示栅格数据的渲染器

    栅格数据的渲染方法 栅格数据集可在地图中以多种不同的方式进行显示或渲染.渲染是一个显示数据的过程.栅格数据集的渲染方式取决于它所包含的数据的类型以及您要显示的内容.某些栅格包含一个 ArcMap 将自 ...

  8. 纯c++实现光线追踪渲染器

    这是一个几年前用c++实现的光线追踪渲染器,使用cpu多线程计算,没有使用任何gpu加速.最后画面的呈现也是使用的gdi绘制,没有使用d3d或ogl.不同于某些基于shader的光线追踪限制性太大,对 ...

  9. SoftRendererRenderPipeline(从迷你光栅化软渲染器的实现看渲染流水线)

    简介 这是可能一篇没有什么实际作用的文章,因为没有任何shader效果实现,整篇文章到最后,我只实现了一个旋转的立方体(o(╯□╰)o,好弱),和游戏引擎渲染的万紫千红的3D世界显得有很大落差,仿佛一 ...

最新文章

  1. oschina多媒体工具
  2. 对字符串数组排序,使所有变位词都相邻(C++)
  3. JS删除String里某个字符的方法
  4. 一个给计算机写程序的人是谁,如果计算机是中国人发明的 写代码会是一种什么情况 程序员看了都头疼...
  5. FinTech浪潮已到,五大金融场景将迎变革
  6. java取非_java运算符 与()、非(~)、或(|)、异或(^)
  7. jquery Datatables 行数据删除、行上升、行下降功能演示
  8. 命令查看IPV6的IP,路由,邻居信息
  9. 摘来的去视频网站的广告方法
  10. java计算机毕业设计服装连锁店后台管理系统MyBatis+系统+LW文档+源码+调试部署
  11. 【模拟器】网工福音!华三模拟器HCL升级,部分功能超越eNSP和EVE!
  12. 统计推断——假设检验中 p 值的含义具体是什么?
  13. 自学python工资-Python薪资待遇到底是多少?老男孩python学习
  14. 大泡沫.一切从广场协议开始 俞天任 读后总结
  15. shp文件格式说明(二)
  16. FastReport开发指南
  17. uni-app 添加到“用其他应用打开”中、app加入系统分享列表、获取分享的文件
  18. linux c 网络编程与信号量,详解Linux多线程使用信号量同步
  19. 决胜机房奥林匹克之LCA篇
  20. 团体程序设计天梯赛 L1-题目

热门文章

  1. 小心肝队-冲刺日志(第七天)
  2. 中国科学技大学2014年数学分析考研试题
  3. 云主机装黑果实践(5):重得到镜像和继续强化前置启动过程
  4. BeatSaber节奏光剑插件开发官方教程1-创建一个插件模板
  5. python运维开发之第二天
  6. 鲜枣课堂-文章分类目录(2019.7.28更新)
  7. 计算机网络面试题总结之一
  8. 中国品牌授权市场规模分析:2020年中国授权商品零售额为1106亿元,同比增长11.5%[图]
  9. Java weeb 入门的第一个坑MySql与Navicat的error
  10. PicPick 5.1.3 中文版,一个全功能的屏幕截图工具,图像编辑器,颜色选择器