我正在制作一个使用车辆座位属性的 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
该错误告诉您某些东西正在尝试调用不存在的函数。所以让我们关注这一行:
Controller.DriverSeat.Changed:Connect(Controller.Drive())
问题是你没有连接
Drive
函数,你连接的是Drive
函数的结果,而Controller.Drive()
的返回结果是nil
。
因此,要解决您的问题,请删除括号以将函数传递给连接。
Controller.DriverSeat.Changed:Connect(Controller.Drive)