@废话在前
Curvy是一个非常强大的第三方插件,用于在unity中快速生成游戏轨道,关于此插件的教程网上几乎找不到,官方的视频教程是一个讲法式英语的人讲的,不但视频模糊让人听的简直爆炸,我反正听了一半差点砸电脑了,最后主要还是靠折腾demo结合视频把主要的用法弄明白了。这里结合官方demo中的几个介绍这个插件的用法,其实很简单,学会后可以轻松拖出一条甚至多条复杂的轨迹,然后可以让物体沿着轨迹运动,更强大的是可以在轨迹上动态生成相应的赛道和轨道,可以控制刚体在轨道上自由运动。
Unity资源商店的curvy插件链接(有视频教程和相应论坛):https://www.assetstore.unity3d.com/cn/#!/content/7038
先上几张官方demo炫酷效果的高清截图:
(1) 第一张图是官方demo的第一个SplineController.sence,展示了飞行器扰简单的圆轨迹循环运动;
(2) 第二张图展示了生成轨迹并声称轨迹对应的轨道,飞行器沿轨迹在轨道内穿梭;(3) 第三张图展示了生成轨迹轨道,并控制一个刚体在轨道上自由滚动;
一、导入插件
在工程中选择custom package,导入curvy插件,我这里有个v2.0.2版本的curvy插件供下载,这是个付费插件,还挺贵的,免费送大家: https://pan.baidu.com/s/1i4SYJHV 如果下载不了请回复邮箱地址我发给您。
可以运行demo看一下可以实现那些效果,还是很炫酷的。
二、制作Spline运动轨迹
1.新建一个场景,会发现导入插件后工程中的场景scene窗口出现一些操作按钮:
2.生成轨迹
控制点之间的插值有三种选择,linear线性插值就是控制点之间用直线链接,另外还有两种曲线插值必入塞北尔曲线,根据需要进行选择;
控制点生成的曲线轨迹可以选择闭合或不闭合;
3.添加沿轨迹运动的游戏物体
轨迹制作好后现在添加沿轨迹运动的游戏物体,比如最简单的添加一个圆球。插件demo中提供了一个绑定物体和spline轨迹对象的脚本,在project面板搜索splinecontroller脚本,拖动到圆球物体上,然后将上面制作好的curvy spline拖动赋给splinecontroller中的变量进行绑定,同时设置一下运动速度speed,默认是0看不到效果,然后运行一下就可以看到圆球沿着轨迹开始移动了。当然这个脚本的功能是可以自定义的,继承自curvycontroller脚本。
三、根据Spline轨迹生成封闭运动轨道(重点来了,generator的使用!)
上面只是利用spline轨迹控制物体运动,但实际上有了这条轨迹数据,我们可以生成相应的跑道,赛道等等,甚至可以利用这条轨迹数据生成任何想要的轨迹形状的物体场景。
轨道的生成此插件提供了一个generator编辑器,在spline轨迹提供形状数据的基础上,添加材质数据模块,轨道横截面编辑模块来自由控制赛道的形状状态和材质。
1.新建generator组件
首先右键(最好就在curvy spline下新建作为子物体了) -->curvy --> generaotr新建一个generaotr对象,当然也可以点击sence窗口中的按钮新建,此时generator下是空的,鼠标选中generator后,会发现sense窗口出现了edit按钮,点击edit打开generaotr编辑窗口;
由于generator还是空的,所以编辑窗口空空如也,此时右键添加一个基本的shape extrusion模板,会发现编辑窗口出现了五个逻辑连接的小窗口,同时会到hierarchy窗口会发现generator对象下出现了相应的子物体,现在就可以进行编辑轨道了;
2.轨道的轨迹形状绑定
新建模板后会发现从input spline path链接出来的窗口标题是红色的,那是因为后面的三个窗口都用到了第一个窗口的path轨迹数据来生成轨道,由于还没有绑定轨迹所以红色警告。将之前做好的spline轨迹对象拖到input spline path面板对应的引用上即可,
也可以在hierarchy窗口拖入绑定,两边可以相互结合对应来设置调整;
3.轨道横截面设置
有了轨迹数据后便有了制作轨道的轨迹形状,现在通过input spline shape来制作轨道的横截面。横截面的制作方法和spline的轨迹类似,可以是闭合的中空曲线截面,也可以是开放的。横截面可以选择已有的规则形状,比如:圆形,矩形等等,设置相应的控制点个数,半径大小等等,也可以选中freedom来通过多个控制点来制作自由曲线横截面;
通过移动横截面控制点的位置来调整横截面的形状,控制点可以通过contrl+d来复制添加,横截面是一个平面图形,所以一般在2d模式下设置,
编辑时最好在show gizmos打勾显示横截面形状方便编辑:
注意:横截面曲线只有它的形状对轨迹起作用,其位置在哪里无任何影响。
4.轨道材质设置
轨道的材质通过volme mesh对象来设置,可以添加多个材质,选中mat0,更改材质即可:
注意:上面的设置改变后不会立刻看到效果,需要运行工程或者轻微调整spline轨迹的控制点来出发轨道的更新显示。
如下图是一个横截面闭合的简单管道型的中空轨道:
@扩展:实际上可以利用一条spline轨迹,在同一个generator下添加其下的多个模板组建,通过多个横截面组合更复杂的轨道横截面形状。
四、生成开放轨道和自由运动的刚体
这里只做一个开放的轨道,并制作一个可以自由运动的刚体在开放轨道上自由活动,也就是文章开始截图三足球在轨道上滚动的效果,插件中rigidbody demo提供了展示。
这时需要将横截面做成一个凹槽状,从而只做一个凹槽轨道,另外可以通过还没有用过的其他两个面板来调整轨道的形态,而不是宽度始终一致粗细均匀,可以让轨道岁曲线粗细变化显得更自然。然后添加一个自由运动的刚体测试轨道。
五.实时计算物体与spline轨迹最近的点坐标
插件提供函数用来计算场景中spline轨迹上离某个物体最近的点,通过这个点可以计算物体偏离轨道的程度。比如竞速游戏可以实现实时计算赛车偏离轨道的距离,还可以通过轨道上最近的点坐标对赛车进行复位,使其回到轨道上。此功能插件的NearestPoint的demo中有展示。