unity目前版本实现赛车的技术方案主要有3种:

1、wheelCollider,设置motorTorque、brakeTorque、steerAngle来实现车子的推动和转弯,优点是上手简单,而且很快就能让车子平稳的跑起来,也不会轻易翻车。缺点是这个模拟算法貌似还有点问题,在某些情况下会出现比较奇怪的现象。wheelCollider在与地面摩擦时,使用的是wheelCollider本身的摩擦属性,与地面无关,若想在不同路面上有不同的速度效果,则需要动态改变轮胎的属性。

2、AddForce,持续给车子AddForce,使车子跑起来。

3、手动设置车子的velocity,或者设置车子的位置,这种看似简单,但是很难有赛车的感觉。

经过各种尝试,最终选择使用了wheelCollider实现。

考虑到物理碰撞的不确定性,我们把车子的模型和物理模型分开。这样做的好处有两点:一是在update里面,更新车子模型的位置信息,平滑的逼近物理模型,这样更平滑一点;二是方便在某些时刻,让车子模型单独做一些动作或者其他改变。

车子的物理模型

CarTrigger最大,比车子模型还要大一圈,是一个BoxCollider,isTrigger为TRUE,不进行实际的物理碰撞反馈。主要用于提前检测到碰撞,当撞到路边或者是其他障碍,在OnTriggerXXX中可以做一些简单的反弹、减速,而不进行真正的物理碰撞。那么问题来了,当物体速度太快时,因为没有物理碰撞,车子就很可能会出现穿墙或者是卡在障碍里面的情况。

FrontCollider和BackCollider,非trigger,进行实际的物理碰撞,大大减少了车子穿墙的概率。

WheelCollider,控制车子的推力和拐弯。

有了这样一个模型,然后在FixedUpdate,持续设置wheelCollider.maxTorque和steelAngle,车子就能跑起来了。

但是仅仅能跑起来了,除了漂移之类的操作,跟电脑上的赛车游戏有点像,但是离手机上的赛车游戏还有点距离。比如车子拐弯的时候,一旦撞到路边,除了重置(无法倒车)就没有其他办法了,玩家的挫败感比较强。现在手机上的赛车游戏,国内比较火的有我是车神、雪岭雄风,这两个游戏的共同点是玩家的操作不会改变车子的行驶方向,只会改变车子的赛道,就算不操作也基本能跑完全程,而不会卡死,是一个类跑酷的玩法,也比较符合手机操作的习惯。

所以接下来的工作就是研究可以转弯的跑酷。

Unity的赛车游戏实现思路的更多相关文章

  1. Unity创作赛车游戏的四款插件

    本文,我们将介绍其中4款:Racing Game Starter Kit.GeNa 2 .NWH Vehicle Physics.Curvy Splines. Racing Game Starter ...

  2. Unity赛车游戏之移动

    这个赛车游戏真是让我费劲脑汁啊.尤其是写这种系统化的东西. 目前漂移还没找到更好的算法,不过基本的移动还是可以做到的. 别看就光是个移动,其实也是很费事的. Unity给了个对于赛车系统很好的碰撞组件 ...

  3. 使用Unity3D的设计思想实现一个简单的C#赛车游戏场景

    最近看了看一个C#游戏开发的公开课,在该公开课中使用面向对象思想与Unity3D游戏开发思想结合的方式,对一个简单的赛车游戏场景进行了实现.原本在C#中很方便地就可以完成的一个小场景,使用Unity3 ...

  4. 使用Unity3D引擎开发赛车游戏

    Car Tutorial 在Unity3D的Asset Store有一个赛车的Demo —— Car Tutorial,看起来特别酷的赛车游戏Demo,不过我还没有下载下来,因为在公司下载Assets ...

  5. unity3d 赛车游戏——复位点检测优化、反向检测、圈数检测、赛道长度计算

    接着上一篇文章说 因为代码简短且思路简单 所以我就把这几个功能汇总为一篇文章 因为我之前就是做游戏外挂的 经过验证核实,**飞车的复位点检测.圈数检测就是以下的方法实现的 至于反向检测和赛道长度计算, ...

  6. unity3d 赛车游戏——复位点检测

    一直没有时间写博客 昨天我的CarWaypoints插件也告一段落了 今年没回家,过年就我一个人 挺无聊的,那就休息一天写几篇博客吧 我的代码可能很少,但是思路很重要 希望不懂的朋友别只copy代码 ...

  7. Siki_Unity_1-8_使用Unity开发2D游戏_PongGame

    Unity 1-8 使用Unity开发2D游戏 PongGame 任务1:演示 http://pan.baidu.com/s/1pKUHsev; up2i 任务2:案例介绍 创建PongGame,注意 ...

  8. Unity中制作游戏的快照游戏支持玩家拍快照

    Unity中制作游戏的快照游戏支持玩家拍快照 有些游戏支持玩家“拍快照”,也就是将游戏的精彩瞬间以图片的形式记录下来的功能.这个功能比较有趣,而且以后的用途也会很广,为此本节打算介绍:截取矩形区域内游 ...

  9. Unity塔防游戏开发

    Unity3D塔防开发流程 配置环境及场景搭建编程语言:C#,略懂些许设计模式,如果不了解设计模式,BUG More开发工具:Unity3D编辑器.Visual Studio编译器开发建议:了解Uni ...

随机推荐

  1. spark入门(二)RDD基础操作

    1 简述 spark中的RDD是一个分布式的元素集合. 在spark中,对数据的所有操作不外乎创建RDD,转化RDD以及调用RDD操作进行求值,而这些操作,spark会自动将RDD中的数据分发到集群上 ...

  2. idea 提示:ERROR util.Shell: Failed to locate the winutils binary in the hadoop binary path java.io.IOException解决方法

    Windows系统中的IDEA链接Linux里面的Hadoop的api时出现的问题 提示:ERROR util.Shell: Failed to locate the winutils binary ...

  3. http文件传输

    上传端: File uploadFile =new File(); PostMethod mPost = null; try{ String targetURL ="; HttpClient ...

  4. springboot自动装配(1)---@SpringBootApplication注解怎么自动装配各种组件

    1.对于springboot个人认为它就是整合了各种组件,然后提供对应的自动装配和启动器(starter) 2.@SpringBootApplication注解其实就是组合注解,通过它找到自动装配的注 ...

  5. shell脚本常见错误一二三

    1.$'\r': 未找到命令的解决 2.: 不是有效的标识符h: 3.cd "$path"/webapps/ROOT 不能正常进入ROOT文件夹,$path并未与后面的字符结合起来 ...

  6. QUIC

    QUIC(Quick UDP Internet Connection)是谷歌制定的一种基于UDP的低时延的互联网传输层协议.在2016年11月国际互联网工程任务组(IETF)召开了第一次QUIC工作组 ...

  7. 异常:带有 CLSID {} 的 COM 对象无效或未注册

    今天处理调试打印程序的时候,看到这个异常: 代码: try { string strApplyEmpno=""; string strApplyDeptCode="&qu ...

  8. Maven(二)Maven 的基本配置

    Maven 的基本配置 Maven 中仓库的概念 Maven 中的仓库是用拿过来存储所有项目的依赖关系的.当你创建一个 Maven 项目时,Maven 会通过依赖机制先到你本地仓库(自己维护的仓库)中 ...

  9. dijkstra算法学习笔记

    dijkstra是一种单源最短路径算法,即求一个点到其他点的最短路.不能处理负边权. 最近某种广为人知的算法频繁被卡,让dijkstra逐渐成为了主流,甚至在初赛中鞭尸了SPFA(? dijkstra ...

  10. 个人永久性免费-Excel催化剂功能第32波-空行空列批量插入和删除

    批量操作永远是效率提升的王道,也是Excel用户们最喜欢能够实现的操作虽说有些批量操作不一定合适Excel的最佳实践操作,但万千世界,无奇不有,特别是在国人眼中领导最大的等级森严的职场环境下.Exce ...