用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 ...
随机推荐
- PostgreSQL Reading Ad Writing Files、Execution System Instructions Vul
catalog . postgresql简介 . 文件读取/写入 . 命令执行 . 影响范围 . 恶意代码分析 . 缓解方案 1. postgresql简介 PostgreSQL 是一个自由的对象-关 ...
- STL之lower_bound和upper_bound
ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法返回一个非递减序列[first, la ...
- 关于adb连接手机offline的问题解决
win7-64位系统.对于windows系统,adb devices 显示offline一般可能有两个原因: 1 )端口被占用. 解决方式是:查找端口号,结束占用进程: adb nodaemon se ...
- 【Alpha版本】 第九天 11.17
一.站立式会议照片: 二.项目燃尽图: 三.项目进展: 成 员 昨天完成任务 今天完成任务 明天要做任务 问题困难 心得体会 胡泽善 完成我要应聘的详情显示,解决头像不能显示的问题,完成了报名及取消操 ...
- linux cat 的深入用法
命令基于centos6系列,翻译基于官方原文的意思. catcat - concatenatefiles 1117.www.qixoo.qixoo.com and print on the stand ...
- UVA11181Probability|Given(条件概率)
题目链接 紫书P327 题意:有n个人准备去超市逛,其中第i个人买东西的概率是 Pi .逛完以后你得知有 r 个人买了东西.根据这一信息,计算每个人实际买东西的概率.输入 n ( 1 <= n ...
- RMQ模板
RMQ:范围最小值问题.给出一个n个元素的数组A1,A2,...,An,设计一个数据结构支持查询操作Query(L,R):计算min{AL,AL+1,...,AR}. 每次用一个循环来求最小值显然不够 ...
- 快捷键&小技巧&备忘录
shift+鼠标滚轮:实现左右移动 alt+鼠标左键双击:打开属性 chrome中在F12下的Element中,可以先选中某一项,可以直接按住F2进行编辑 chrome中element的右下方我们可以 ...
- RequestDemo01
package com.etc.requestdemo; import java.io.IOException;import java.io.PrintWriter; import javax.ser ...
- UI学习之常用方法(续)
UIView 1. UIView *vv = [[UIView alloc]initWithFrame:CGRectMake(100,100, 100, 30)]; [vv.layer setB ...