หน้านี้มีข้อมูลที่จะช่วยให้นักพัฒนา Unity ที่มีประสบการณ์เริ่มต้นกับ Roblox: การจัดเรียงพื้นฐานการเปรียบเทียบแนวคิด และความแตกต่างที่สำคัญระหว่างสองแพลตฟอร์ม
ได้รับการจัดทิศทาง
หน้าต่างระดับชั้นของ Unity และ สํารวจ ของ Roblox Studio เป็นหน้าต่างหลักสําหรับจัดระเบียบองค์ประกอบในฉาก 3D:
- ทั้งสองอนุญาตให้คุณจัดการและจัดระเบียบวัตถุ (ตัวอย่างเช่นตัวละครและทรัพยากรสิ่งแวดล้อม)
- ทั้งคู่ใช้โครงสร้างต้นไม้สำหรับความสัมพันธ์ระหว่างพ่อและลูกระหว่างวัตถุ
อย่างไรก็ตาม หน้าต่างระดับชั้นไม่มีโครงสร้างที่กําหนดไว้ล่วงหน้า ในขณะที่หน้าต่าง Explorer มีโครงสร้างที่เคร่งครัดมันอาจช่วยให้คิดถึงหน้าต่าง Explorer เป็นการผสมผสานระหว่างหน้าต่าง Hierarchy และ Project ของ Unity พร้อมกับไดเรกทอรี Workspace เป็นองค์ประกอบที่สามารถรู้จักได้มากที่สุด
เช่นเดียวกับ Roblox Studio ผู้จัดการทรัพยากร และ กล่องเครื่องมือ ซ้อนทับกับหน้าต่างโครงการ Unityผู้จัดการสินทรัพย์ช่วยให้คุณจัดการทรัพยากรทั้งหมดภายในประสบการณ์ของคุณในขณะที่กล่องเครื่องมือช่วยให้คุณเข้าถึงทรัพยากรที่คุณเผยแพร่ได้กล่องเครื่องมือยังช่วยให้คุณค้นหาร้านค้าผู้สร้างสำหรับสินทรัพย์จาก Roblox หรือชุมชนเช่นเดียวกับร้านค้าสินทรัพย์ของ Unity
ความแตกต่างทางปรัชญา
Roblox เป็น "เครื่องจำลอง" มากกว่าเครื่องเกมแบบดั้งเดิมUnity GameObjects และ Roblox Parts ทั้งสองให้บริการเป็นบล็อกการสร้างพื้นฐานสำหรับการสร้างวัตถุในสภาพแวดล้อม 3D แต่ในการปฏิบัติทั้งสองแตกต่างกันอย่างมาก:
- การแสดงเอกลักษณ์ : GameObjects ใน Unity เป็นแนวคิดระดับสูงสำหรับวัตถุในฉากใดๆ ในขณะที่ Parts ใน Roblox ออกแบบมาเพื่อแทนที่วัตถุทางกายภาพเช่นบล็อกไม้และลูกบอลพลาสติกแทนที่จะเป็นภาพเหมือนทางภูมิศาสตร์เช่นวัตถุพื้นฐานใน Unity
- ฟิสิกส์ : เพื่อดำเนินการจำลองฟิสิกส์ใน Unity คุณต่อส่วนประกอบเช่น Rigidbody และ Collider ไปยัง GameObjectใน Roblox พิมพ์Parts โดยอัตโนมัติ; เครื่องจัดการการโต้ตอบโดยอัตโนมัติ
คุณสามารถเห็นความแตกต่างได้ทันทีหากคุณสร้าง GameObject และ PartThe GameObject ไม่มีอะไรมากกว่าตำแหน่ง การหมุน และการขยายเวลาThe Part มีข้อมูลเดียวกัน—บวกกับวัสดุและสี, ค่าสะท้อนแสงและความโปร่งใส, มวลและรูปร่าง, และอื่นๆ อีกมากมายการแปลง ให้เป็นบางอย่างที่คล้ายกับว่างเปล่า หมายถึงการลบ คุณสมบัติที่สร้างไว้มากมายในทางกลับกันคุณสามารถสร้าง GameObject ที่ดูเหมือนกับ Part โดยเพิ่ม MeshFilter , MeshRenderer , Collider และ Rigidbody ส่วนประกอบให้กับมัน
จากมุมมองของการเขียนสคริปต์ GameObject มีความคล้ายคลึงกับ Roblox Instance มากที่สุด แต่เนื่องจากคุณไม่ได้สร้างวัตถุประเภท Instance ดังนั้นการเปรียบเทียบจึงไม่ค่อยมีประโยชน์
การเปรียบเทียบอีกอย่างหนึ่งคือ Unity GameObject กับ Roblox Modelโมเดลทำหน้าที่เป็นภาชนะสำหรับคอลเลกชันของชิ้นส่วนที่เชื่อมต่อกันในลักษณะเดียวกับที่คุณอาจสร้างความสัมพันธ์ระหว่างพ่อลูกระหว่างหลาย GameObjects ใน Unityคุณระบุหนึ่งในส่วนของโมเดลเป็นส่วนหลักของมัน เพื่อกำหนดจุดศูนย์กลาง เพื่อกำหนดจุดหมุนรูปแบบยังเก็บสคริปต์ แอนิเมชัน เอฟเฟกต์เสียง คําแนะนํา ข้อจํากัด ตัวปล่อยอนุภาค และอื่นๆ
ตัวอย่างเช่น Unity GameObject อาจมีส่วนประกอบสำหรับ ParticleSystem , Physics3D , SpringConstraint และสคริปต์ในหน้าต่างระดับชั้น คุณเห็นเดี่ยว GameObject ที่ชื่อว่า SpringyFireballหน้าต่างนักตรวจสอบแสดงคอลเลกชันของส่วนประกอบและคุณสมบัติ
ใน Roblox รูปแบบที่เทียบเท่า SpringyFireball ในหน้าต่าง Explorer อาจดูเหมือนอะไรบางอย่างเช่นนี้:
Model|- ParticleEmitter|- MeshPart|- SpringConstraint|- ClickDetector| |- Script
ปรัชญาทางกายภาพเริ่มต้นของ Roblox ขยายไปสู่กระบวนการสร้างรูปแบบ 3Dใน Roblox การเชื่อมต่อชิ้นส่วนหลายชิ้นเข้าด้วยกันเป็นส่วนประกอบ การประกอบ เป็นวิธีที่ดีในการสร้างสิ่งต่างๆ อย่างรวดเร็วเพราะ Roblox จะปฏิบัติต่อชิ้นส่วนที่เชื่อมต่อกันเป็นร่างกายแข็งเดียววิธีนี้ไม่สามารถใช้ได้ใน Unity
แทนที่จะใช้หน่วยมาตรฐานสำหรับความยาวและมวล Roblox ใช้หน่วยที่คิดถึงชื่อว่าสตัดและหน่วยมวลของ Roblox (RMUs)สำหรับการแปลงและคำแนะนำเกี่ยวกับเมตริกที่ใกล้เคียงและการใช้งาน ดู หน่วย
เรื่องสถานที่สำคัญ
ประสบการณ์ Roblox เป็นผู้เล่นหลายคนโดยค่าเริ่มต้น ดังนั้น Roblox Studio จะรวมถึงสถานที่จัดเก็บหลายแห่งที่มีพฤติกรรมที่แตกต่างกันตัวอย่างเช่น สคริปต์อาจจะทำงานเมื่อคุณใส่ลงใน ReplicatedStorage แต่ไม่ใช่เมื่อคุณใส่ลงใน StarterPlayerScriptsสำหรับข้อมูลเพิ่มเติม ดู การทำงานระหว่างไคลเอนต์และเซิร์ฟเวอร์ และ การจัดองค์ประกอบวัตถุ
สถานที่ | คําอธิบาย :--- | :--- พื้นที่ทํางาน | แทนที่โลกเกมตำแหน่งนี้ทำงานได้ดีสำหรับสคริปต์เซิร์ฟเวอร์ที่แนบกับวัตถุและควบคุมพฤติกรรมของพวกเขาโดยตรงReplicatedFirst | มีวัตถุที่สําเนาไปยังไคลเอนต์ก่อนสิ่งอื่นใดตำแหน่งนี้เหมาะสำหรับชุดของวัตถุและสคริปต์คลาสสิกที่จำเป็นสำหรับการแสดงหน้าจอโหลดสตอเรจที่ซ้ำกัน | มีวัตถุที่ถูกสําเนาไปยังทั้งไคลเอนต์และเซิร์ฟเวอร์ตำแหน่งนี้เหมาะสำหรับ Class.ModuleScript\|ModuleScripts ที่คุณต้องการใช้ทั้งในเซิร์ฟเวอร์และไคลเอนต์Class.LocalScript\|LocalScripts ไม่ได้หนีออกจากตำแหน่งนี้ แต่ Class.Script\|Scripts ด้วยบริบทการทำงานของ Client ทำServerScriptService | มีสคริปต์เซิร์ฟเวอร์ คอนเทนต์ตำแหน่งนี้เหมาะสำหรับสคริปต์ที่ต้องการเข้าถึงฟังก์ชันหรือวัตถุด้านเซิร์ฟเวอร์ เช่น โลจิสติกเกมและการจัดเก็บของเมฆStorage เซิร์ฟเวอร์ | มีวัตถุด้านเซิร์ฟเวอร์ตำแหน่งนี้เหมาะสำหรับวัตถุขนาดใหญ่ที่ไม่จำเป็นต้องสร้างซ้ำทันทีให้กับลูกค้าเมื่อพวกเขาเข้าร่วมประสบการณ์สคริปต์ไม่ได้รันจากตำแหน่งนี้ แต่คุณสามารถเก็บไว้ที่ด้านเซิร์ฟเวอร์ Class.ModuleScript\|ModuleScripts ที่นี่StarterPlayer.StarterCharacterScripts | มี Class.LocalScript\|LocalScripts ที่เรียกใช้เมื่อตัวละครเกิดStarterPlayer.StarterPlayerScripts | มีสคริปต์ทั่วไป Class.LocalScript\|LocalScripts ที่เรียกใช้เมื่อผู้เล่นเข้าร่วมประสบการณ์StarterGui | มีองค์ประกอบ GUI ที่ลูกค้าแสดงเมื่อโหลดเกมClass.LocalScript\|LocalScripts สามารถวิ่งจากตำแหน่งนี้ได้ตำแหน่งนี้เหมาะสำหรับสคริปต์ที่แก้ไขอินเทอร์เฟซผู้ใช้ของเกม เช่น เพิ่มปุ่ม เมนู และป๊อปอัพแพ็คเริ่มต้น | โดยทั่วไปจะมีเฉพาะ Class.Tool\|Tools เท่านั้น แต่ยังสามารถรวมถึง Class.LocalScript\|LocalScripts สำหรับการตั้งค่ากระเป๋าผู้เล่น
สคริปต์
ประสบการณ์ของ Roblox สนับสนุนสคริปต์ Luau สามประเภทที่แตกต่างกัน:
สคริปต์ของไคลเอนต์
สคริปต์เหล่านี้ทำงานบนไคลเอนต์ และเซิร์ฟเวอร์ไม่มีวิสัยทัศน์ในพฤติกรรมของพวกเขาเนื่องจากเหตุผลด้านมรดก สคริปต์เหล่านี้สามารถใช้รูปแบบของ LocalScripts หรือ Scripts ด้วยค่า RunContext ของ Clientสคริปต์ไคลเอนต์มักอาศัยอยู่ใน ReplicatedStorage , StarterPlayerScripts หรือ StarterCharacterScripts
สคริปต์เซิร์ฟเวอร์
สคริปต์เหล่านี้ทำงานบนเซิร์ฟเวอร์และไคลเอนต์ไม่มีวิสัยทัศน์ในพฤติกรรมของพวกเขาสคริปต์เซิร์ฟเวอร์มีค่า RunContext ของ Server และมักจะอยู่ใน ServerScriptService ซึ่งเนื้อหาไม่ถูกสําเนาไปยังไคลเอนต์เกม
สคริปต์โมดูล
สคริปต์เหล่านี้เป็นชิ้นส่วนโค้ดที่ใช้ซ้ำได้ที่ส่งคืนค่าเดียวอย่างถูกต้อง โดยปกติเป็นฟังก์ชันหรือตาราง (หรือตารางของฟังก์ชัน)แทนที่จะทำซ้ำโค้ดในสคริปต์ไคลเอนต์และเซิร์ฟเวอร์ใช้สคริปต์โมดูลเพื่อแบ่งปันโค้ดและข้อมูลระหว่างทั้งสองสคริปต์โมดูลมักอาศัยอยู่ใน ReplicatedStorage แต่สามารถอาศัยอยู่ที่อื่นได้หากคุณต้องการแบ่งปันโค้ดระหว่างสคริปต์ในด้านเดียวกันของขอบเขตไคลเอนต์-เซิร์ฟเวอร์
Unity ไม่มีแนวคิดเกี่ยวกับประเภทสคริปต์ที่แตกต่างกันหากคุณเลือกที่จะสร้างเกมผู้เล่นหลายคน Unity ใช้ห้องสมุดเครือข่ายของตนเพื่อระบุเมื่อ GameObject (และสคริปต์ของมัน) ควรจะเป็นสิทธิพิเศษสำหรับเซิร์ฟเวอร์
ใน Unity ฟังก์ชันส่วนใหญ่ของเครื่องยนต์สามารถใช้ได้ผ่านวิธีการของ MonoBehaviourตัวอย่างเช่น เพื่อรันโค้ดก่อนรอบการเรนเดอร์ คุณเพิ่มโค้ดในวิธี Update()เพื่อจัดการอีเวนต์การชนกันทางฟิสิกส์คุณเพิ่มโค้ดในวิธี OnCollideEnter()
สคริปต์ Roblox มีการขับเคลื่อนด้วยอีเวนต์มากขึ้น คุณสามารถเข้าถึงฟังก์ชันที่คล้ายกันได้โดยการสมัครรับบริการและรอฟังการอัปเดต
C# และ Luau
scriptingUnity ใช้ C# Roblox ใช้ Luau ภาษาเขียนโค้ดที่ได้รับมาจาก Lua 5.1
เมื่อเทียบกับ C# Luau จะถูกพิมพ์อย่างค่อยเป็นค่อยไปและมักจะมีคำสั่งซ้ำน้อยกว่าในโครงการขนาดใหญ่, อย่างไรก็ตาม, การพิมพ์แบบค่อยๆ สามารถแนะนำประเภทของข้อบกพร่องที่พิมพ์แบบเขียนแข็งแกร่งเช่น C# หลีกเลี่ยงได้, ดังนั้นพิจารณาเปิดใช้งาน การตรวจสอบประเภทที่เคร่งครัด ในสคริปต์ Roblox
สำหรับความแตกต่างด้านสัญลักษณ์พื้นฐานระหว่างภาษาการเขียนโค้ด ดู การเปรียบเทียบ Luau และ C#
ตัวอย่างโค้ด Luau
ตัวอย่างโค้ด Luau ต่อไปนี้แสดงวิธีการหลังจากที่ผู้เล่นใช้เบ็ดตกปลาฟังการใส่ข้อมูลของผู้ใช้ (ในกรณีนี้คือแป้น E คีย์) และเรียกฟังก์ชันเพิ่มเติม:
-- รับบริการเกมที่จำเป็น
local ContextActionService = game:GetService("ContextActionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- รับสคริปต์โมดูลจาก ReplicatedStorage ที่ส่งคืนฟังก์ชันเดียว
local performSomeAction = require(ReplicatedStorage.performSomeAction)
-- เสนอว่าสคริปต์นี้เป็นลูกของเสาตกปลา
local fishingPole = script.Parent
local ACTION_CAST = "Cast"
-- ตรวจสอบว่ากุญแจอยู่ด้านล่างแล้วโทรหาฟังก์ชันอื่น
local function castLine(_actionName, inputState, _inputObject)
if inputState == Enum.UserInputState.Begin then
performSomeAction()
end
end
-- เปิดใช้งานการดำเนินการเฉพาะเมื่อผู้เล่นสวมใส่เบ็ดตกปลา
fishingPole.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_CAST, castLine, true, Enum.KeyCode.E)
end)
-- ปิดการดำเนินการเมื่อผู้เล่นถอดเบ็ดตกปลา
fishingPole.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_CAST)
end)
สคริปต์ Roblox สามารถสั้นลงได้เพราะ Roblox มีการเสนอสมมติฐานที่ฝังอยู่มากมาย: a Player ที่มีตัวอักษร Humanoid เชื่อมต่อกับเซิร์ฟเวอร์และสามารถติดตั้ง Tools ได้สมมติฐานเหล่านี้ไม่มีอยู่ใน Unity ดังนั้นการดำเนินการจะแตกต่างอย่างมาก
สินทรัพย์
ทั้ง Unity และ Roblox สนับสนุนการนำเข้าเมชและโมเดลที่กําหนดเองในรูปแบบ .fbxบางประเภทของสินทรัพย์อาจต้องการการกำหนดค่าและการตั้งค่าการส่งออกเฉพาะจากซอฟต์แวร์จำลองบุคคลที่สามของคุณสำหรับข้อมูลเพิ่มเติม ดูหน้าต่อไปนี้:
ใน Unity วัตถุจะนำเข้าสู่ไดเรกทอรีของคุณ Assets ที่สามารถมองเห็นได้ในหน้าต่างโครงการใน Roblox สินทรัพย์จะนำเข้าสู่พื้นที่ทำงานของคุณและในส่วน กล่องเครื่องมือ หรือ สินค้าคงคลัง ของ ผู้จัดการสินทรัพย์
Roblox ยังเสนอ ปลั๊กอินบล็อกเกอร์โอเพนซอร์ส เพื่อลดขั้นตอนการนำเข้า
เปลี่ยนแปลง
การเปลี่ยนแปลงของ props.engine และ Roblox's CFrames ให้วัตถุประสงค์ที่คล้ายกันในการแสดงการเปลี่ยนแปลง 3D ของวัตถุ:
- ทั้งสองเทรนด์และ CFrames แทนที่ตำแหน่งและการหมุนของวัตถุในพื้นที่ 3Dการเปลี่ยนแปลงรวมถึงการเพิ่มขนาด ในขณะที่ Roblox ใช้คุณสมบัติ BasePart.Size ที่ไม่เป็นส่วนหนึ่งของ CFrame
- ทั้งสองสนับสนุนการคูณ (เช่น การจัดทำ) สำหรับการเปลี่ยนแปลงที่ซับซ้อนและมีวิธีในตัวสำหรับการจัดการอื่นๆ
ความร่วมมือ
ใน Unity คุณร่วมมือกับระบบควบคุมเวอร์ชันมาตรฐานหรือบริการจ่ายเงินเช่น Unity Version Control
ไฟล์ Roblox อาศัยอยู่ในคลาวด์ (แม้ว่าคุณจะสามารถส่งสำเนาได้) ดังนั้น Roblox Studio จะให้กระบวนการทำงานร่วมกันแบบในตัวสำหรับการแก้ไขพร้อมกัน การจัดการกลุ่ม สิทธิ์ การร่างสคริปต์ และอื่นๆดู การร่วมมือ
ปลั๊กอิน
คล้ายกับเครื่องมือของ Unity Roblox Studio สนับสนุน ปลั๊กอิน ซึ่งสามารถลดความซับซ้อนหรือให้ควบคุมเพิ่มเติมในด้านต่างๆ ของกระบวนการพัฒนาได้ปลั๊กอินมีอยู่ในร้านค้าของผู้สร้างเช่นเดียวกับสินทรัพย์หลายอย่างฟรี
สารานุกรม
| ความสามัคคี | Roblox | โน้ต | | :--- | :--- | :--- | | ฉาก | สถานที่ | | | GameObject | Part หรือ Model | ดู ความแตกต่างทางปัญญาวิทยาศาสตร์ .| | Prefab | แพคเกจ | | | เปลี่ยนรูป | CFrame | CFrame ไม่รวมข้อมูลเกี่ยวกับเครื่องชั่งดู การเปลี่ยนรูป| | หน้าต่างระดับชั้น | หน้าต่างสํารวจ | | | ผู้ตรวจสอบ | หน้าต่างคุณสมบัติ | | มุมมองฉาก | พอร์ต | | | มุมมองเกม | พอร์ต | พอร์ตจะเปลี่ยนเป็นมุมมองเกมเมื่อคุณทดสอบประสบการณ์ของคุณ| | หน้าต่างโครงการ | ผู้จัดการสินทรัพย์ หรือ กล่องเครื่องมือ | | | ผู้ตรวจสอบพื้นที่ | บรรณาธิการพื้นที่ | | | จุดเกิด | SpawnLocation | | | คอนโซล | ออก | | | ร้านค้าสินทรัพย์ | | | | โอเวอร์เลย์ | แถบเมนู | | | เครื่องมือ | ปลั๊กอิน | | | คลาสสิก | คลาสสิกเพิ่มเติม | | | คลาสสิก | คลาสสิกเพิ่มเติม | | | คลาสสิก | คลาสสิกเพิ่มเติม | | | คลาสสิก | คลาสสิกเพิ่มเติม | | | คลาสสิก | คลาสสิกเพิ่มเติม | |