@废话在前

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 如果下载不了请回复邮箱地址我发给您。

导入插件后可看到一个packages的文件夹里面有以下内容,其中有很多demo场景:

可以运行demo看一下可以实现那些效果,还是很炫酷的。

二、制作Spline运动轨迹

1.新建一个场景,会发现导入插件后工程中的场景scene窗口出现一些操作按钮:


2.生成轨迹


最快的方法就是直接点击scene场景中上面按钮的最后一个Draw Spline按钮,然后选择轨迹的方向,一般选择第二个y轴朝上。选择后会有提示 通过按住control键然后在scene场景中添加控制点,可以添加多个控制点,可以拖动控制点改变生成轨迹的形状,与此同时会发现project面板中已经生成了相应的元素:轨迹和轨迹下的控制点;

控制点之间的插值有三种选择,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中有展示。

转载于: [link](https://jiangxh1992.blog.csdn.net/article/details/52215079).

CurvySplines基础相关推荐

  1. CurvySplines01(一条路径使用两个材质球)

    1,CurvySplines基础知识了解 链接: link. 2,一条路径使用两个材质球 1,编辑好最基本的路基(不了解先去了解) :2打开Generator编辑器 增加mat 设置第二种材质球,ma ...

  2. java入门 慕路径,Java入门基础知识总结学习教程大全【必看经典】

    类型的表达式,是循环条件,表达式3是党执行了一遍循环之后,修改控制循环的变量值. ??? for语句的执行过程是这样的:首先计算表达式1,完成必要的初始化工作:然后判断表达式2的值,如果表达式的值为t ...

  3. 提交表单自动刷新_Web自动化测试:元素的基础操作和浏览器基础操作

    上一节,我们了解了如何定位元素,其实也有涉及对于元素的操作,这一节我们就详细的介绍一下对于元素的操作和对于浏览器的一些操作 一.对于元素的基础操作: clear():清除输入框内的文本 send_ke ...

  4. java mybatis基础

    java mybatis基础 1.1 什么是mybatis? mybatis是一个优秀的持久层框架. 避免几乎所有的JDBC代码和手动设置参数以及获取结果集的过程. 可以使用简单的xml或者注解来配置 ...

  5. 【J2SE】学习基础

    Java基础 语法基础 OO Exception Array 基础类 I/O Stream Collection/Generic Thread TCP/UDP GUI Meta Data Regula ...

  6. 【Linux系统】基础总结

    我不太清楚运维部门具体是做什么的,就接触过一点点运维部门! 也就是是知道他们负责管理服务器,管理网络,管理项目部署 偶尔自己需要部署,不得不接触一些linux命令.简单总结一些基础 linux系统发展 ...

  7. 【Java 2 Platform Enterprise Edition】基础

    问题1:为什么java是无关平台? 你之前用C或者C++写的源代码,编译好后,换一种操作系统,可能就执行不了了.因为新的操作系统不识别,你需要修改你的源码,并在新的操作系统上重新编译才能运行,比如Wi ...

  8. SpringCloud Alibaba微服务实战(一) - 基础环境搭建

    说在前面 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来 ...

  9. Redis概述和基础

    Redis 1.NoSQL NoSQL = Not Only SQL(不仅仅是SQL) 泛指非关系型数据库的,随着web2.0互联网的诞生!传统的关系型数据库很难对付web2.0时代!尤其是超大规模的 ...

  10. pass基础架构分析

    pass基础架构分析 Relay 和 TVM IR,包含一系列优化passes,可提高模型的性能指标,如平均推理,内存占用,或特定设备的功耗.有一套标准优化,及特定机器学习的优化,包括常量折叠,死代码 ...

最新文章

  1. 每日一皮:这张图送给正在努力改Bug的你
  2. AB1601低功耗注意事项
  3. 文本分析:吉利不裁员不降薪背后的真相是什么
  4. html5标签属性大全_HTML/HTML5 知识点思维导图
  5. 003-redis-命令-key操作,字符串操作
  6. 20172307 2017-2018-2 《程序设计与数据结构》实验5报告
  7. IntellijIDEA中maven模块中POM文件不生效
  8. java中输入方式Scanner和BufferedReader
  9. c/c++教程 - 1.10 结构体 使用typedef定义struct结构体 结构体数组 结构体指针 结构体嵌套 结构体做函数参数 结构体const
  10. 只使用Feign不引入Eureka
  11. TRegExpr正则表达式
  12. 查找算法 binary_serach
  13. 服务器托管费用一般是多少
  14. C# 博思得 POSTEK 打印机 打码机 SDK 二次开发 指令打印
  15. Unity 获取Android手机返回键Home按键信息
  16. Android P指示灯调节代码逻辑
  17. SecureCRT调整字体大小
  18. 解决HTML显示中文乱码问题
  19. BIM技术在住宅园区物业管理中的应用及其优势
  20. html5 加速球 效果,css 渐隐渐现、echarts 圆环图、百度地图覆盖物、echarts水球图(360加速球效果)...

热门文章

  1. 雅虎的flickr相册Host解析
  2. AirPlay to Mac 如何工作以及使用它需要什么
  3. EDM大师独家收藏的30个绝佳节日邮件模板
  4. FTP工具FileZilla Client出现中文乱码问题解决
  5. 海量数据处理的方法总结
  6. logo语言是计算机语言吗,LOGO语言的编程
  7. c语言先加后减程序,C语言中的加加减减
  8. 网页打开html无法编辑,电脑浏览器网页无法输入文字该怎么办?
  9. linux centos无线网卡驱动安装,CentOS 无线网卡驱动安装
  10. HMI 排行中有哪些触摸屏品牌