u3d创一个小车车(wheelcollider)

根据官方手册跟着做一个小车车吧,原链接先放出来:

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站视频看到的,链接放上

Unity3D汽车控制游戏教程_哔哩哔哩_bilibili

进度条在9分钟这样。

这样子官方的教程应该就完成了,里面还有一些细节需要我们自己去解决,具体情况具体分析,不能一味的cp,更需要自己的思考,

OK,祝各位幸福。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的示例,展示了如何使用Unity 3D一个沿着铁轨移动的场景。 首先,需要一个地形,然后在地形上建一条铁路轨道。可以使用Unity的内置工具来建地形和铁路轨道。 接下来,需要一个模型,并将其放置在铁路轨道上。可以使用Unity Asset Store中的火模型或自己制作。 然后需要编写脚本来控制火沿着铁路轨道移动。以下是一个简单的脚本示例: ``` public class TrainController : MonoBehaviour { public float speed = 10f; // 火的速度 public float distanceThreshold = 0.1f; // 火到达下一个点的距离阈值 private Transform[] pathPoints; // 铁路轨道上的路径点 private int currentPointIndex = 0; // 当前路径点的索引 void Start() { // 获取铁路轨道上的路径点 pathPoints = GameObject.Find("PathPoints").GetComponentsInChildren<Transform>(); } void Update() { // 计算火的移动方向 Vector3 direction = pathPoints[currentPointIndex + 1].position - transform.position; direction.Normalize(); // 移动火 transform.position += direction * speed * Time.deltaTime; // 判断是否到达了下一个路径点 float distanceToNextPoint = Vector3.Distance(transform.position, pathPoints[currentPointIndex + 1].position); if (distanceToNextPoint < distanceThreshold) { currentPointIndex++; if (currentPointIndex >= pathPoints.Length - 1) { // 火到达了终点,可以停止移动 speed = 0f; } } } } ``` 这个脚本将火沿着铁路轨道移动。它首先获取铁路轨道上的路径点,然后计算火的移动方向并将其移动到下一个路径点。在到达每个路径点时,它会检查是否到达了终点。如果是,它将停止移动。 最后,将该脚本添加到火模型上,然后按“播放”按钮预览场景。您将看到火沿着铁路轨道移动,直到到达终点。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值