用GL画出人物的移动路径
注意:用Debug画的线会存在穿透问题

没啥好解释的,直接看代码:
using UnityEngine;
using System.Collections;
using System.Collections.Generic; /*
* 找不到设置线宽的方法,目前的解决方法就是用画矩形代替画线来实现线的粗细
*/ /// <summary>
/// 必须将此脚本放在摄影机上才能看到绘画内容,DebugDraw可以不用,但DebugDraw画的内容
/// 只能在编辑模式下看得到。
/// </summary>
[RequireComponent(typeof(Camera))]
public class DrawTrack: MonoBehaviour
{
/// <summary>
/// 画笔的材质
/// </summary>
public Material Material; /// <summary>
/// 绘画该目标的移动路径
/// </summary>
public Transform Target; /// <summary>
/// 画笔平滑度
/// </summary>
public float Smooth = ; /// <summary>
/// 是否也在编辑器里绘画出线
/// </summary>
public bool DebugDraw = true; /// <summary>
/// 存放移动路径的点的集合
/// </summary>
private List<Vector3> path; /// <summary>
/// 目标的最后一个移动点
/// </summary>
private Vector3 lastPosition; void Start()
{
if (Material == null)
{
Debug.LogError("请先赋予该脚本 Material !!");
} if (Target == null)
{
Debug.LogError("请设置目标");
} path = new List<Vector3>();
lastPosition = Target.position;
} void Update()
{
if (Vector3.Distance(Target.position, lastPosition) > Smooth)
{
path.Add(Target.position);
lastPosition = Target.position;
}
} /// <summary>
/// GL绘图必须在这个函数中进行
/// </summary>
void OnPostRender()
{
GL.PushMatrix();
Material.SetPass();
// 若要绘制2D线段,则取消注释GL.LoadOrtho();
//GL.LoadOrtho();
GL.Begin(GL.LINES); /*******在此处进行绘画*********/
DrawLines(path.ToArray()); GL.End();
GL.PopMatrix();
} private void DrawLine(Vector3 start, Vector3 end)
{
GL.Vertex3(start.x, start.y, start.z);
GL.Vertex3(end.x, end.y, end.z);
if (DebugDraw)
{
Debug.DrawLine(start, end, Color.red, );
}
} private void DrawLines(Vector3[] points)
{
if (points.Length == )
{
return;
} for (int i = ; i < points.Length - ; ++i)
{
var start = points[i];
var end = points[i + ];
GL.Vertex3(start.x, start.y, start.z);
GL.Vertex3(end.x, end.y, end.z);
if (DebugDraw)
{
Debug.DrawLine(start, end, Color.red, );
}
}
} public void ClearLine()
{
path.Clear();
} }
用GL画出人物的移动路径的更多相关文章
- 【机器学习】【条件随机场CRF-3】条件随机场的参数化形式详解 + 画出对应的状态路径图 + 给出对应的矩阵表示
1.条件随机场概念CRF,Conditional Random Field,是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模式,其特点是假设输出随机变量构成马尔可夫随机场. 条件随机场用 ...
- Android中Google地图路径导航,使用mapfragment地图上画出线路(google map api v2)详解
在这篇里我们只聊怎么在android中google map api v2地图上画出路径导航,用mapfragment而不是mapview,至于怎么去申请key,manifest.xml中加入的权限,系 ...
- 通通玩blend美工(8)——动态绘制路径动画,画出个萌妹子~
原文:通通玩blend美工(8)--动态绘制路径动画,画出个萌妹子~ 2年前我在玩Flex的时候就一直有一个疑问,就是如何来实现一个蚊香慢慢烧完的Loading动画呢? 刚经历了某甲方高强度一个月的洗 ...
- H5坦克大战之【画出坦克】
今天是个特殊的日子,圣诞节,也是周末,在这里先祝大家圣诞快乐!喜庆的日子,我们可以稍微放松一下,扯一扯昨天雷霆对战凯尔特人的比赛,这场比赛大威少又双叒叕拿下三双,而且是一个45+11+11的超级三双, ...
- 使用CSS3画出一个叮当猫
刚学习了这个案例,然后觉得比较好玩,就练习了一下.然后发现其实也不难,如果你经常使用PS或者Flash的话,应该就会知道画个叮当猫是很容易的事,至少我是这么觉得.但是,用CSS3画出来确实是第一次接触 ...
- 教你用SVG画出一条龙
先看demo,九十七度 其实使用svg画出这条龙很简单,关键不在于怎么使用svg,而在于你的美术功底,哈哈. 好吧,当然基础是不能忽略的,先看下这条龙的代码: <svg id="lon ...
- java绘图原理------在窗口界面(或面板上)画出一张或多张图片问题解决方法
/** *@author blovedr * 功能: java绘图原理------在窗口界面(或面板上)画出一张或多张图片问题解决方法 * 日期: 2018年4月28日 16:20 * 注释: ...
- Android教程:在百度地图上画出轨迹
[日期:2013-04-14] 来源:Linux社区 作者:crazyxin1988 [字体:大 中 小] 接着上面的项目<Android访问webservice.客户端登录注册> ...
- 使用CAShapeLayer的path属性与UIBezierPath画出扫描框
1.CAShapeLayer CAShapeLayer具有path属性,(是CGPath对象),可以使用这个属性与UIBezierPath画出想要的图形.该子类根据其fill color和stroke ...
随机推荐
- Disciz!NT开源资源汇总
https://github.com/easonjim/dnt/releases/tag/0
- PHP FastCGI RCE Vul
catalog . Introduction . nginx文件类型错误解析漏洞 . 针对直接公网开放的Fast-CGI攻击 . 通过FCGI API动态修改php.ini中的配置实现RCE 1. I ...
- c/c++中#和##链接符号的用法
#include <stdio.h> #include <stdlib.h> /* 英语原文: In function-like macros, a # operator be ...
- tomcat 和servlet之间的关系
http://tomcat.apache.org/whichversion.html pache Tomcat Versions Apache Tomcat® is an open source so ...
- spring jdbc分离数据库代码和java代码
读取配置文件类 package com.eshore.ismp.contract.sql; import java.io.FileInputStream; import java.io.FileNot ...
- C++ 之const Member Functions
Extraction from C++ primer 5th Edition 7.1.2 The purpose of the const that follows the parameter lis ...
- 【原】http缓存与cdn相关技术
摘要:最近要做这个主题的组内分享,所以准备了一个星期,查了比较多的资料.准备的过程虽然很烦很耗时间,不过因为需要查很多的资料,因此整个过程下来,对这方面的知识影响更加深刻.来来来,接下来总结总结 一 ...
- 使用Navicat导入导出表的数据做测试(转载)
当我们对MySQL数据库进行了误操作,造成某个数据表中的部分数据丢失时,肯定就要利用备份的数据库,对丢失部分的数据进行导出.导入操作了.Navicat工具正好给我们提供了一个数据表的导入导出功能. 1 ...
- Socket通信的理解
1.Socket(套接字) 是支持TCP/IP通信的基本操作单元.包含通信的五种必须信息:通信使用的协议,本机IP和端口,远程IP和端口. 2. 1.TCP连接 手机能够使用联网功能是因为手机底层实现 ...
- 2015年最全的移动WEB前端UI框架
目前,众多互联网公司APP都嵌入了大量的HTML5,移动端的开发越来越重视,HTML5的运用场景也越来越多了.在移动WEB开发的过程中,使用合适的移动WEB UI框架可以大大提升我们的开发效率.下面P ...