Unity3D教程:车辆性能算法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
- . z. Unity3D教程:车辆性能算法 Posted on 2013年06月05日 by U3d / Unity3D 根底教程/被围观 123 次 首先要了解真实车辆的原理:车辆分前轮驱动,后轮驱动和四驱动。动力由引擎提供,反响的力到轮胎上,因此产生转数,即RPM。引擎的功率可以由RPM得到公式为 : RPM = 引擎功率×60/2×pi ,这些都是模拟,只为了更好的为下面的动作效劳。还有群众关心的漂移〞,所谓漂移就是,在后驱车辆中,前轮方向旋转大角度,地面给于一定向心力,同时后轮又给予更多动力,导致漂移〞动作。 首先,车辆不可能整个套一个外壳,原因是在接触地面时,对车辆所使的力不可能到达你预期的目标,引起,必须在车辆轮胎以上做外壳碰撞,轮胎以下就需要有力来支持它始终保持不掉下来。 Unity3D中有个WheelCollider ,它是专门模拟轮胎支持力和轮胎转数,以及轮胎横向力,前进力,以及悬架避震系统。这个东西非常方便,只要你把这个东西套在4个轮胎上,调试下他的forwardFriction 和 sidewaysFriction到达你想要的效果,然后对驱动轮的motorTorque进展赋值,你的车辆就能动了。 记得你需要无数次调试前进摩擦力和横向摩擦力。至于悬架系统在你需要时也可以改变其值。还有,这两个摩擦力,是一个由低到高,再由高到稳定的一条曲线。 这个WheelCollider非常好用,曾一度沉迷于此。但后来发现,他有很多不合理的地方。想要得到最好的效果,还是抛弃了他。为了支持车辆的碰撞外壳不接触地面,必须写一个悬架动态支持力,在4个轮胎位置,支持整辆车悬浮于地面之上。 关于这个悬架动态支持力: void SuspensionHoldForce() { float fullpressionSpringForce =this.rigidbody.mass* 0.25f * 2.0f *-Physics.gravity.y; this.OnGround=true; foreach( GameObject item in FwheelModels ) { RaycastHit hit; bool onGround = Physics.Raycast( item.transform.parent.position , -item.transform.parent.InverseTransformDirection(Vector3.up), out hit, this.suspensionTravel+this.radius); if(onGround hit.collider.isTrigger) { onGround =false; float dist =this.suspensionTravel+this.radius; RaycastHit[] hits = Physics.RaycastAll( item.transform.parent.position , -item.transform.parent.InverseTransformDirection(Vector3.up) , this.suspensionTravel+this.radius); foreach(RaycastHit test in hits) { if(!test.collider.isTrigger test.distance= dist) { hit = test; onGround =true; dist = test.distance; } } } if( onGround ) { Vector3 wheelVelo =this.rigidbody.GetPointVelocity(item.transform.parent.position); Vector3 localVelo = transform.InverseTransformDirection(wheelVelo); Vector3 groundNormal = transform.InverseTransformDirection(hit.normal); float damperForce = Vector3.D

文档评论(0)

ygxt89 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档