อะไรคือความแตกต่างระหว่างเฟรมเวิร์กเกมและเอ็นจิ้นเกม?


23

อะไรคือความแตกต่างระหว่างเฟรมเวิร์กเกม (ตัวอย่างเช่น XNA กับ C #, SDL สำหรับ c ++) และเอ็นจิ้นเกม

เฟรมเวิร์กของเกมใช้เอ็นจินหรือไม่ เอนจินของเกมห่อหุ้มเอนจิ้นย่อยเช่นเอนจินของฟิสิกส์เครื่องยนต์เอ็นจินหรือไม่? พวกเขาควรจะใช้ร่วมกันหรือพวกเขาเป็นพิเศษร่วมกัน?

ฉันคิดว่ามันมีเอ็นจิ้นแยกต่างหากสำหรับทั้ง 2D และ 3D?


คำตอบ:


21

ไม่มีคำจำกัดความที่เข้มงวดสำหรับ "engine" หรือ "framework"

โดยทั่วไปแล้วเครื่องยนต์ถือว่า "ทำมากกว่า" หรือมีเครื่องมือและการสนับสนุนที่เกี่ยวข้องมากกว่าเฟรมเวิร์กซึ่งตัวมันเองนั้นมักจะเป็นเพียงชุดของฟังก์ชันที่เกี่ยวข้องที่เปิดเผยผ่าน API แบบรวมบางส่วน

ด้วยเหตุนี้สิ่งต่าง ๆ ที่อ้างว่าเป็นเอ็นจิ้นอาจใช้สิ่งที่อ้างว่าเป็นเฟรมเวิร์กเพื่อให้เกิดการทำงาน แต่ไม่จำเป็นต้องเป็นอย่างนั้นเสมอไป ในทำนองเดียวกันสิ่งที่อ้างว่าเป็นเอ็นจิ้นเกมสามารถอ้างได้ว่ามันเป็นส่วนที่เป็นส่วนประกอบ (ฟิสิกส์และการเรนเดอร์และอื่น ๆ ) ถูกนำไปใช้กับเอนจิ้นฟิสิกส์หรือโครงร่างฟิสิกส์ ชนิดของเทคโนโลยีที่อ้างอิงโดยคำทั้งสองสามารถใช้แทนกันได้หรือไม่

สามารถมี "เอนจิ้น" หรือ "กรอบ" สำหรับอะไรก็ได้ - ฟิสิกส์เสียงและใช่แม้กระทั่งกราฟิก 2D หรือ 3D

มันเป็นเพียงแค่คำศัพท์และโดยทั่วไปก็ไม่ได้สำคัญอะไรมาก จากมุมมองของฟังก์ชันการทำงานมุมมองที่มุ่งเน้นในการสร้างเกมของคุณสิ่งที่สำคัญคือเทคโนโลยีที่มีปัญหาจะให้สิ่งที่คุณต้องการในการสร้างเกมของคุณหรือไม่ ไม่ว่าจะเรียกตัวเองว่าเป็นเครื่องยนต์หรือเฟรมเวิร์กจะไม่มีผลกระทบใด ๆ


11

คำจำกัดความง่ายๆที่ฉันใช้: คุณสามารถสร้างเอ็นจินบนเฟรมเวิร์ก แต่คุณจะไม่สร้างเฟรมเวิร์กบนเอ็นจิ้น หนึ่งคือโครงกระดูกที่กำหนดสถาปัตยกรรมและการไหลของโปรแกรมอื่น ๆ คือกล้ามเนื้อที่ทำงาน

ยกตัวอย่างเช่นอาร์ทิมิสเป็นกรอบเล็ก ๆ ที่เรียบร้อยสำหรับการสร้างระบบส่วนประกอบ แต่คุณไม่เคยเรียกมันว่าเป็นเครื่องมือ คุณสามารถสร้างอาร์ทิมิสระบบและส่วนประกอบมาตรฐานเพื่อสร้างเครื่องยนต์จากมัน


1
ใน บริษัท ของฉันมีคนออกแบบเฟรมเวิร์กให้กับเครื่องยนต์ เฟรมเวิร์กนี้ทำหน้าที่เป็นคอลเลกชันของชิ้นส่วนที่ขาดหายไปซึ่งเอ็นจิ้นไม่ได้จัดเตรียมไว้ซึ่งรวมสิ่งต่าง ๆ ที่ไม่เป็นระเบียบในเครื่องมือ (เก่า) ของเรา และให้ผู้ช่วยอำนวยความสะดวกในการพัฒนา
v.oddou

2

เฟรมเวิร์กคือคอลเล็กชันของไลบรารี่ระดับต่ำกว่าและตัวช่วยที่คุณสามารถใช้เพื่อทำสิ่งที่คุณต้องการ (กราฟิกเสียงและอื่น ๆ ) ไม่มีสิ่งใดที่เกี่ยวข้องกับเกมเกี่ยวกับเฟรมเวิร์กยกเว้นว่าพวกเขามักจะปรับให้เหมาะสมหรือออกแบบมาเพื่อทำสิ่งต่าง ๆ ที่พบได้ทั่วไปในเกม

ตัวอย่าง: เอ็นจิ้นอนุญาตให้คุณมีรายการเอนทิตีแต่ละอันมีตำแหน่งบนแผนที่ กรอบช่วยให้คุณแสดงวัตถุ 3 มิติในตำแหน่งที่แน่นอน

ดังนั้นคุณจึงเชื่อมต่อพวกมันด้วยการให้วัตถุสามมิติของเอนทิตีแต่ละอันของคุณและทำให้พวกมันเมื่อจำเป็น

และคุณก็มีเกม


2

สำหรับคำอธิบายรายละเอียดที่แท้จริงฉันขอแนะนำให้อ่านสถาปัตยกรรม 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ใช้สำหรับทุกสิ่งเพราะทุกคนต้องการความเท่ห์โดยการเขียนไม่เพียง แต่ไลบรารีเฟรมเวิร์กหรือเกม แต่ควรเขียนเอ็นจิ้นสมบูรณ์ ประชดประชัน

ทริกเกอร์มันลง:

เครื่องยนต์

  1. เป็นชิ้นส่วนของรหัส / ซอฟต์แวร์
  2. มีวัตถุประสงค์เพื่อนำกลับมาใช้ใหม่ในหลายโครงการ (คุณสามารถเขียนเอ็นจิ้นเกมสำหรับเกมเดียวเท่านั้น)
  3. สำหรับการถูกนำมาใช้ใหม่เอ็นจิ้นเกมแยกส่วนที่นำกลับมาใช้ใหม่ได้จากส่วนเฉพาะของเกม
  4. สำหรับการนำมาใช้ซ้ำ (ขึ้นอยู่กับว่าจะนำมาใช้ซ้ำ) มีรสชาติที่แตกต่างกันเช่นเครื่องมือขับเคลื่อนข้อมูลที่โหลดข้อมูลภายนอก

เอ็นจิ้นสามารถประกอบไปด้วยเอ็นจิ้นอื่น ๆ หลายรายการ (เนื่องจากทุกสิ่งถูกเรียกว่าเอ็นจิ้นในปัจจุบัน) เอ็นจิ้นเกมสามารถรวม

  • เอ็นจิ้นการเรนเดอร์ทำการเรนเดอร์ (อีกครั้ง: เทพเจ้าเอ๊ยนรก: โค้ดที่ทำการเรนเดอร์เท่านั้นไม่ใช่เอ็นจิ้นเกม)
  • เอนจิ้นฟิสิกส์ที่ทำฟิสิกส์ (เป็นเอนจิ้นฟิสิกส์ไม่ใช่เครื่องมือเกม)
  • เครื่องมือ AI จัดการสิ่งของ AI (เป็นเครื่องมือ AI และไม่ใช่เครื่องมือเกม)
  • เอ็นจิ้นเครือข่าย (เช่น RakNet) ทำสิ่งในเครือข่าย (เป็นเอ็นจิ้นเครือข่ายไม่ใช่เอ็นจิ้นเกม)
  • เอ็นจินเสียงทำสิ่งที่เสียง (มันเป็นเอ็นจิ้นเสียงและไม่ใช่เอ็นจิ้นเกม)

ตัวอย่างสำหรับแอปพลิเคชันที่ยึดตามเอ็นจิ้นหลักที่จัดเตรียมปลั๊กอินเฟรมเวิร์กสำหรับการรวมทุกอย่างเข้าด้วยกันในรูปแบบการจัดการวัตถุของเกมตามส่วนประกอบ แต่ละ Subengine (การเรนเดอร์เสียง) เป็นโมดูลที่เพิ่มเข้ามาในเอ็นจิ้นเกมเป็นส่วนเสริมแต่ละคอมโพเนนต์สามารถเป็นส่วนหนึ่งของ Subengine / โมดูล และการจัดการวัตถุเกม (ตามองค์ประกอบ) คือการเชื่อมต่อระหว่างโมดูลที่แยกกัน

ป้อนคำอธิบายรูปภาพที่นี่


นิยามที่ใกล้เคียงที่สุดสำหรับ Game Engine

เอ็นจิ้นเกมเป็นส่วนหนึ่งของซอร์สโค้ดของเกมของคุณที่มีฟังก์ชั่นทั้งหมดซึ่งมีวัตถุประสงค์เพื่อนำมาใช้ซ้ำในหลาย ๆ เกมและให้คุณใช้รหัสและรันเกมของคุณ ดังนั้นมันจึงรวบรวมส่วนอื่น ๆ ทั้งหมดของรหัส (การเรนเดอร์เสียงฟิสิกส์การจัดการวัตถุเกมการสร้างเครือข่าย) ซึ่งเป็นไลบรารีกรอบงานหรือเอ็นจิ้นเฉพาะ (การเรนเดอร์ฟิสิกส์ ... )

เอ็นจิ้นของเกมเป็นระเบียบอยู่ตรงกลาง



0

@Josh ดังที่ระบุไว้แล้วไม่มีคำจำกัดความที่เข้มงวดของเฟรมเวิร์กหรือเอ็นจิ้น แต่ในแง่ความคิดแล้วทั้งคู่เป็นเครื่องมือที่ต่างกัน

เฟรมเวิร์กมีการกำจัด API พื้นฐานเพื่อให้เครื่องมือระดับสูงขึ้นของผู้ใช้ในการโต้ตอบกับแพลตฟอร์มหรือฟังก์ชั่นที่ไม่มี (ทั่วไป) กังวลเกี่ยวกับประสิทธิภาพความเข้ากันได้ ฯลฯ ในตัวอย่างที่คุณให้ SDL เป็นเฟรมเวิร์ก คุณละทิ้งแพลตฟอร์มและคุณสามารถสร้างซอฟต์แวร์ของคุณหลังเลเยอร์นั้นโดยไม่ต้องกังวลเกี่ยวกับการจัดการหน้าต่างสิ่งต่าง ๆ ที่เฉพาะเจาะจงของระบบปฏิบัติการ ฯลฯ หากคุณต้องการสร้างซอฟต์แวร์ทั้งหมดคุณจะต้องมีกรอบงานที่แตกต่างกัน และสิ่งแพลตฟอร์ม Box2D เพื่อจัดการฟิสิกส์ ฯลฯ

เครื่องยนต์มีความแตกต่างในกรณีนี้เครื่องมือจัดส่งทุกอย่างที่จำเป็นสำหรับการพัฒนาเครื่องยนต์ฟิสิกส์จะให้ทุกอย่างที่จำเป็นในการจัดการฟิสิกส์และจะจัดส่ง API ที่ใช้งานง่ายดังนั้นหากคุณต้องการสร้างแบบจำลองทางฟิสิกส์คุณ ไม่ต้องการห้องสมุดบุคคลที่สามอื่น ๆ เอ็นจิ้นไม่ได้เป็นเพียงแค่ชุดของเฟรมเวิร์กเอ็นจิ้นส่วนต่อประสานส่วนย่อยและรหัสทั่วไปที่ให้ทุกอย่างที่จำเป็นในการทำโครงการให้เสร็จสมบูรณ์โดยไม่จำเป็นต้องมีบุคคลที่สามหรือกังวลเรื่องระดับต่ำกว่า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.