วิธีสร้างรถยนต์เคลื่อนที่สมจริงใน Roblox Studio
ในการสร้างรถยนต์ที่ขับได้ใน Roblox Studio ให้สร้างโครงรถ เชื่อมต่อล้อแต่ละล้อด้วยHingeConstraints ที่จัดเรียงอย่างถูกต้อง ใช้VehicleSeat สำหรับรับอินพุตจากผู้เล่น และให้สคริปต์ ฝั่งเซิร์ฟเวอร์ แปลงอินพุตนั้นให้เป็นแรงบิดของล้อและการบังคับเลี้ยว การตั้งค่านี้จะทำให้คุณได้ล้อที่หมุนได้ การบังคับเลี้ยวล้อหน้าที่ใช้งานได้ และการชนกันทางฟิสิกส์โดยไม่ต้องพึ่งพา VehicleSeat ในการควบคุมมอเตอร์บานพับโดยอัตโนมัติ
ภาพประกอบด้านล่างเป็นเพียงแนวทางในการจัดวางวัตถุในสไตล์สตูดิโอ ไม่ใช่ภาพหน้าจอที่แสดงผลลัพธ์ที่แท้จริงของโปรแกรมแก้ไขในปัจจุบัน โปรดปฏิบัติตามชื่อ การตั้งค่า และโค้ดในคำแนะนำ รถรุ่นเริ่มต้นนี้เป็นระบบขับเคลื่อนล้อหลังที่มีแชสซีแบบแข็ง ไม่รวมระบบกันสะเทือนหรือเฟืองท้าย
สิ่งที่คุณต้องเตรียมก่อนเริ่มก่อสร้าง
โปรแกรม Roblox Studio และโปรเจ็กต์ Baseplate ว่างเปล่า
มีความคุ้นเคยพื้นฐานกับการใช้งานแผง Explorer และ Properties
ขั้นตอนการสร้างสั้นๆ แปดขั้นตอน ให้รถหันหน้าไปทางทิศลบ Z (ทิศทางเดินหน้าของ Roblox) เพื่อให้สัญลักษณ์การบังคับเลี้ยวในสคริปต์ตรงกัน
แนวคิดหลักนั้นสำคัญ: HingeConstraint เชื่อมต่อ Attachment สองชิ้นเข้าด้วยกันที่จุดและแกนเดียวกัน HingeConstraint สำหรับมอเตอร์จะควบคุมความเร็วเชิงมุม ส่วน HingeConstraint สำหรับเซอร์โวจะควบคุมมุม เอกสารประกอบของ Roblox เกี่ยวกับ VehicleSeat ยังอธิบายด้วยว่า การเคลื่อนไหวในตัวจะตรวจจับเฉพาะมอเตอร์ที่เชื่อมต่อโดยตรงกับเบาะนั่งหรือผ่านการเชื่อมต่อแบบแข็งเท่านั้น เนื่องจากล้อด้านล่างอยู่นอกเหนือ HingeConstraint สคริปต์ควบคุมจึงอ่านค่าอินพุตจากเบาะนั่งและอัปเดต HingeConstraint ด้วยตัวเอง
ขั้นตอนที่ 1: สร้างโครงตัวถังและโมเดลรถยนต์
ใน Workspace ให้สร้างโมเดลชื่อCarเพิ่มชิ้นส่วนชื่อChassisและตั้งขนาดเป็นประมาณ(6, 1, 10)วางไว้เหนือแผ่นฐานเล็กน้อย โดยให้กึ่งกลางอยู่ที่ประมาณ(0, 2.3, 0)ตั้งค่า PrimaryPart ของโมเดลเป็น Chassis มาตราส่วนที่แน่นอนอาจแตกต่างกันไปได้ ขนาดที่ระบุไว้ที่นี่เป็นสัดส่วนเริ่มต้น ไม่ใช่ข้อจำกัดของเอนจิ้น
โครงตัวถังทรงสี่เหลี่ยมผืนผ้าเตี้ย ให้โครงสร้างแข็งแรงเพียงชิ้นเดียวสำหรับยึดล้อและแผงตัวถัง
ขั้นตอนที่ 2: ประกอบตัวถังและล้อทั้งสี่
เพิ่มชิ้นส่วนง่ายๆ สำหรับฝากระโปรงหน้า ห้องโดยสาร และตัวถังด้านท้าย วางตำแหน่งชิ้นส่วนเหล่านั้นไว้เหนือแชสซี จากนั้นเชื่อมต่อชิ้นส่วนตกแต่งแต่ละชิ้นเข้ากับแชสซีด้วยWeldConstraint ตั้งค่าชิ้นส่วนตกแต่งเป็นCanCollide = falseและหากเป็นเพียงชิ้นส่วน ตกแต่ง Massless = trueให้ตั้งค่าเป็น คงแชสซีไว้เป็นเฟรมหลักที่สามารถชนกันได้
สร้างชิ้นส่วนทรงกระบอกสี่ชิ้น โดยตั้งชื่อว่าWheelFL, WheelFR, WheelRL, และWheelRRหมุนแต่ละชิ้นส่วนทรงกระบอกให้ตะแคงข้าง โดยให้แกนหมุนวิ่งจากซ้ายไปขวา วางจุดศูนย์กลางล้อไว้ที่ระยะห่างจากจุดศูนย์กลางตัวถังตามที่ระบุไว้:
ล้อ ระยะห่างจากแชสซี ตำแหน่ง
WheelFL ด้านหน้าซ้าย (-3.5, -1, -3.2)
WheelFR ด้านหน้าขวา (3.5, -1, -3.2)
WheelRL ด้านหลังซ้าย (-3.5, -1, 3.2)
WheelRR ด้านหลังขวา (3.5, -1, 3.2)
สำหรับล้อที่มีเส้นผ่านศูนย์กลาง 2.6 รู ระยะห่างดังกล่าวจะทำให้ด้านล่างของยางอยู่ใกล้กับแผ่นฐานเมื่อจุดศูนย์กลางของแชสซีอยู่ใกล้ Y = 2.3 ตั้งล้อCanCollideให้ตรง อย่าเชื่อมล้อเข้ากับแชสซี ล้อต้องหมุนได้บนบานพับของมัน
แผงตัวถังยึดติดกับโครงอย่างแน่นหนา ในขณะที่ล้อทั้งสี่เป็นชิ้นส่วนที่เคลื่อนที่แยกจากกัน
ขั้นตอนที่ 3: ติดตั้งอุปกรณ์ยึดล้อและดุมพวงมาลัย
เพิ่มแกนหมุนAttachmentที่กึ่งกลางของล้อแต่ละล้อแล้วตั้งชื่อว่าAxleAttachmentเพิ่มจุดยึดเพลาที่ตรงกันเข้ากับตัวถังที่กึ่งกลางของล้อ จุดยึดทั้งสองสำหรับบานพับล้อใดๆ ต้องอยู่ในตำแหน่งเดียวกันบนแผนที่โลก และลูกศรแกนสีเหลืองต้องชี้ไปในทิศทางเดียวกัน สำหรับข้อต่อล้อ ให้จัดแนวแกนนั้นในแนวนอนข้ามตัวรถ
สำหรับล้อหน้า ให้เพิ่มชิ้นส่วนดุมล้อขนาดเล็กที่มีชื่อHubFLและHubFRตำแหน่งศูนย์กลางเดียวกันกับล้อหน้า ตั้งค่าให้โปร่งใส ไม่สามารถชนกันได้ และไม่มีมวล ดุมล้อแต่ละอันต้องมีจุดยึดสองจุด: จุดยึดสำหรับหมุนบังคับทิศทางที่วางตัวในแนวตั้ง และจุดยึดสำหรับเพลาที่วางตัวในแนวนอน ใช้การแสดงภาพข้อจำกัดของ Studio เพื่อยืนยันแกนก่อนทดสอบการเล่น บานพับที่บิดเบี้ยวหรือเบี่ยงเบนจะทำให้เกิดการติดขัดหรือโยกเยก
จัดแนวแกนการยึดให้ตรงกันก่อนที่จะเพิ่มข้อจำกัด โดยแกนเพลาล้อจะวิ่งขวางตัวรถ
ขั้นตอนที่ 4: ติดตั้งมอเตอร์ให้กับล้อหลัง
เพิ่มHingeConstraintวัตถุสองชิ้นลงในโมเดลรถยนต์: MotorRLและMotorRRสำหรับแต่ละชิ้น ให้เชื่อมต่อส่วนยึดเพลาแชสซีที่ตรงกันเข้ากับล้อหลังAxleAttachmentตั้งค่าActuatorTypeเป็นMotorและเริ่มต้นด้วยMotorMaxTorque = 8000และMotorMaxAcceleration = 60ตัวควบคุมจะตั้งค่าAngularVelocityในขณะที่ผู้เล่นขับรถ
ค่าแรงบิดเหล่านี้เป็นจุดเริ่มต้นในการปรับแต่งสำหรับตัวอย่างการประกอบขนาดเล็กนี้ หากล้อหมุนโดยที่รถไม่เคลื่อนที่ ให้ตรวจสอบว่าแชสซีไม่ได้ยึดแน่น ล้อหลังสัมผัสพื้น และจุดยึดบานพับทั้งสองอยู่ในแนวเดียวกัน ห้ามเพิ่ม WeldConstraint ข้ามบานพับมอเตอร์
ล้อสามารถหมุนได้อย่างอิสระเนื่องจากการเชื่อมต่อกับโครงเป็นแบบบานพับ ไม่ใช่การเชื่อม
ขั้นตอนที่ 5: เพิ่มระบบบังคับเลี้ยวล้อหน้าและล้อหมุนอิสระ
สำหรับด้านหน้าแต่ละด้าน ให้เชื่อมต่อแชสซีเข้ากับดุมล้อด้วยพวงมาลัยHingeConstraintที่มีชื่อว่าSteerFLหรือSteerFRตั้งค่าเป็นActuatorTypeเปิดServoใช้งานขีดจำกัด และตั้งค่ามุมล่างและมุมบนไว้ที่ประมาณ -25 และ 25 องศา ตั้งServoMaxTorqueค่าเริ่มต้นไว้ที่ค่าใกล้เคียง 8000
จากนั้นเพิ่มบานพับที่สองจากดุมแต่ละอันไปยังล้อหน้า โดยตั้งชื่อว่าSpinFLและSpinFRตั้งค่าActuatorTypeเป็นNoneเพื่อให้ล้อหน้าสามารถหมุนได้อย่างอิสระในขณะที่ล้อหลังผลักรถ สำหรับบานพับพวงมาลัย แกนหมุนทั้งสองต้องชี้ขึ้นในแนวตั้ง สคริปต์ใช้เครื่องหมายลบสำหรับการเลี้ยวขวาเนื่องจากโมเดลหันไปทาง -Z หากแกนหมุนของล้อของคุณหมุนไปในทิศทางที่ผิด ให้กลับเครื่องหมายนั้น
ดุมล้อสามารถหมุนไปทางซ้ายและขวาได้ ในขณะที่บานพับแยกต่างหากช่วยให้ล้อหมุนได้
ขั้นตอนที่ 6: ติดตั้งเบาะรถยนต์และปลดตัวยึดรถออก
ใส่ชิ้นส่วนVehicleSeatเข้าไปในโมเดลรถยนต์และวางไว้เหนือตัวถังในตำแหน่งที่คนขับควรนั่ง เชื่อมต่อเข้ากับตัวถังอย่างแน่นหนาด้วยชิ้นส่วนอีกชิ้นหนึ่งWeldConstraintเบาะนั่งจะส่งค่าการควบคุมคันเร่งและพวงมาลัยของผู้เล่น สคริปต์ที่กำหนดเองด้านล่างจะส่งค่าเหล่านั้นไปยังมอเตอร์บานพับและเซอร์โว
ขณะจัดเรียงชิ้นส่วน ให้ยึดชิ้นส่วนเหล่านั้นไว้หากช่วยให้คุณจัดตำแหน่งได้ง่ายขึ้น ก่อนที่จะสตาร์ทรถ ให้ตั้งAnchored = falseค่าแชสซี เบาะนั่ง ชิ้นส่วนตัวถัง ดุมล้อ และล้อ ตรวจสอบให้แน่ใจว่าทุกชิ้นส่วนที่เคลื่อนไหวและข้อจำกัดต่างๆ ถูกกำหนดให้เป็นส่วนประกอบหลักของโมเดลรถยนต์ ใช้VehicleSeatชื่อเบาะนั่งให้ถูกต้อง
วางที่นั่งลงบนโครงตัวถัง จากนั้นเชื่อมติดกับโครงก่อนทดสอบการใช้งาน
ขั้นตอนที่ 7: เพิ่มตัวควบคุมรถยนต์ฝั่งเซิร์ฟเวอร์
Scriptใส่ โมเดลรถยนต์ปกติ เข้าไปในโมเดล ตั้งชื่อมัน CarControllerแล้ววางโค้ดนี้ลงไป โค้ดนี้จะอ่านค่าThrottleFloatจากSteerFloatเบาะนั่ง ขับเคลื่อนบานพับมอเตอร์ด้านหลังสองตัว และกำหนดทิศทางเซอร์โวบังคับเลี้ยวด้านหน้า เก็บโค้ดนี้ไว้เป็นสคริปต์ฝั่งเซิร์ฟเวอร์ ไม่ใช่ LocalScript เพื่อให้ตรรกะของรถไม่ได้ทำงานเฉพาะฝั่งผู้ขับขี่เท่านั้น
local RunService = game:GetService("RunService")
local car = script.Parent
local seat = car:WaitForChild("VehicleSeat")
local driveMotors = {
car:WaitForChild("MotorRL"),
car:WaitForChild("MotorRR"),
}
local steeringServos = {
car:WaitForChild("SteerFL"),
car:WaitForChild("SteerFR"),
}
local MAX_WHEEL_ANGULAR_SPEED = 28 -- radians per second
local MAX_STEERING_ANGLE = 25 -- degrees
RunService.Heartbeat:Connect(function()
local occupied = seat.Occupant ~= nil
local throttle = occupied and seat.ThrottleFloat or 0
local steer = occupied and seat.SteerFloat or 0
for _, hinge in ipairs(driveMotors) do
hinge.AngularVelocity = throttle * MAX_WHEEL_ANGULAR_SPEED
end
for _, hinge in ipairs(steeringServos) do
-- The car faces -Z; reverse this sign if your axes turn the other way.
hinge.TargetAngle = -steer * MAX_STEERING_ANGLE
end
end)
ตรวจสอบให้แน่ใจว่าชื่อบานพับทั้งสี่ใน Explorer ตรงกับชื่อในสคริปต์ทุกประการ บานพับมอเตอร์ต้องตั้งค่าเป็น Motor และบานพับพวงมาลัยต้องตั้งค่าเป็น Servo ใน Properties สำหรับการตอบสนองในโหมดผู้เล่นหลายคน Roblox จะกำหนดความเป็นเจ้าของเครือข่ายฟิสิกส์โดยอัตโนมัติเป็นค่าเริ่มต้น คุณสามารถกำหนดความเป็นเจ้าของให้กับผู้ขับขี่สำหรับชุดประกอบยานพาหนะได้หากจำเป็น แต่ฟิสิกส์ที่เป็นของไคลเอนต์สามารถถูกควบคุมได้ ตรวจสอบการเคลื่อนไหวของยานพาหนะใดๆ ที่ส่งผลต่อผลลัพธ์หรือรางวัลในการแข่งขัน
ใช้โค้ดด้านบนเป็นแหล่งข้อมูลหลัก รูปแบบการแสดงผลแบบตัวแก้ไขนี้เป็นเพียงแนวทางในการจัดวางเท่านั้น
ขั้นตอนที่ 8: ทดสอบการเล่น ปรับแต่ง และขัดเกลาให้สมบูรณ์
เริ่มการทดสอบการเล่น นั่งลงบนที่นั่ง และใช้ปุ่มควบคุมการเคลื่อนไหวตามปกติ บนเดสก์ท็อป โดยทั่วไปแล้ว การป้อนข้อมูลยานพาหนะเริ่มต้นจะเป็น W/S สำหรับเดินหน้าและถอยหลัง และ A/D สำหรับการบังคับเลี้ยว ขึ้นอยู่กับการตั้งค่าการควบคุมของประสบการณ์การใช้งานของคุณ สังเกตการหมุนของล้อ ทิศทาง การเลี้ยว และการชนกันบนพื้นที่ทดสอบขนาดใหญ่และเรียบ เปลี่ยนการตั้งค่าทีละอย่าง:
รถเคลื่อนที่ถอยหลัง: กลับทิศทางของความเร็วเชิงมุมของมอเตอร์ด้านหลัง หรือพลิกแกนยึดเพลาล้อหลังทั้งสองข้างพร้อมกัน
การควบคุมทิศทางกลับด้าน: ลบเครื่องหมายลบออกก่อนหน้าsteerในสคริปต์
ล้อหมุนแต่ตัวถังอยู่กับที่: ตรวจสอบให้แน่ใจว่าแชสซีไม่ได้ยึดติดอยู่กับที่ บานพับด้านหลังเชื่อมต่อกับชิ้นส่วนที่ถูกต้อง และยางสัมผัสพื้น
รถสั่นหรือพลิกคว่ำ: ลดระดับตัวถัง ลดแรงบิดหรือมุมการเลี้ยว และทำให้แผงตกแต่งไม่สามารถชนกับตัวถังได้
ด้านหน้าไม่สามารถบังคับเลี้ยวได้: ตรวจสอบว่าบานพับเซอร์โวแต่ละตัวใช้จุดยึดแนวตั้งของดุมล้อ ไม่ใช่จุดยึดเพลาล้อ
เมื่อตัวรถพื้นฐานใช้งานได้แล้ว ให้เพิ่มชิ้นส่วนไฟหน้าและไฟท้าย วัตถุเสียงสำหรับเสียงเครื่องยนต์ หรือตัวปล่อยอนุภาคสำหรับเสียงไอเสีย การอัพเกรดระบบช่วงล่างที่แท้จริงนั้นต้องใช้สปริงหรือข้อจำกัดของระบบช่วงล่างและการปรับแต่งเพิ่มเติมรถเริ่มต้นใน Roblox Studio คันนี้ เน้นที่แชสซีที่มั่นคง ล้อที่หมุนได้ และพวงมาลัยที่ตอบสนองได้ดี
การทดสอบการเล่นจะตรวจสอบว่ายานพาหนะเคลื่อนที่ไปข้างหน้า เลี้ยว และรักษาให้ล้ออยู่บนถนนได้หรือไม่
เหตุผลที่การสร้างนี้ได้ผล
วิธีการเดิมที่เชื่อมล้อแต่ละล้อเข้ากับตัวถังจะทำให้ล้อหมุนไม่ได้ และ VehicleSeat เพียงอย่างเดียวก็ไม่รับประกันการควบคุมล้อที่เชื่อมต่อด้วยบานพับ การออกแบบนี้แยกหน้าที่ออกเป็นส่วนๆ: WeldConstraints ยึดตัวถังและที่นั่งให้มั่นคง HingeConstraints ให้การหมุนและการบังคับเลี้ยว และสคริปต์ฝั่งเซิร์ฟเวอร์จะแมปอินพุตของผู้เล่นไปยังตัวกระตุ้นเหล่านั้น เริ่มต้นด้วยรูปทรงเรขาคณิตและการตั้งค่าที่นี่ จากนั้นปรับแรงบิดของมอเตอร์และมุมการบังคับเลี้ยวให้เข้ากับมวลและขนาดของรถของคุณ
ข้อมูลอ้างอิงอย่างเป็นทางการของ Roblox