根据官方手册跟着做一个小车车吧,原链接先放出来:
Create a vehicle with Wheel Colliders - Unity 手册
这里主要是讲一下制作思路然后跟着做之后解决一下出现的问题
官方首先是做了一个不显示的隐形车轮,单独告诉我们wheelcollider的简单用法
大概是想让我们自己理解下怎么让wheelcollider动起来,然后里面重要的是先序列化了车轴结构:
[System.Serializable]
public class AxleInfo {
public WheelCollider leftWheel;
public WheelCollider rightWheel;
public bool motor; // 此车轮是否连接到电机?
public bool steering; // 此车轮是否施加转向角?
}
方便调试车轮的时候选择转向轮跟驱动轮
我这里就是整了前驱买菜车,很合理吧?
接着就在fixupdate里面更新,肾么?为什么要在fixupdate里面更新?
物理更新一般都放这里,你也不想你的物理现象出现掉帧或者抽搐的现象吧?
接着再便利一下所有轮子,让他们做自己该做的事,改转弯转弯,该自己动就自己动:
foreach (AxleInfo axleInfo in axleinfos) {
if (axleInfo.steering) {
axleInfo.leftWheel.steerAngle = steering;
axleInfo.rightWheel.steerAngle = steering;
}
if (axleInfo.motor) {
axleInfo.leftWheel.motorTorque = motor;
axleInfo.rightWheel.motorTorque = motor;
}
}
然后在分配一下轮子(把wheelcollider拖进去【确信】)选择转向轮跟驱动轮,图片在上面。
啊?你要后轮转向?
之后不出意外就可以动了,不动?自己想办法解决一下吧。
说不定是转向角度跟驱动力妹调?
然后是关键的东西,我们要看见轮子动起来,官方给了代码,但是没有给操作图,跟着它的意思做先整个方法来同步显示wheelcollider跟车轮模型的情况。
注意它的代码:
Transform visulwheel=wheelCollider.transform.GetChild(0);
聪明的我发现他是获取的wheelcollider组件下的子物体,很显然是模型放在wheelcollider下的是吧?最后证明也没错。
那么我问一下各位,车轮不是圆柱体嘛,那么我四个轮子都整上圆柱,旋转,缩放,运行之后变成了这样?
聪明的你一定发现我上面的字体颜色了,问题就出现在他们三个之中,没错不运行就不会这样 了
仔细观察一下发现是旋转后的问题,为了让他合乎情理的成为一个轮子,我旋转了z轴,以至于:
wheelCollider.GetWorldPose(out position, out rotation);
visulwheel.transform.position=position;
visulwheel.transform.rotation=rotation;
getworldpose:
public void GetWorldPose (out Vector3 pos, out Quaternion quat);
获取车轮的世界空间姿态 - 考虑地面接触、悬架限制、转向角度和旋转角度(以度为单位)。
是的,我旋转了个寂寞
所以一般来说就不要动模型的旋转了,这里为了测试而已,忍忍缩放个球吧。
接下来又出现问题了:
为啥车轮控制器能旋转但是不能移动?
废话不多说,wheelcollider跟缩放球体的collider冲突啦,说不定wheelcollider在球的collider里面疯狂旋转呢。这里有两个方法:
1,改球的collider大小
2,删除球的collider。
ok接下来加大驱动力试试爽吧。顺便把镜头放在车上玩玩,如果你发现:
为啥我的车子很容易侧倾(wheelcollider转弯容易侧倾)
suspension spring 的spring跟damper给他翻倍。
我也是看b站视频看到的,链接放上
进度条在9分钟这样。
这样子官方的教程应该就完成了,里面还有一些细节需要我们自己去解决,具体情况具体分析,不能一味的cp,更需要自己的思考,
OK,祝各位幸福。