修复 roblox lua 中的“尝试调用 nil 值”问题

问题描述 投票:0回答:1

我正在制作一个使用车辆座位属性的 ModuleScript,即使座位确实存在并且工作室向我显示了我正在尝试读取的属性,我仍然“尝试调用 nil 值”,而没有提及它发生的位置在代码中。我正在读取 MaxSpeed、Torque、ThrottleFloat、SteerFloat 和 TurningSpeed 属性

我已经分解了代码,由于某种原因,当我从转向和油门读取数据时,错误开始了。

我制作了一个测试服务器脚本,该脚本读取转向和油门以及其工作原理的总和,但我之前在模块脚本中使该脚本工作。

我也尝试将属性作为函数参数传递,但它仍然发生。

如果我传递一个数字,它确实有效。

这是代码

local Controller = require(script.Parent.BasicSedanDoorController)
Controller.DriverSeat.Changed:Connect(Controller.Drive())
local Controller = {}
vehicle = script.Parent
Controller.DriverSeat = vehicle.body.DriverSeat.VehicleSeat
suspension = vehicle.Suspension
turningRadius = 45
Parts = {
    Steering = {
        FL = suspension.FrontLeftArm.Hub.CylindricalConstraint,
        FR = suspension.FrontRightArm.Hub.CylindricalConstraint
    },
    driveTrain = {
        RL = suspension.RearLeftArm.Hub.MotorConstraint,
        RR = suspension.RearRightArm.Hub.MotorConstraint
    },
    Lights = {
    }
}
topSpeed = Controller.DriverSeat.MaxSpeed
Parts.driveTrain.RL.MotorMaxTorque = Controller.DriverSeat.Torque
Parts.driveTrain.RR.MotorMaxTorque = Controller.DriverSeat.Torque 
Parts.Steering.FL.AngularSpeed = Controller.DriverSeat.TurnSpeed
Parts.Steering.FR.AngularSpeed = Controller.DriverSeat.TurnSpeed
Parts.Steering.FL.ServoMaxTorque = 1000000
Parts.Steering.FR.ServoMaxTorque = 1000000
function Controller.DoorController(door:Model)
    local servo: HingeConstraint = door:WaitForChild("Exterior"):WaitForChild("Servo")
    if servo.TargetAngle == 180 then
        servo.TargetAngle = 120
    else
        servo.TargetAngle = 180
    end
end
function Controller.Drive()
    Parts.Steering.FL.TargetAngle = Controller.DriverSeat.Steer
    Parts.Steering.FR.TargetAngle = Controller.DriverSeat.Steer
    Parts.driveTrain.RL.AngularVelocity = Controller.DriverSeat.Throttle
    Parts.driveTrain.RR.AngularVelocity = Controller.DriverSeat.Throttle
end
return Controller
roblox luau
1个回答
0
投票

该错误告诉您某些东西正在尝试调用不存在的函数。所以让我们关注这一行:

Controller.DriverSeat.Changed:Connect(Controller.Drive())

问题是你没有连接

Drive
函数,你连接的是
Drive
函数的结果,而
Controller.Drive()
的返回结果是
nil

因此,要解决您的问题,请删除括号以将函数传递给连接。

Controller.DriverSeat.Changed:Connect(Controller.Drive)
© www.soinside.com 2019 - 2024. All rights reserved.