注意:用Debug画的线会存在穿透问题

没啥好解释的,直接看代码:

  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4.  
  5. /*
  6. * 找不到设置线宽的方法,目前的解决方法就是用画矩形代替画线来实现线的粗细
  7. */
  8.  
  9. /// <summary>
  10. /// 必须将此脚本放在摄影机上才能看到绘画内容,DebugDraw可以不用,但DebugDraw画的内容
  11. /// 只能在编辑模式下看得到。
  12. /// </summary>
  13. [RequireComponent(typeof(Camera))]
  14. public class DrawTrack: MonoBehaviour
  15. {
  16. /// <summary>
  17. /// 画笔的材质
  18. /// </summary>
  19. public Material Material;
  20.  
  21. /// <summary>
  22. /// 绘画该目标的移动路径
  23. /// </summary>
  24. public Transform Target;
  25.  
  26. /// <summary>
  27. /// 画笔平滑度
  28. /// </summary>
  29. public float Smooth = ;
  30.  
  31. /// <summary>
  32. /// 是否也在编辑器里绘画出线
  33. /// </summary>
  34. public bool DebugDraw = true;
  35.  
  36. /// <summary>
  37. /// 存放移动路径的点的集合
  38. /// </summary>
  39. private List<Vector3> path;
  40.  
  41. /// <summary>
  42. /// 目标的最后一个移动点
  43. /// </summary>
  44. private Vector3 lastPosition;
  45.  
  46. void Start()
  47. {
  48. if (Material == null)
  49. {
  50. Debug.LogError("请先赋予该脚本 Material !!");
  51. }
  52.  
  53. if (Target == null)
  54. {
  55. Debug.LogError("请设置目标");
  56. }
  57.  
  58. path = new List<Vector3>();
  59. lastPosition = Target.position;
  60. }
  61.  
  62. void Update()
  63. {
  64. if (Vector3.Distance(Target.position, lastPosition) > Smooth)
  65. {
  66. path.Add(Target.position);
  67. lastPosition = Target.position;
  68. }
  69. }
  70.  
  71. /// <summary>
  72. /// GL绘图必须在这个函数中进行
  73. /// </summary>
  74. void OnPostRender()
  75. {
  76. GL.PushMatrix();
  77. Material.SetPass();
  78. // 若要绘制2D线段,则取消注释GL.LoadOrtho();
  79. //GL.LoadOrtho();
  80. GL.Begin(GL.LINES);
  81.  
  82. /*******在此处进行绘画*********/
  83. DrawLines(path.ToArray());
  84.  
  85. GL.End();
  86. GL.PopMatrix();
  87. }
  88.  
  89. private void DrawLine(Vector3 start, Vector3 end)
  90. {
  91. GL.Vertex3(start.x, start.y, start.z);
  92. GL.Vertex3(end.x, end.y, end.z);
  93. if (DebugDraw)
  94. {
  95. Debug.DrawLine(start, end, Color.red, );
  96. }
  97. }
  98.  
  99. private void DrawLines(Vector3[] points)
  100. {
  101. if (points.Length == )
  102. {
  103. return;
  104. }
  105.  
  106. for (int i = ; i < points.Length - ; ++i)
  107. {
  108. var start = points[i];
  109. var end = points[i + ];
  110. GL.Vertex3(start.x, start.y, start.z);
  111. GL.Vertex3(end.x, end.y, end.z);
  112. if (DebugDraw)
  113. {
  114. Debug.DrawLine(start, end, Color.red, );
  115. }
  116. }
  117. }
  118.  
  119. public void ClearLine()
  120. {
  121. path.Clear();
  122. }
  123.  
  124. }

用GL画出人物的移动路径的更多相关文章

  1. 【机器学习】【条件随机场CRF-3】条件随机场的参数化形式详解 + 画出对应的状态路径图 + 给出对应的矩阵表示

    1.条件随机场概念CRF,Conditional Random Field,是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模式,其特点是假设输出随机变量构成马尔可夫随机场. 条件随机场用 ...

  2. Android中Google地图路径导航,使用mapfragment地图上画出线路(google map api v2)详解

    在这篇里我们只聊怎么在android中google map api v2地图上画出路径导航,用mapfragment而不是mapview,至于怎么去申请key,manifest.xml中加入的权限,系 ...

  3. 通通玩blend美工(8)——动态绘制路径动画,画出个萌妹子~

    原文:通通玩blend美工(8)--动态绘制路径动画,画出个萌妹子~ 2年前我在玩Flex的时候就一直有一个疑问,就是如何来实现一个蚊香慢慢烧完的Loading动画呢? 刚经历了某甲方高强度一个月的洗 ...

  4. H5坦克大战之【画出坦克】

    今天是个特殊的日子,圣诞节,也是周末,在这里先祝大家圣诞快乐!喜庆的日子,我们可以稍微放松一下,扯一扯昨天雷霆对战凯尔特人的比赛,这场比赛大威少又双叒叕拿下三双,而且是一个45+11+11的超级三双, ...

  5. 使用CSS3画出一个叮当猫

    刚学习了这个案例,然后觉得比较好玩,就练习了一下.然后发现其实也不难,如果你经常使用PS或者Flash的话,应该就会知道画个叮当猫是很容易的事,至少我是这么觉得.但是,用CSS3画出来确实是第一次接触 ...

  6. 教你用SVG画出一条龙

    先看demo,九十七度 其实使用svg画出这条龙很简单,关键不在于怎么使用svg,而在于你的美术功底,哈哈. 好吧,当然基础是不能忽略的,先看下这条龙的代码: <svg id="lon ...

  7. java绘图原理------在窗口界面(或面板上)画出一张或多张图片问题解决方法

    /** *@author blovedr * 功能: java绘图原理------在窗口界面(或面板上)画出一张或多张图片问题解决方法 * 日期: 2018年4月28日     16:20 * 注释: ...

  8. Android教程:在百度地图上画出轨迹

    [日期:2013-04-14] 来源:Linux社区  作者:crazyxin1988 [字体:大 中 小]     接着上面的项目<Android访问webservice.客户端登录注册> ...

  9. 使用CAShapeLayer的path属性与UIBezierPath画出扫描框

    1.CAShapeLayer CAShapeLayer具有path属性,(是CGPath对象),可以使用这个属性与UIBezierPath画出想要的图形.该子类根据其fill color和stroke ...

随机推荐

  1. SQLServer2012自增列值跳跃的问题

    2012引入的新特性,重启之后会出现值跳跃的问题,如: 解决的方案: 1.使用序列(Sequence),2012引入的和Oracle一样的特性. 2.更改SQLServer启动服务的启动参数,增加[- ...

  2. 使用Github Pages创建自己的网站

    这是一篇使用Github Pages创建自己网站的教程,操作很简单,相信,亲们肯定一学就会,但是大家也要有一定的github基础呀,所以小编给大家附上一个链接(http://www.cnblogs.c ...

  3. Subime学习记录

    一.快捷键 注:快捷键这种东西没有必要刻意去记,自己需要就去查查,经常用的自然熟了,关键是时刻保持提高效率的意识,才会主动去发现快捷键. 1.Ctrl + F:查找 2.F12:根据函数定位函数声明( ...

  4. 常用sql语句整理[SQL Server]

    1. 存储过程 CREATE PROCEDURE [dbo].[bbs_move_createtopic] @fid smallint, @iconid smallint, @curtid INT O ...

  5. NYOJ 16 矩形嵌套(经典动态规划)

    传送门 Description 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于 ...

  6. 获取URL列表,设置代理请求URL,https的加密方式处理

    做了一个测试的一个小工具,需求如下: 1.有一批URL列表,需要知道哪个URL请求响应内容中包含http:关键字的. 2.url请求包括http和https 2种协议 3.要部署在linux服务器上, ...

  7. Win10 Theano Install Guide

    basic install guide 1. download miniconda 2. conda install libpython mingw 3. conda install theano n ...

  8. 【突发问题】昨天更新了OS X EI Capitan 出现了Cocoapods的 pod :command not found

    然后我百度:http://www.jianshu.com/p/6ff1903c3f11 果真,我想想然后执行了作者说的第一步,删除本地Cocoapods文件,然后发现我执行不了接下来的几个步骤了.所以 ...

  9. 回调函数通俗解析(之前看了很久都不理解,今天终于ok啦)

    自学jquery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗.迅速google之,发现原来中文翻译成回调.也就是回调函数了.不懂啊,于是在google回调函数,发现网上的中文解释实在是 ...

  10. .Net Framework中的标准委托和事件_1

    .Net Framework中的标准委托,已经定义在命名空间System中, namespace System { public delegate void EventHandler(object s ...