车辆 – 物理脚本
汉化标题:车辆 – 物理脚本
原文标题: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 之间切换:
lualocal 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 度时发动机爆炸:
luafunction script.update(dt) if car.waterTemperature > 95 then ac.accessCarPhysics().engineLifeLeft = 0 end end在使用 H 挡的车辆上重新排列挡位,使一挡变为倒挡,适用于狗腿式变速箱:
luafunction 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 力过大超过一秒,则熄火一秒:
lualocal 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也可能有帮助):luafunction 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 somethingluaac.setScriptSetupValue(("CUSTOM_SCRIPT_ITEM_0", 72) function script.update(dt) ac.debug("Some Setup Item",ac.getScriptSetupValue("CUSTOM_SCRIPT_ITEM_0")()) -- 输出 72 end