สำหรับคำอธิบายรายละเอียดที่แท้จริงฉันขอแนะนำให้อ่านสถาปัตยกรรม Engine Game Engineหนึ่งและพระคัมภีร์เท่านั้นโดย Jason Gregory ฉันเดาว่ามันเป็นงานที่สมบูรณ์ที่สุดเกี่ยวกับหัวข้อนี้ตั้งแต่เผยแพร่ มันไม่เพียง แต่จัดการกับส่วน C ++ เท่านั้น แต่ยังมีความสำคัญกับโปรแกรมเมอร์ / นักพัฒนาเกมทุกคนที่เกี่ยวกับทฤษฎี / สถาปัตยกรรม มันเป็นจุดเริ่มต้นที่ดีที่เป็นอิสระจากภาษา เพื่อรับภาพรวมสิ่งที่เรากำลังพูดถึงคือภาพจากหนังสือเล่มนี้
ให้ฉันลองทำดูเพื่อตอบคำถาม
สิ่งที่คุณเขียนจะเป็นรหัส :-) หลังจากมีประสบการณ์เขียนสิ่งที่คุณต้องการและวิธีที่คุณต้องการหรือใช้สิ่งที่ให้สิ่งที่คุณต้องการ
เงื่อนไขการใช้บริการเครื่องมือและกรอบมาจากสถาปัตยกรรมซอฟต์แวร์พร้อมกับคำอื่น ๆ ดังนั้นเริ่มต้นด้วยคำศัพท์พื้นฐานและให้เลื่อนขึ้น
ห้องสมุด
ตัวอย่างทั่วไป: ห้องสมุดคณิตศาสตร์ที่ให้บริการประเภทและฟังก์ชันพื้นฐานทั้งหมดสำหรับการคำนวณทางคณิตศาสตร์ (Vector, Matrix, ... ) หรือห้องสมุดภาพ (jpeg หรือ png) ที่มีฟังก์ชันการทำงานสำหรับการเขียนภาพ jpeg หรือ png
ใน Unity 3D Mathเป็นบรรณารักษ์ทางคณิตศาสตร์
ทฤษฎีที่: libray มีคุณสมบัติเฉพาะรอบหัวข้อ (เช่นคณิตศาสตร์) และจะเรียกว่าโดยโปรแกรมเมอร์ตามความต้องการ
ตัวอย่างบางส่วน: อาจมีไลบรารีที่ถือเฟรมเวิร์กหรือเป็นเฟรมเวิร์กไลบรารี
กรอบ
ทฤษฎี: กรอบแนะนำการผกผันของการควบคุม ซึ่งหมายความว่านักพัฒนาส่วนใหญ่ไม่ได้เรียกวิธีการกรอบ แต่กรอบเรียกรหัสของนักพัฒนา ข้อยกเว้นคือเมื่อคุณต้องรวมไลบรารีเฟรมเวิร์กในโค้ดของคุณและต้องเริ่มเฟรมเวิร์ก เฟรมเวิร์กไลบรารีจัดเตรียมเมธอดและฟังก์ชันและอินเตอร์เฟสทั้งหมดสำหรับเฟรมเวิร์กที่มีการใช้งานเฉพาะ ดังนั้นกรอบสามารถอยู่ในห้องสมุด
ตัวอย่างทั่วไป: Unity 3D MonoBehaviourมีวิธีการต่าง ๆ เช่นตื่น, เริ่ม, OnUpdate นักพัฒนาใช้วิธีการเหล่านี้แล้ววิธีการเหล่านี้ได้รับการเรียกโดย (เกมการจัดการวัตถุ) กรอบ (นี่คือการผกผันของการควบคุม) เช่นเดียวกับวิธีการ OnCollisionEnter, OnCollisionExit พวกเขาอยู่ใน Monobehaviour เดียวกัน แต่ฉันจะเดิมพันพวกเขาถูกเรียกโดยกรอบฟิสิกส์
ตัวอย่าง: เอ็นจิ้น, รันไทม์, Editor, SDK
เนื่องจากคำว่า engine นั้นค่อนข้างคลุมเครืออยู่ตลอดเวลาและยังคงเป็นเช่นนั้น (และมันก็ไม่ได้ดีขึ้นเมื่อมีการพัฒนาทางเทคโนโลยีเพิ่มเติม) คำอธิบายตัวอย่างบางส่วน
เอ็นจิ้นระยะใช้สำหรับหลายสิ่งและไม่สามารถพูดได้อย่างไม่ซ้ำใครว่าอะไรถูก ย้อนกลับไปในปี 2004 เมื่อฉันได้ติดต่อการเขียนเอ็นจิ้นเกมครั้งแรกมันก็คลุมเครือเช่นกัน คุณมีเอ็นจิ้นเกมตามความหมายของการโหลดข้อมูลที่กำหนดไว้ล่วงหน้าและให้คุณเล่นเกม เนื่องจากมันโหลดข้อมูลที่กำหนดไว้ล่วงหน้าพวกเขาจึงถูกเรียกว่าเอ็นจิ้นที่ขับเคลื่อนด้วยข้อมูล คุณรวบรวมพวกเขาเพียงครั้งเดียวและข้อมูลภายนอกอาจเป็นเกมที่แตกต่างกันโดยไม่ต้องคอมไพล์ใหม่ ในบางช่วงเวลาสิ่งนี้ก็เหมือนกับรันไทม์
บรรณาธิการมีความชัดเจน ช่วยให้คุณกำหนดข้อมูลที่กำหนดไว้ล่วงหน้าซึ่งโหลดโดยเอ็นจิน / รันไทม์
เอ็นจิ้นที่มีโปรแกรมแก้ไขเรียกว่า SDK (เช่น Hammer SDK)
จากนั้นก็มี / เป็นเครื่องมือเฉพาะ เอ็นจิ้น phyiscs, เอ็นจิ้นการเรนเดอร์, เอ็นจิ้นเสียง, เอ็นจิ้น gameobject, เอ็นจิ้นเครือข่าย, ...
ในความเห็นส่วนตัวของฉันมันไม่ใช่เอ็นจิ้น (โดยเฉพาะอย่างยิ่งเอ็นจิ้นเรนเดอร์ไม่ใช่เอ็นจิ้นเกม เมื่อฉันใช้เครื่องมือเกม google ผลลัพธ์ประกอบด้วยเอ็นจิ้นการเรนเดอร์ที่บริสุทธิ์ 90% ซึ่งไม่ใช่เอ็นจิ้นเกม ฉันจะเรียกห้องสมุดทั้งหมดของพวกเขา แต่เนื่องจากพวกเขาอาจโหลดข้อมูลที่กำหนดไว้ล่วงหน้าพวกเขาจะตรงกับคำที่ขับเคลื่อนด้วยข้อมูลเครื่องยนต์
บันทึกย่อสั้น ๆ ก่อนที่เราจะได้รับรายละเอียด: ฉันสำเร็จการศึกษาระดับปริญญาโทด้านวิทยาศาสตร์คอมพิวเตอร์ วิทยานิพนธ์ปริญญาโทของฉันจัดการกับหัวข้อ "วิธีการพัฒนาแกนของเอ็นจิ้นเกม" ความหมายของส่วนของรหัสที่ปมกันทั้งหมดเอ็นจินอื่น ๆ การจัดการวัตถุเกมวงเกม ฯลฯ ...
ฉันตีพิมพ์วิทยานิพนธ์หลักของฉันเป็นหนังสือ (สั้น) ความคิดเห็นเดียวของ Amazon จากผู้ซื้อ / ผู้อ่านคือ (หลังจากไม่กี่ปีที่ผ่านมา): นี่ไม่เกี่ยวกับเอ็นจิ้นเกม เนื่องจากฉันสำเร็จการศึกษามาแล้วและได้ปกป้องวิทยานิพนธ์ของฉันกับโปรแกรมเมอร์ที่มีประสบการณ์ 3 คน (2 คนเป็นผู้ทุ่มเทให้กับเกมและแอปพลิเคชั่นแบบโต้ตอบ) ฉันเดาว่าฉันได้เขียนโปรแกรมเกม
บรรณาธิการ
ง่าย ๆ : ช่วยให้คุณกำหนดข้อมูลในรูปแบบที่ส่วนอื่น ๆ ต้องการและลดความต้องการในการเขียนไฟล์เหล่านั้นด้วยมือหรือใช้เครื่องมือภายนอกเพื่อสร้าง
นี่คือสิ่งที่ตัวแก้ไข Unity 3D ทำ
Runtime
คำนี้มักจะใช้อย่างเท่าเทียมกันกับเครื่องยนต์ (ซึ่งสามารถถูกต้องหรือไม่ถูกต้อง)
รันไทม์ดำเนินการข้อมูลที่สร้างขึ้นและทำสิ่งที่เกี่ยวข้องกับข้อมูล เช่นแสดงเกมและให้คุณเล่นเกม มันไม่ได้สร้างข้อมูลใด ๆ (ยกเว้นอาจจะบันทึกเกม) ในความหมายที่คุณไม่สามารถแก้ไขเกมด้วยตัวเอง
Unity Web Player คือ / เป็นรันไทม์ให้คุณเล่นเกม Unity ภายในเว็บเบราว์เซอร์
คุณสามารถโหลดและรันเกมที่แตกต่างกันหลายเกมด้วยรันไทม์เดียวกัน
ในกรณีของ Unity 3D scripting API จะมีการตัดการทำงานระหว่างเกมและการทำงานที่จะทำงานภายในโปรแกรมแก้ไขเท่านั้น
SDK
ระยะนี้มักจะถูกเรียกว่ากรอบ
ย้อนกลับไปแล้ว SDK เป็นชุดเครื่องมือเช่นตัวแก้ไข IDE (สภาพแวดล้อมของนักพัฒนาแบบรวม) สำหรับโปรแกรมเมอร์ผู้ส่งออกสำหรับ dataformats และรันไทม์ / เอ็นจิ้น
ดังนั้น SDK / framework ช่วยให้คุณมีเวิร์กโฟลว์และยูทิลิตี้ที่กำหนดไว้ล่วงหน้าและแสดงวิธีการที่คุณสามารถสร้างเกมได้อย่างง่ายดาย
เอนจิ้น Unity 3D โดยทั่วไปจะผิดเพราะมันจะเข้ากับทิศทาง SDK ได้มากกว่า แต่เนื่องจากความเป็นเอกภาพยิ่งขึ้นจึงจำเป็นต้องมีคำ / คำนิยามใหม่เพื่อให้ตรงกับที่เป็นอยู่
อย่างไรก็ตามเพื่อแนะนำคำอื่น ๆ SDK / เฟรมเวิร์กให้คุณพัฒนาเกมไปป์ไลน์ที่กำหนดไว้ล่วงหน้า (ไม่เพียง แต่ไปป์ไลน์สินทรัพย์ แต่อาจเช่น Unity ไปป์ไลน์สำหรับสินทรัพย์ตรรกะการสร้างการปรับใช้ .... )
เครื่องยนต์
sarcasm onใช้สำหรับทุกสิ่งเพราะทุกคนต้องการความเท่ห์โดยการเขียนไม่เพียง แต่ไลบรารีเฟรมเวิร์กหรือเกม แต่ควรเขียนเอ็นจิ้นสมบูรณ์ ประชดประชัน
ทริกเกอร์มันลง:
เครื่องยนต์
- เป็นชิ้นส่วนของรหัส / ซอฟต์แวร์
- มีวัตถุประสงค์เพื่อนำกลับมาใช้ใหม่ในหลายโครงการ (คุณสามารถเขียนเอ็นจิ้นเกมสำหรับเกมเดียวเท่านั้น)
- สำหรับการถูกนำมาใช้ใหม่เอ็นจิ้นเกมแยกส่วนที่นำกลับมาใช้ใหม่ได้จากส่วนเฉพาะของเกม
- สำหรับการนำมาใช้ซ้ำ (ขึ้นอยู่กับว่าจะนำมาใช้ซ้ำ) มีรสชาติที่แตกต่างกันเช่นเครื่องมือขับเคลื่อนข้อมูลที่โหลดข้อมูลภายนอก
เอ็นจิ้นสามารถประกอบไปด้วยเอ็นจิ้นอื่น ๆ หลายรายการ (เนื่องจากทุกสิ่งถูกเรียกว่าเอ็นจิ้นในปัจจุบัน) เอ็นจิ้นเกมสามารถรวม
- เอ็นจิ้นการเรนเดอร์ทำการเรนเดอร์ (อีกครั้ง: เทพเจ้าเอ๊ยนรก: โค้ดที่ทำการเรนเดอร์เท่านั้นไม่ใช่เอ็นจิ้นเกม)
- เอนจิ้นฟิสิกส์ที่ทำฟิสิกส์ (เป็นเอนจิ้นฟิสิกส์ไม่ใช่เครื่องมือเกม)
- เครื่องมือ AI จัดการสิ่งของ AI (เป็นเครื่องมือ AI และไม่ใช่เครื่องมือเกม)
- เอ็นจิ้นเครือข่าย (เช่น RakNet) ทำสิ่งในเครือข่าย (เป็นเอ็นจิ้นเครือข่ายไม่ใช่เอ็นจิ้นเกม)
- เอ็นจินเสียงทำสิ่งที่เสียง (มันเป็นเอ็นจิ้นเสียงและไม่ใช่เอ็นจิ้นเกม)
ตัวอย่างสำหรับแอปพลิเคชันที่ยึดตามเอ็นจิ้นหลักที่จัดเตรียมปลั๊กอินเฟรมเวิร์กสำหรับการรวมทุกอย่างเข้าด้วยกันในรูปแบบการจัดการวัตถุของเกมตามส่วนประกอบ แต่ละ Subengine (การเรนเดอร์เสียง) เป็นโมดูลที่เพิ่มเข้ามาในเอ็นจิ้นเกมเป็นส่วนเสริมแต่ละคอมโพเนนต์สามารถเป็นส่วนหนึ่งของ Subengine / โมดูล และการจัดการวัตถุเกม (ตามองค์ประกอบ) คือการเชื่อมต่อระหว่างโมดูลที่แยกกัน
นิยามที่ใกล้เคียงที่สุดสำหรับ Game Engine
เอ็นจิ้นเกมเป็นส่วนหนึ่งของซอร์สโค้ดของเกมของคุณที่มีฟังก์ชั่นทั้งหมดซึ่งมีวัตถุประสงค์เพื่อนำมาใช้ซ้ำในหลาย ๆ เกมและให้คุณใช้รหัสและรันเกมของคุณ ดังนั้นมันจึงรวบรวมส่วนอื่น ๆ ทั้งหมดของรหัส (การเรนเดอร์เสียงฟิสิกส์การจัดการวัตถุเกมการสร้างเครือข่าย) ซึ่งเป็นไลบรารีกรอบงานหรือเอ็นจิ้นเฉพาะ (การเรนเดอร์ฟิสิกส์ ... )
เอ็นจิ้นของเกมเป็นระเบียบอยู่ตรงกลาง