Unity街机载具控制器AVC:简化物理实现爽快驾驶手感

Unity街机载具控制器AVC:简化物理实现爽快驾驶手感

1. 项目概述:什么是AVC - Arcade Vehicle Controller?

如果你正在Unity里捣鼓一个赛车游戏、飞行射击或者任何需要载具的街机风格项目,并且被Unity自带的WheelCollider那套复杂又难调的物理系统搞得头大,那你很可能需要AVC。AVC,全称Arcade Vehicle Controller,是一个专门为“爽快感”而生的载具控制系统。它不像那些追求极致物理真实的模拟器,它的目标非常明确:让你用最短的时间,做出手感流畅、操控直观、玩起来“很带感”的街机载具。

我最初接触AVC是因为一个快节奏的多人竞速小游戏项目。当时我们试过从零写物理,也试过其他一些物理资产,不是调参调到天昏地暗,就是手感过于“笨重”,玩家反馈总是“不够爽快”。直到用了AVC,它的设计哲学一下子就对上了——它用一套经过精心设计的简化物理模型,避开了真实物理中那些让操控变“黏糊”的复杂因素(比如过于真实的轮胎侧滑、悬挂形变),转而提供清晰、响应迅速且可预测的输入反馈。简单来说,你按左,车就利落地左转;你加速,车就立刻有推背感;你想来个漂移,调一个参数就能轻松实现那种“甩尾”的弧线。

这套系统最核心的价值在于它的“易用性”和“可定制性”的平衡。它自带一个叫“Vehicle Builder”的编辑器窗口,你只需要把模型拖进去,指定一下哪个是车身、哪几个是轮子,点一下按钮,一个基础可驾驶的载具就诞生了,整个过程可能不到一分钟。而所有的核心参数,比如最高速度、加速度、转向灵敏度、漂移系数,都被封装在一种叫ScriptableObject的Unity资源里。这意味着你可以创建一套“手感模板”(比如“卡丁车手感”、“重型卡车手感”、“悬浮艇手感”),然后批量应用到几十上百个不同的载具模型上,管理和迭代效率极高。

2. 核心设计思路:AVC如何实现“街机感”?

要理解AVC为什么好用,得先明白它和真实物理模拟(比如Unity的WheelCollider)以及完全无物理的“假驾驶”之间的区别。

2.1 物理模拟的取舍:简化而非缺失

AVC并没有完全抛弃物理。它底层依然依赖Unity的Rigidbody(刚体)组件来提供基础的碰撞检测和运动学计算。但是,它巧妙地避开了最复杂的部分——轮胎与地面的精确摩擦模型

在真实物理中,一个轮胎的抓地力受材质、压力、温度、滑移率等无数因素影响。WheelCollider试图模拟这些,结果就是参数巨多(侧滑刚度、前进刚度、滑移曲线等),且相互耦合,调出一个稳定又好玩的手感非常困难。AVC的做法是:用一个或多个球体碰撞体(Sphere Collider)或一个盒体碰撞体(Box Collider)来近似代表整个车辆的碰撞体积。车辆的移动和转向,不再是通过每个轮胎单独施加力,而是通过直接计算并施加一个作用于车辆刚体质心的综合力与扭矩。

这样做的好处是:

  1. 性能开销低:计算几个球体的碰撞,远比计算四个复杂轮胎的连续碰撞检测要省资源。
  2. 手感稳定可控:因为物理交互被简化了,所以输入(油门、转向)到输出(车辆运动)的映射关系非常清晰。开发者可以通过几个直观的参数(如TurnSpeed转向速度、DriftAmount漂移量)直接塑造手感,而不用去和一堆晦涩的物理参数搏斗。
  3. 兼容性强:你的载具模型不需要有物理上精确的轮子悬挂结构。哪怕轮子是嵌在车身里的,或者你的“车”根本就是个飞碟、一艘船,AVC都能让它动起来,因为它的运动不依赖于悬挂系统的物理模拟。

2.2 操控逻辑:输入到运动的直接映射

AVC的操控逻辑是“结果导向”的。我们来看一个典型的转向实现思路(非AVC源码,但原理相通): 在FixedUpdate中,它会根据玩家的水平输入(-1到1),结合当前速度,计算出一个目标转向角度或旋转速度。然后,通过Rigidbody.AddTorque在车辆的上方向(Y轴)施加一个旋转扭矩。这个扭矩的大小,会由TurnSpeed(转向速度)这个参数控制,并且通常还会与当前速度关联——高速时转向更平缓,低速时转向更灵敏,这符合直觉,也避免了高速下的失控。

对于加速,它同样不是简单给一个恒力。AVC内部会计算一个“目标速度”,比如根据油门输入和MaxSpeed(最大速度)参数得出。然后通过Rigidbody.AddForce在车辆前进方向施加力,使当前速度逼近目标速度。同时,它还会计算一个“引擎阻力”,当你松开油门时,车辆会有一个自然的减速感,这个阻力的大小也是可调的。

漂移的实现是AVC街机感的精髓之一。在真实漂移中,是后轮失去抓地力产生侧滑。在AVC中,这通常通过一个“漂移系数”(0到1)来实现。当玩家按下“漂移键”(如空格键)时,系统会临时降低车辆转向的“抓地力”效果,同时可能增加一个额外的、垂直于车身朝向的侧向速度分量。这样,车辆在转弯时就会产生一个华丽的、可控的侧滑轨迹。这个系数调成0.3和0.7,手感差异会非常明显,让你轻松做出从轻度甩尾到原地转圈的各种效果。

2.3 模块化与数据驱动设计

这是AVC在工程上非常优秀的一点。它将载具的“数据”和“行为”分离。

  • 数据层(ScriptableObject)VehicleSettings。这里存放了所有定义载具手感的参数:速度、转向、漂移、车身倾斜(Tilt)等。你可以像创建材质球一样创建多个.asset文件,命名为“SportsCarSettings”、“MonsterTruckSettings”。
  • 行为层(MonoBehaviour)VehicleBehaviour。这是挂在载具预制体上的核心组件。它读取VehicleSettings中的数据,并在每帧根据输入和物理状态执行相应的运动逻辑。

这种设计带来了巨大的灵活性:

  • 热重载:在Play模式下,你调整VehicleSettings的参数,效果能实时反馈到运行的载具上,调试手感无比方便。
  • 资源共享:所有使用同一套VehicleSettings的载具,手感完全一致。想统一调整所有“轻型车”的操控?改一个文件就行。
  • 逻辑清晰VehicleBehaviour脚本只关心“怎么做”,不关心“参数是什么”,代码结构更干净。

3. 从零开始:快速创建一个AVC载具

理论说再多不如动手做一遍。我们假设你已经从Unity Asset Store获取了AVC插件,并导入到项目中。下面是最快的上手流程。

3.1 准备你的载具模型

首先,你需要一个3D模型。对AVC来说,模型只需要满足基本要求:

  1. 模型最好有一个作为“根”的空物体,下面挂载着车身(Body)和车轮(Wheels)的子物体。这是最清晰的结构。
  2. 车轮物体最好以自身轴心点为旋转中心。如果车轮模型的轴心不在几何中心,AVC也提供了工具(Fix Wheel Rotation)来校正,这个我们后面会提到。
  3. 给模型分配好层级(Layer),比如“Vehicle”。AVC需要正确的层级设置来进行地面检测。

一个推荐的结构如下:

Car_Root (GameObject, 挂载VehicleBehaviour等组件) ├── Body (MeshRenderer, 车身模型) ├── Wheel_Front_Left (MeshRenderer, 左前轮模型) ├── Wheel_Front_Right (MeshRenderer, 右前轮模型) ├── Wheel_Rear_Left (MeshRenderer, 左后轮模型) └── Wheel_Rear_Right (MeshRenderer, 右后轮模型)

3.2 使用Vehicle Builder一键构建

这是AVC的“王牌功能”。在Unity编辑器顶部菜单栏,找到AVC -> Vehicle Builder

  1. 打开Builder窗口:窗口打开后,你需要将场景中或项目里的模型根节点(比如上面的Car_Root)拖拽到“Vehicle Root Object”字段。
  2. 指定部件
    • Vehicle Body:拖入你的车身模型(如Body)。
    • Wheel Objects:这是一个列表,将你的四个(或更多)车轮模型依次拖入。顺序通常是:左前、右前、左后、右后。AVC支持两轮(摩托车)、三轮甚至更多轮子的配置。
    • Vehicle Settings:这里可以指定一个已有的VehicleSettingsScriptableObject,或者留空,让Builder使用默认值创建一个新的。
  3. 选择碰撞体类型:在Builder中,你可以选择使用“Sphere Collider”模式还是“Box Collider”模式。这是v1.11版本后加入的重要功能。
    • Sphere模式(传统):为每个车轮位置生成一个球体碰撞体,模拟四个接触点。这是早期版本的方式,对于大多数地面轮廓跟随较好。
    • Box模式(推荐):为整个车身生成一个盒体碰撞体。性能更好,物理交互更稳定,尤其是在复杂地形上翻滚或碰撞时。从v1.5开始,新建载具默认强制使用Box模式,旧模式正在被淘汰。
  4. 点击构建:点击窗口中的“Build Vehicle”按钮。AVC会自动完成以下工作:
    • 为根物体添加RigidbodyVehicleBehaviour组件。
    • 根据选择添加球体或盒体碰撞体。
    • 创建必要的子物体来管理车轮视觉旋转和转向。
    • 如果VehicleSettings为空,会在项目资源中创建一个默认设置文件。
    • 自动配置好层级和标签。

实操心得:第一次使用Builder后,务必检查生成的结构。特别是车轮的“Wheel”子物体下,应该有一个负责视觉旋转的物体和一个负责物理碰撞的物体(如果是Sphere模式)。确保视觉轮子模型能正确旋转。如果发现轮子转起来位置不对,就是模型轴心问题,需要用Fix Wheel Rotation工具。

3.3 基础参数调校:打造第一版手感

构建完成后,选中你的载具根物体,查看VehicleBehaviour组件。你会看到一个Vehicle Settings字段,链接着一个ScriptableObject。双击它进行编辑。

这里有几个最核心、最先需要调整的参数:

  • Speed(速度相关)

    • Max Speed:最大速度。注意,在v1.22版本前,这个值有个内部系数,设置1可能实际很快。v1.22后修复了,但如果你从旧版升级,可能需要把所有速度值除以6。新手最容易在这里踩坑,觉得车怎么慢得像爬,或者快得离谱。
    • Acceleration:加速度。值越大,达到最大速度越快。
    • Reverse Speed:倒车最大速度。
    • Brake Strength:刹车强度。值越大,刹车越猛。
  • Turning(转向相关)

    • Turn Speed:转向速度。这是转向灵敏度的主控参数。值越大,转向响应越快。这是影响“手感”最关键的参数之一
    • Turn Speed Adjust By Speed:是否根据速度调整转向。通常勾选,这样高速时转向会自然变缓,增加稳定性。
    • Can Turn When Stationary:静止时能否转向。对于汽车通常关闭,对于坦克或某些特殊载具可以开启。
  • Drifting(漂移相关)

    • Drift Amount:漂移量。0为无漂移,1为最大漂移。这是塑造街机感的灵魂参数。从0.3开始尝试,你会立刻感受到过弯时车尾开始滑动。
    • Drift Input:触发漂移的输入键。通常设置为独立的按键(如空格)。
  • Body Tilt(车身倾斜)

    • Forward Tilt:前后倾斜。加速时车头上扬,刹车时车头下压。给速度变化增加视觉反馈。
    • Turn Roll:转弯侧倾。转弯时车身向内倾斜,模拟离心力效果。很小的值(如0.1)就能带来显著的视觉提升,让驾驶感更生动。

我的调试流程:我通常会先设一个合理的Max Speed(比如30),然后把Turn Speed调到中间值(比如5)。进入Play模式,开车跑一圈,感受基础转向。如果觉得“转不动”,就加大Turn Speed;如果觉得“太飘”或容易翻车,就减小它。然后,尝试过弯时按下漂移键,调整Drift Amount直到出现你想要的甩尾幅度。最后,加上一点Forward TiltTurn Roll(比如都设0.05),视觉反馈立刻就不一样了。

4. 深入核心功能与高级配置

掌握了基础创建和调参,我们来看看AVC那些让项目脱颖而出的高级特性。

4.1 悬浮与滑行:突破地面限制

AVC的“Arcade”特性让它不仅能做车,还能做气垫船、悬浮摩托、宇宙飞船。关键在于理解它的“地面检测”和“悬空行为”。

VehicleBehaviourVehicleSettings中,有一个Ground Check相关的设置。它通过从车辆中心向下发射射线来检测是否“接地”。当车辆悬空时,AVC会进入一种不同的运动模式。

  • 空中控制:默认情况下,车辆在空中时,你仍然可以进行一定程度的转向和俯仰控制(对于支持悬浮/飞行的载具)。这通过Air Control参数调节。如果你想做一架直升机,你可以调高这个值,并配合Strafing(平移)功能,实现全方位的空中移动。
  • 车身朝向对齐:v1.5版本增加了一个很棒的功能:Rotate To Ground In Air(在空中时向地面旋转)。当车辆飞越坡道跳起时,如果开启此选项,车辆在空中会自动调整姿态,使其底部朝向地面法线。这能让跳跃和落地看起来更自然,而不是僵硬地保持起跳角度。
  • 地面跟随模式:v1.5还引入了Tight/Loose Ground Follow选项。Tight模式会让车辆紧密贴合地面轮廓,适合越野车;Loose模式则允许车辆在颠簸路面保持更稳定的车身姿态,减少上下晃动,适合高速赛车。

实现一个基础悬浮车

  1. 像普通车一样用Builder创建。
  2. VehicleSettings中,将Ground Check Distance(地面检测距离)设为一个很小的值(如0.1),甚至为0。
  3. 调整Air Control参数到一个较高的值(如0.8)。
  4. 此时车辆将始终处于“悬空”状态,移动会非常平滑,没有地面摩擦感。你可以再结合粒子特效(在车轮位置播放),模拟悬浮引擎的效果。

4.2 视听效果集成:引擎声、漂移烟与碰撞火花

从v1.5版本开始,AVC原生集成了音频和特效系统,这让载具的沉浸感上了一个大台阶。

  • Vehicle Audio组件:这是一个可以添加到载具上的独立组件。它提供了几个关键事件:

    • Engine Start/Stop/Running:可以关联引擎启动声、怠速循环声、熄火声。Engine Running声音的音调和音量可以根据当前引擎转速(与车速相关)进行动态调节,实现转速越高声浪越尖厉的效果。
    • Drifting:漂移时触发的音效,比如轮胎摩擦声。
    • Collisions:碰撞时根据力度播放的音效。 你需要做的就是创建几个AudioSource,分别挂上对应的音频片段,然后拖拽到Vehicle Audio组件的相应插槽中。AVC会在适当时机自动播放它们。
  • Vehicle Effects组件与Collision Manager

    • Collision Manager组件负责监听物理碰撞事件,并将其转发为更易用的事件(如OnVehicleCollisionEnter)。
    • Vehicle Effects组件则可以监听这些事件,触发粒子系统。例如,在发生碰撞时,在碰撞点生成一阵火花粒子;在漂移时,在车轮后方生成烟雾和轮胎痕(通常使用Trail Renderer或贴花系统)。
    • 漂移特效:这是街机风格的标志。AVC将漂移设置也做成了ScriptableObject(DriftSettings),里面可以配置漂移时触发的粒子系统和音效。你需要先创建并配置好一个粒子系统(比如一个烟雾粒子),然后在DriftSettings中引用它。当玩家漂移时,Vehicle Effects会自动在每个参与漂移的车轮位置实例化这个粒子效果。

避坑指南:集成特效时,最常见的两个问题是粒子位置不对和性能开销。第一,确保你的粒子系统预制体的轴心点在底部中心,这样实例化时才会出现在车轮接地位置。第二,一定要使用对象池来管理这些瞬时粒子,避免频繁的Instantiate和Destroy。AVC本身不包含对象池,你需要自己实现或使用第三方池化插件,在Vehicle Effects的事件回调中去池子里取用和归还粒子对象。

4.3 多轮与特殊载具配置

AVC不仅限于四轮汽车。通过其扩展组件,可以轻松配置摩托车、三轮车、六轮卡车甚至坦克。

  • 两轮摩托车:在Builder的Wheel Objects列表中只放入前轮和后轮两个对象。AVC会自动识别为两轮模式。摩托车需要更强的车身倾斜(Body Tilt)来模拟过弯压弯的感觉,你可能需要显著增加Turn Roll的值。
  • 额外车轮旋转与转向:对于超过四个轮子的载具(比如六轮越野车),AVC提供了Additional Wheel RotatorAdditional Wheel Turner组件。假设你的车有6个轮子,Builder只处理了4个。你可以把剩下的两个轮子模型拖到这两个组件的Extra Wheels列表里。Rotator组件会让这些轮子根据车速旋转,Turner组件会让它们根据转向输入转动(对于转向轮)。这让你能用标准四轮流程快速搭建基础,再灵活扩展。
  • 坦克或履带车:虽然AVC没有直接的履带物理,但你可以利用其“平移”(Strafing)功能来模拟。坦克通常可以原地转向。你可以设置一个载具,允许Turn When Stationary(静止转向),并且将Strafing(平移速度)设为0,这样它就会以车体中心为轴旋转,而不是像汽车那样绕一个弧线转弯。

5. 输入与控制:连接玩家与载具

AVC的核心VehicleBehaviour脚本提供了丰富的公共方法(如ControlAccelerate,ControlBrake,ControlTurn,ControlDrift),但它本身不处理输入。这给了你最大的灵活性去集成任何输入系统。

5.1 使用经典Input Manager

AVC包内自带一个ExampleInput.cs脚本,展示了最基础的输入处理。你可以参考它来写自己的输入控制器:

public class SimpleCarInput : MonoBehaviour { public VehicleBehaviour vehicle; // 拖入你的VehicleBehaviour组件 void Update() { // 获取标准输入轴 float accelerate = Input.GetAxis("Vertical"); float turn = Input.GetAxis("Horizontal"); bool isBraking = Input.GetKey(KeyCode.S); bool isDrifting = Input.GetKey(KeyCode.Space); bool isBoosting = Input.GetKey(KeyCode.LeftShift); // 将输入传递给载具 if (vehicle != null) { vehicle.ControlAccelerate(accelerate); vehicle.ControlTurn(turn); vehicle.ControlBrake(isBraking); vehicle.ControlDrift(isDrifting); if (isBoosting) vehicle.Boost(); // 调用Boost方法 } } }

5.2 集成Unity新的Input System

新的Input System更加强大和灵活,支持手柄、触摸屏等。集成起来也很直接:

  1. 创建Input Actions Asset(.inputactions文件),定义你的操作(Action),如“Accelerate”(值为<Gamepad>/rightTrigger<Keyboard>/w)、“Turn”(值为<Gamepad>/leftStick/x<Keyboard>/a/d)、“Brake”、“Drift”等。
  2. 在输入控制脚本中,使用PlayerInput组件或直接引用InputAction
using UnityEngine; using UnityEngine.InputSystem; public class NewInputSystemCarController : MonoBehaviour { public VehicleBehaviour vehicle; private PlayerInput playerInput; private InputAction accelerateAction; private InputAction turnAction; private InputAction brakeAction; private InputAction driftAction; void Start() { playerInput = GetComponent<PlayerInput>(); accelerateAction = playerInput.actions["Accelerate"]; turnAction = playerInput.actions["Turn"]; brakeAction = playerInput.actions["Brake"]; driftAction = playerInput.actions["Drift"]; } void Update() { if (vehicle != null) { vehicle.ControlAccelerate(accelerateAction.ReadValue<float>()); vehicle.ControlTurn(turnAction.ReadValue<float>()); vehicle.ControlBrake(brakeAction.ReadValue<float>() > 0.1f); // 假设是按钮 vehicle.ControlDrift(driftAction.ReadValue<float>() > 0.1f); } } }

5.3 移动端触摸控制

对于手机游戏,你需要虚拟摇杆或触摸区域。AVC的输入方法接受float值,所以你可以很容易地将虚拟摇杆的输出(-1到1)传递给ControlTurnControlAccelerate

一个简单的双区域触摸方案

  • 屏幕左侧一个大区域,触摸滑动控制转向(将滑动的横向位移比例映射到-1到1)。
  • 屏幕右侧一个大区域,触摸时加速,松开时减速或刹车。
  • 在屏幕某处放置一个固定的漂移按钮。

关键是将触摸输入的坐标变化,平滑地转换为连续的float值,避免输入阶跃导致车辆操控突变。可以使用Mathf.ClampMathf.Lerp进行平滑处理。

6. 常见问题排查与性能优化

即使有了AVC这样优秀的工具,在实际项目中还是会遇到各种问题。下面是我和社区里常见的一些坑及其解决方案。

6.1 载具行为异常问题排查表

问题现象可能原因解决方案
车辆完全不动1.VehicleBehaviour组件未正确获取Rigidbody引用。
2. 输入脚本未正确关联VehicleBehaviour
3. 车辆与地面层级未正确设置,导致永远检测不到地面。
1. 检查VehicleBehaviourVehicle Rigidbody字段是否已赋值。
2. 检查输入脚本中的vehicle公共变量是否在Inspector中拖拽赋值。
3. 确保车辆和地面的GameObject设置了正确的Layer,并在VehicleBehaviourGround Layer Mask中包含了地面层级。
车辆下坠或穿透地面1. 地面没有碰撞体(Collider)。
2. 车辆的碰撞体(Sphere/Box Collider)尺寸太小或位置不对。
3.Ground Check Distance设置过大,导致检测失败。
1. 为地面添加Mesh Collider或Terrain Collider。
2. 检查车辆碰撞体是否包裹住模型,在Builder中尝试调整碰撞体尺寸或改用Box模式。
3. 适当减小Ground Check Distance,确保射线能碰到地面。
转向过于灵敏或迟钝Turn Speed参数设置不当,或未启用Turn Speed Adjust By SpeedVehicleSettings中调整Turn Speed。如果高速时难以控制,确保勾选了Turn Speed Adjust By Speed。也可以尝试调整Angular Drag(角阻力)来增加转向阻尼。
漂移没效果或效果过强Drift Amount参数设置不当。Drift Amount是归一化值。从0.3开始微调。同时检查输入是否正确触发了ControlDrift方法。
车辆在斜坡上侧滑这是早期版本常见问题。确保AVC版本在v1.4以上。在VehicleSettings中,找到并启用Stop Sideways Slope Slide(阻止侧向斜坡滑动)选项。
车轮视觉旋转不正确车轮模型的轴心点(Pivot)不在几何中心。使用AVC菜单中的AVC -> Fix Wheel Rotation工具。选中需要校正的车轮模型,运行此工具,它会创建一个轴心正确的子物体。
相机跟随抖动相机更新与物理更新不同步。AVC在v1.5版本已修复此问题,确保将相机跟随的逻辑(如Cinemachine虚拟相机)的更新模式设置为与VehicleBehaviour一致(在FixedUpdate中更新目标位置)。如果使用自己的相机脚本,确保在LateUpdateFixedUpdate中平滑跟随。

6.2 性能优化要点

AVC本身很高效,但在大量载具(如AI车流)或低端平台(如WebGL、移动端)上,仍需注意:

  1. 碰撞体选择优先使用Box Collider模式。一个Box Collider比四个Sphere Collider的性能开销更小,物理模拟也更稳定。这是v1.5后官方推荐的方式。
  2. 地面检测优化Ground Check使用的是射线(Raycast)。确保Ground Layer Mask只包含必要的地面层级,避免射线打到不必要的物体上。在复杂场景中,可以考虑适当降低射线检测的频率(但需修改源码,需谨慎)。
  3. 特效与音频管理:如前所述,漂移烟雾、碰撞火花等瞬时特效必须使用对象池。对于持续播放的引擎声,使用一个或两个AudioSource循环播放,通过调节音高和音量来模拟转速变化,而不是为不同转速准备多个音频片段。
  4. AI载具:如果你的游戏有大量AI控制的载具,确保它们在不被玩家看到或距离很远时,进入“低功耗”模式。例如,可以降低它们的物理更新频率、禁用昂贵的视觉特效和声音。AVC的VehicleBehaviour本身没有提供这个开关,但你可以通过脚本来控制是否启用该组件,或者通过距离检测来动态调整其Update中的计算复杂度。
  5. Draw Call与GPU Instancing:如果你的场景有大量同款载具(比如同一款赛车),确保它们的材质启用了GPU Instancing,可以大幅降低Draw Call。

6.3 版本升级注意事项

从网络讨论和更新日志看,AVC在迭代中有些重大变更需要留意:

  • v1.22版本的速度系数修正:如果你从v1.21或更早版本升级到v1.22+,所有载具的Max SpeedAcceleration等速度相关参数可能需要手动调低(大约除以6),否则车辆会变得极快。这是修复了内部计算错误,使得速度设置更直观。
  • v1.17版本的Rigidbody引用丢失:该版本重命名了PhysicsSphere属性为VehicleRigidbody,可能导致升级后组件引用丢失。如果升级后车不动了,第一件事就是检查VehicleBehaviour上的Vehicle Rigidbody字段是否为空,重新拖拽赋值即可。
  • v1.5版本的碰撞体模式变更:Prefab Builder默认强制使用Box Collider。如果你有旧项目依赖Sphere模式,可能需要手动调整或修改Builder的逻辑。

个人建议:在升级任何插件前,尤其是像AVC这样核心的系统,务必在备份的项目中进行测试。仔细阅读官方更新日志,重点关注“Fixed”(修复)和“Update”(更新)部分,看是否有破坏性变更。