打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
项目5
userphoto

2013.05.24

关注
上面貌似漏掉了道路拼合的部分。这里补充一下

Cart的脚本技巧篇:
随机道路的拼接:

这部分比较简单~,因为是基于骨骼的道路,所以我们只需要将新的道路的根部骨骼直接对齐到当前道路的末端骨骼就可以了,而之前的模型为这套方案做好了准备,就是首末2根骨骼都只有其他骨骼的一半长度,并且首尾2段是不做随机旋转的。所以这两段道路会精确对接并且不会出现接缝。


还记得上面说的区段判定吗?当cart路过中间的一个区段,会触发制作新赛道的脚本,后面使用过的道路会向前拼接在新道路的末端,并随机生成新的弯曲角度,变成完全不同的新赛道。这样2段赛道会反复的交替向前对齐,无限延伸。
注意这里用的是2段赛道交替而不是反复的Destroy和Instantiate,因为U3D的Destroy是只销毁当前场景的prefab对象的,而对象调用的mesh和tex仍然驻留在内存并没有被立即销毁,所以反复的实例化会使内存的消耗逐渐增大(不清楚的同学可以去看一下U3D的对象池使用),而反复的利用相同的prefab可以使得游戏在玩家跑过理论上无限多的距离后仍然不会因为资源的实例化而消耗过多内存。
在U3D中除了完全面对的方法比如LookAt,有时会使用到非完全面对的效果
比如地面上用一个平面创建的树(当你不使用地形的时候)或者用片做的火焰,可以通过一个四边形的Mesh 固定一个轴向不变并配合单个轴向面对摄影机来产生体积感。

以上是Cart中的火焰,由2个片面组成,其中圆形的部分直接LookAt摄影机,而长条的部分Z轴必须保持与车身一致的方向,然后转动Z轴来面对摄影机产生体积感(图面上是Z轴指向摄影机是因为多选物体的关系,其实那应该是Y轴)。

首先先算出摄影机相对于火焰模型在Z为0时的矢量方向,也就投射成火焰的平面坐标系。
Vector2 ang2 = new Vector2(fire[0].InverseTransformPoint(cam.transform.position).x , fire[0].InverseTransformPoint(cam.transform.position).y);
(注意fire[0]是一个与fire[1]位置相同但不转动的坐标以方便计算参考角度)
然后算出fire[1]火焰对应这个方向的Z轴角度
fire[1].localEulerAngles = new Vector3(fire[1].localEulerAngles.x ,fire[1].localEulerAngles.y, Mathf.Atan2(ang2.x,ang2.y) * Mathf.Rad2Deg);
这样火焰在保证喷射方向的同时尽量努力的去给摄影机展示最大角度了~~

注意这段脚本必须写在LateUpdate()方法中,事实上所有参照摄影机位置的函数都应该写在LateUpdate()中,因为摄影机必须先在Update中运动完毕,火焰才能去精确的面对摄影机,保证执行的先后顺序。

另外以上脚本只是自己临时想的数学算法~不排除有更好的函数实现~~
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
意大利新年风俗:穿过火焰(9 pics)
十分悦耳的电音Fire (Italo Fire remix) 激情的火焰熊熊燃烧
【闭目聆听】前所未闻之新听觉Earth and Fire Orchestra大地,火焰,乐团《STS试音碟
喷火筒火焰Fire in the Hole
南斯拉夫二战影片【亚得里亚海的火焰/Adriatic Sea of Fire】
2001年都彭限量版打火机天空与火焰sky and fire
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服