zoukankan      html  css  js  c++  java
  • Unity的赛车游戏实现思路

    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,车子就能跑起来了。

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

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

  • 相关阅读:
    [USACO11DEC]牧草种植Grass Planting
    [LNOI2014]LCA
    PTA的Python练习题(九)
    竞争条件攻击
    burpsuite使用--暴力破解
    PTA的Python练习题(八)
    PTA的Python练习题(七)
    PTA的Python练习题(六)
    攻防世界Web进阶-Upload1
    BugkuCTF解题Web基础(一)
  • 原文地址:https://www.cnblogs.com/kumbayaco/p/4366257.html
Copyright © 2011-2022 走看看