เหตุผลที่อยู่เบื้องหลังการออกแบบเอนจิ้น Unity3D (วัตถุเกม / องค์ประกอบการแปลง)


14

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


สำหรับฉันแล้วเสียงแบบนี้ดูเหมือนว่าเป็นมรดกทางสถาปัตยกรรม บางทีการแปลงองค์ประกอบนี้เคยเป็นองค์ประกอบปกติที่เป็นตัวเลือกดังนั้นคุณอาจมีวัตถุ "ออก" ของพื้นที่คาร์ทีเซียน จากนั้นข้อ จำกัด ในการนำไปใช้บางอย่าง (การเพิ่มประสิทธิภาพ?) จำเป็นต้องมีองค์ประกอบนี้อยู่เสมอและมันยังคงอยู่ในลักษณะนี้ แต่นั่นเป็นเพียงข้อสันนิษฐานก็จะต้องใช้วิศวกรจาก Unity เพื่อตอบคำถามนั้นจริง
Laurent Couvidou

คำตอบ:


11

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

โดยทั่วไปแล้วคำถามนี้ถามว่า"ถ้ามีความสัมพันธ์ 1 ถึง 1 ระหว่าง X และ Y ทำไม Y ไม่ได้เป็นส่วนหนึ่งของ X หรือในทางกลับกัน" และคำตอบทั่วไปก็คือซอฟต์แวร์จะพัฒนาและบำรุงรักษาได้ง่ายขึ้นเมื่อแบ่งเป็นส่วนเล็ก ๆ ที่มีอยู่ในตัวเองแม้ว่า 2 ส่วนจะทำงานร่วมกันเสมอ


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

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

1

การแปลงเป็นองค์ประกอบที่จำเป็นใน Unity

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


1
คำถามไม่ได้เกี่ยวกับองค์ประกอบของการออกแบบ มันเกี่ยวกับสาเหตุที่ "การแปลง" ไม่ใช่องค์ประกอบเช่นกัน
bummzack

1
แต่การแปลงเป็นองค์ประกอบใน Unity! docs.unity3d.com/Documentation/ScriptReference/Transform.html สิ่งเดียวที่แปลกเกี่ยวกับการแปลงรูปก็คือมันเป็นส่วนประกอบที่จำเป็นสำหรับ GameObject
Mortennobel

ฉันเดาแล้วคำถามเกี่ยวกับสาเหตุที่คุณลบออกไม่ได้ OP คงไม่ติดแท็กคำถามของเขา "ตามองค์ประกอบ" หากเขาไม่คุ้นเคยกับคำนั้น
bummzack

คุณพูดถูก - ขอบคุณ ฉันได้อัปเดตคำตอบเพื่อให้ตอบคำถามได้ดีขึ้น
Mortennobel

3
คำถามคือว่าทำไมการแปลงข้อมูลเป็นส่วนประกอบแยกต่างหาก (ต่างจากข้อมูลธรรมดาภายใน GameObject เช่นชื่อ, มาสก์ชั้น, แท็ก) ฉันพยายามทำให้ชัดเจนยิ่งขึ้นในการแก้ไขโพสต์ล่าสุดของฉัน
snake5

0

สิ่งTransformComponentที่ยากที่สุดComponentในการออกแบบในสถาปัตยกรรมวิดีโอเกม เกือบทุกComponentความต้องการอื่น ๆต้องทราบเกี่ยวกับGameObjectตำแหน่งการหมุนหรือการปรับขนาดที่กำหนดดังนั้นการแยกระบบที่สัมพันธ์กันทั้งหมดเหล่านี้จึงเป็นเรื่องยาก

จะมีการแลกเปลี่ยนในสถาปัตยกรรมเสมอ ด้วยการTransformComponentเป็นแบบคงที่ (เช่นไม่ใช่แบบไดนามิก) นักพัฒนาที่ Unity สามารถเขียนโค้ดภายใต้สมมติฐานนี้ ฉันคิดว่านี่จะทำให้สิ่งต่าง ๆ ง่ายขึ้นโดยไม่เพิ่มความไม่สะดวกด้านข้างของเรา นี้จะคล้ายกับกระบวนทัศน์เชิงวัตถุที่GameObjectจะextendบาง,abstract classTransformable

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