加载中…
个人资料
spiritwolf
spiritwolf
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,227
  • 关注人气:32
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

unity3d画线插件Vectrosity 2.0使用总结

(2014-01-20 23:53:29)
标签:

unity3d

画线

vectrosity2.0

分类: unity3d
1.单个线物体,无论线段多少个,只占一个draw call(文档里说的)。

2.实时改画出来的线,只用在start里把线new出来,注意点向量数组用一个私有变量数组,然后在update里改这个向量数组就可以了,最后在lateUpdate里line.Draw3DAuto就可以了。
2.1注意,如果在new出线来的时候写的是new Vector[多少],那么这个数组你就丢了,没有指针指向它了,在update里就没法再改这条线了。
2.2如果你在update写new线出来,很快就死机,因为你是每帧不停的造一条线出来。

3.line.Draw()
line.Draw3DAuto()可以自动适应相机的角度位置的变化,不用再写SetCamera()

4.注意画闭合曲线,数组长度加1的问题。

5.画曲线图可以参考范例场景:高光

以上是看文档和看它自带案例文件的总结,我把它的英文文档翻译了一下,我只翻译了我觉得比较有用的,没有全翻译。

除此之外,这个插件还有另外几个package,比如那个画线的2D坦克,我感觉没什么用,我把上传的插件资源包地址发出来,大家可以自己去研究。

Vectrosity 2.0 :


http://ishare.iask.sina.com.cn/f/66513352.html

Vectrosity 2.3 :


http://ishare.iask.sina.com.cn/f/66513400.html

==============================Vectrosity2.0 Documentation部分翻译==============================

GetPoint

有时你想要得到沿VectorLine上一个点的确切距离。比如,你需要这个点为了用MakeSplineMakeEllips,或其他函数,绘制条线让一个物体沿线漫游。使用GetPoint函数,首先创建一个2D线,接着调用GetPoint函数,得到沿线距离的点(单位是像素)。GetPoint函数返回值是一个Vector2的点,使用屏幕坐标距离。(Vector3线,看GetPoint3D) 这个能在任何线上工作,无论是连续或是离散的线。比如下面的脚本,GUIText物体在沿线150像素的地方:

public GUIText textObject ;

    void Start() {

        VectorLine curveLine new VectorLine("Curve", new Vector2[100], Color.yellow, null, 1.0f, LineType.Continuous);

        Vector2[] v2s new Vector2(100, 100), new Vector2(300, 75), new Vector2(300, 300), new Vector2(450, 375) };

        curveLine.MakeCurve(v2s);

        curveLine.Draw();

        textObject.transform.position Vector3.zero;

        textObject.pixelOffset curveLine.GetPoint(150); // 在此行设置的距离

}

这个距离被限制在0到线的长度之间(查看GetLength)。所以,如果你指定距离为0,那么结果也是0(也就是线的起始点),如果你指定的距离值大于线的长度的话,那么距离值为线的长度(也就是线的结束点)。

GetPoint01

此函数工作方式与GetPoint相同,只是此函数使用规格化的坐标从0.0到1.0。换句话说,这是一个百分比的绝对值。当你不关心线的实际长度时非常有用,仅仅需要一个点在线长的相对位置值。你可用在脚本中用此函数代替GetPoint函数,它将设置GUIText物体在线的中间:

textObject.pixelOffset = curveLine.GetPoint01(0.5f);

参看VectrosityDemos资源包中的SplineFollow案例,其中的脚本使物体沿线移动就是使用的GetPoint01函数。

GetPoint3D

如果你需要3D线上的点,那么你可用使用GetPoint3D。它的工作方式与GetPoint相同,只不过它使用的是Vector3点画线。GetPoint3D函数返回值是一个Vector3点使用的是世界空间坐标,距离使用的单位是世界单位。

GetPoint3D01

与GetPoint01工作方式相同,只是使用的Vector3点绘制线,返回值是Vector3,使用的是世界空间坐标和世界单位。

GetLength

如果你不使用GetPoint01或者GetPoint3D01函数,你也许需要线到底有多长。这时你可用使用GetLength函数。

var myLineLength myLine.GetLength();

此函数的返回值是一个float值,如果是2D线则是像素单位长的线长,如果是3D线则是返回的在世界尺寸单位下的线长。

SetDistances

使用GetPoint那几个函数,当你改变了线的点,但是线却没有变化,这是为什么?

一个VectorLine的分段长度是在第一次使用GetLength或者GetPoint那几个函数时编译的。然而线的分段距离不会在你改变了线的点后自动调整。使用SetDistances是推荐方式,你不需要在Update函数中使用GetPoint那几个函数,这样非常占用CPU。你只需要在你更新了线的点之后调用SetDistances函数,但是要在你再次调用GetLength或者GetPoint那几个函数之前使用SetDistances函数。这样线的分段距离就会自动重编译。

void Start () {

        Vector2[] points = Vector2.zeronew Vector2(100100), new Vector2(200200};

        VectorLine line = new VectorLine("Line"pointsnull1.0f,LineType.Continuous);

        line.Draw();

        print(line.GetLength());

        points[1= new Vector2(150200);

        line.SetDistances();

        print(line.GetLength());

        line.Draw();

}

。。。省略 。。。

MakeCurve

此函数可以在现有的VectorLine物体上创建贝塞尔曲线。这些曲线基于2个锚点和2个控制点创建。在创建矩形/圆形/椭圆部分,你已经了解了通常的用法。

函数的使用格式:

myLine.MakeCurve (curvePoints, segments, index);

myLine.MakeCurve (anchor1, control1, anchor2, control2, segments, index);

    在第一种情况,“curvePoints”是一个Vector2或者Vector3 类型的有4个元素的数组,其中0号元素是描点,1号元素是第一个控制点,2号元素是第2个描点,3号元素是第2个控制点。第2种函数重载,描点和控制点是作为单独的Vector2s或者Vector3s写入。2D是以屏幕像素作为单位,3D线则是用世界坐标体系单位。

    segments是一个int变量,如同在MakeCircle/MakeEllipse函数中使用:越多的分段,线也就越平滑。此外,Vector2数组的长度要比分段数大1以用于连续的线,或者使用离散线时分段为偶数分段数。最短的函数重载格式:

myLine.MakeCurve (curvePoints);

index选项也是一个常用的选项,0是其默认值。其次,在单个VectorLine物体上创建离散的多个分开曲线,如果VectorLine使用连续的线那曲线间会相互连接。

如果你不熟悉贝塞尔曲线如何使用,打开VectrosityDemos资源包里的Curve(曲线)场景。DrawCurve脚本带控制手柄的贝塞尔曲线,SimpleCurve脚本使用4个点的数组绘制一个简单的2D曲线。

MakeSpline

此函数与MakeCurve相似,使用此函数也可用用现有的VectorLine物体制造曲线。主要的不同在于你可使用一个任意数量点的数组,MakeSpline函数将通过这个点数组来创建曲线。(如果你熟悉三角刨分样条线,那你可能就能猜到如何使用MakeSpline函数) 样条线可用打开如同MakeCurve一样,也可用是闭合的。

函数使用的格式:

myLine.MakeSpline (splinePoints, segments, index, loop);

只有第1参数是必须要指定的:

myLine.MakeSpline (splinePoints);

splinePointsVector2或者Vector3数组,数组长度没有限制。样条线没有控制点。

如果你的VectorLine物体使用的是100个点,如果使用的是连续类型的线,那么样条线的分段数(segments)是99,如果是使用的离散类型的线,那么分段是50。“loop”控制样条线是否是闭合的曲线。为真则是闭合。


================================================================================================


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有