Skip to content

车辆 – 物理脚本

汉化标题:车辆 – 物理脚本
原文标题:Cars – Physics scripts
汉化更新时间:2025-01-14 00:00:00 +08:00
英文原文最新更新时间:2025-02-16 14:12:25 -0600

随着 0.1.77 版本的更新,现在可以使用 Lua 脚本来扩展车辆物理。只需在车辆数据文件夹中创建一个 script.lua 文件,并在启用扩展物理的情况下即可运行。如果数据已解包,在编辑脚本后会实时重新加载。

可用功能

  • 基础功能:
    • 访问当前车辆状态;
    • 访问频繁更新的详细车辆物理状态;
    • 修改车辆状态:
      • 换挡打滑标志;
      • 车辆损伤;
      • 发动机损伤;
      • 变速箱损伤;
      • 发动机转速;
      • 是否启用熄火;
      • 轮胎气压(设置为 0 可使其爆胎);
    • 修改用户控制;
    • 使用最多 8 个值,供动态物理控制器和车辆仪表输入访问(例如,通过这种方式可以将复杂逻辑绑定到差速器);
    • 向车身添加额外的力。
  • 0.1.78 版本新增:
    • 移动车辆碰撞体;
    • 设置空气动力学翼片增益。

更多功能即将推出。

一些简短示例

  • 使用 Extra A 开关在发动机功率 LUT 之间切换:

    lua
    local carPh = ac.accessCarPhysics()
    local powerBase = ac.DataLUT11.carData(car.index, 'power.lut')
    local powerAlt = ac.DataLUT11.carData(car.index, 'power_alt.lut')
    
    function script.update(dt)
      local activeLUT = car.extraA and powerAlt or powerBase
      ac.overrideEngineTorque(activeLUT:get(carPh.rpm))
    end
  • 当发动机水温超过 95 度时发动机爆炸:

    lua
    function script.update(dt)
      if car.waterTemperature > 95 then
        ac.accessCarPhysics().engineLifeLeft = 0
      end
    end
  • 在使用 H 挡的车辆上重新排列挡位,使一挡变为倒挡,适用于狗腿式变速箱

    lua
    function script.update(dt)
      local data = ac.accessCarPhysics()
      if data.requestedGearIndex == 2 then
        -- 如果请求一挡,则切换到倒挡
        data.requestedGearIndex = 0
      elseif data.requestedGearIndex > 2 then
        -- 如果请求二挡以上,则降低一挡
        data.requestedGearIndex = data.requestedGearIndex - 1
      else
        -- 否则,设置为空挡
        data.requestedGearIndex = 1
      end
    end
  • 如果 G 力过大超过一秒,则熄火一秒:

    lua
    local counter = 0
    local stalledFor = 0
    
    function script.update(dt)
      local data = ac.accessCarPhysics()
      if math.abs(data.gForces.x) > 2 then
        counter = counter + dt
      else
        counter = 0
      end
    
      if counter > 2 then
        -- 如果 G 力超过阈值超过两秒,则熄火一秒
        stalledFor = 1
      end
    
      if stalledFor > 0 then
        -- 如果已熄火,将油门踏板锁定为 0
        stalledFor = stalledFor - dt
        data.gas = 0
      end
    end
  • 当车辆速度超过 40 km/h 时,使用 Extra A 开关激活喷气发动机(常规车辆脚本可以添加音频和粒子效果,此外车辆配置中的 [EXTRA_SWITCHES] SWITCH_A_FLAGS = HOLD_MODE 也可能有帮助):

    lua
    function script.update(dt)
      local data = ac.accessCarPhysics()
      local jetActive = car.extraA and car.speedKmh > 40
      data.controllerInputs[0] = jetActive and 1 or 0
      if jetActive then
        ac.addForce(vec3(0, 0, -2), true, vec3(0, 0, 5000), true)
      end
    end
  • 使用自定义脚本设置项

    ini
    [CUSTOM_SCRIPT_ITEM_0]
    ID=SOME_ID_0
    SHOW_CLICKS=0
    TAB=SOME TAB
    NAME=Some Setup Item
    MIN=70
    MAX=95
    STEP=1
    DEFAULT=88
    POS_X=0.5
    POS_Y=1
    HELP=This does something
    lua
    ac.setScriptSetupValue(("CUSTOM_SCRIPT_ITEM_0", 72)
    
    function script.update(dt)
      ac.debug("Some Setup Item",ac.getScriptSetupValue("CUSTOM_SCRIPT_ITEM_0")()) -- 输出 72
    end

Lua 介绍

这里是 Lua 脚本编写的介绍。更多示例可以在这里找到。