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. Disruptor 详解 一

    这篇博客将主要通过几个示例,简单讲述 Disruptor 的使用方法: 一.disruptor 简介 Disruptor 是英国外汇交易公司 LMAX 开发的一个无锁高性能的线程间消息传递的框架.目前 ...

  2. Linux嵌入式GDB调试环境搭建

    ======================= 我的环境 ==========================PC 端: CPU:x86_64, 系统:Ubuntu,IP:172.16.2.212开发 ...

  3. HDU 6181:Two Paths(A* + SPFA)

    题目链接 题意 给出n个点m条边的无向图,求次短路. 思路 和 POJ 2449 类似,只不过大小要开成long long. #include <bits/stdc++.h> using ...

  4. Shiro中@RequiresAuthentication等等注解介绍

    使用前请先开启Shiro的controller层注解,如果已经设置请下滑绕过 要在spring-mvc.xml中写. <!--下面的用于开启shiro的权限注解--> <bean c ...

  5. 并发编程之美,带你深入理解java多线程原理

    1.什么是多线程? 多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率.线程是在同一时间需要完成多项任务的时候被实现的. 2.了解多线程 了解多线程之前我们先搞清楚几个重要的概念! 如 ...

  6. 对象属性 Object.getOwnPropertyNames() Object.keys for...in

    1.Object.getOwnPropertyNames()方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组. Object.getOwn ...

  7. Golang 高效实践之并发实践

    前言 在我前面一篇文章Golang受欢迎的原因中已经提到,Golang是在语言层面(runtime)就支持了并发模型.那么作为编程人员,我们在实践Golang的并发编程时,又有什么需要注意的点呢?下面 ...

  8. vue+element项目中使用el-dialog弹出Tree控件报错问题

    1. 按正常的点击按钮,显示dialog弹出的Tree控件,然后把该条数据下的已经选中的checkbox , 用setCheckedNodes或者setCheckedKeys方法选择上 , 报下面这个 ...

  9. [原创]Floodlight安装

    Floodlight安装:一.安装环境: ubuntu-12.04-64bit二.安装Floodlight: #apt-get update #apt-get install build-essent ...

  10. ubuntu18.04安装nvidia驱动总结经验

    本人电脑是 DELL Inspiron 3670, 系统装的是ubuntu18.04, 显卡使用的是GeForce GTX 1050 Ti, 在安装nividia显卡的时候花费两天时间,感受颇深,顾总 ...