Game Objects ที่อยู่นอกมุมมองกล้องใช้ทรัพยากรคอมพิวเตอร์ / มือถือใน Unity หรือไม่?


11

ในความเป็นเอกภาพขอให้เราสมมติว่าฉันมี Game Objects บางอย่างในฉากของฉันที่มองไม่เห็นด้วยกล้องและไม่แสดงผลในขณะที่เกมกำลังทำงาน

Game Objects เหล่านี้จะใช้ทรัพยากรคอมพิวเตอร์ / มือถือหรือไม่เมื่อเกมทำงาน?

ฉันจะหารายละเอียดเกี่ยวกับการใช้งานแบบนี้ได้ที่ไหน

คำตอบ:


13

สิ่งที่คุณต้องการคือตัวสร้างโปรไฟล์หน่วยความจำซึ่ง Unity จะมี ที่นี่: http://docs.unity3d.com/Manual/ProfilerMemory.html

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

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


5

ฉันคิดว่าคุณควรรู้เกี่ยวกับ Frustrum Culling หรือการลบพื้นผิวด้วย hiden: http://en.wikipedia.org/wiki/Hidden_surface_determination

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


2
@ Gissipi_453 ในขณะที่การวิจัยตามบรรทัดเหล่านี้ยังวิจัยและตระกูล Quad ต.ค. ต้นไม้ (ข้อมูลเชิงพื้นที่การเรียงลำดับ)
จอน

3

คำตอบสั้น ๆ คือ "ใช่"; อะไรก็ตามที่พร้อมใช้ในเกมของคุณก็คือการเพิ่มหน่วยความจำ

สิ่งอื่น ๆ ที่ควรพิจารณาคือค่าใช้จ่ายสำหรับอัตราเฟรมของคุณ:

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

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

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

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

หากคุณหมุนกล้องของคุณคุณจะไม่ทำลายวัตถุเหล่านั้นอย่างแน่นอนเว้นแต่คุณจะรู้ว่ากล้องนั้นจะไม่หมุนกลับเพื่อตรวจสอบวัตถุนั้น "- Katu

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


1

คำตอบจำนวนมากส่วนใหญ่จะพิจารณาด้านกราฟิกของคำถามของคุณ

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

วิธีที่ง่ายที่สุดในการลดผลกระทบของส่วนประกอบปิดหน้าจอเป็นระบบบนพื้นฐานของOnBecameVisibleและOnBecameInvisibleเรียกกลับ

void OnBecameVisible()
{
    myComplexComponent.enabled = true;
}
void OnBecameInvisble()
{
    myComplexComponent.enabled = false;
}

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


1

ใช้หน่วยความจำเพื่อให้มีชีวิตอยู่และอัปเดตตำแหน่งและคุณสมบัติอื่น ๆ

แต่ไม่ใช้ทรัพยากรกราฟิกคอมพิวเตอร์ / มือถือเนื่องจากมองไม่เห็น

ใช่แล้วมันใช้ทรัพยากรหน่วยความจำ แต่ไม่ใช่ทรัพยากรกราฟิกเช่นเดียวกับ Game Object ที่มองเห็นได้


ขอบคุณมาก. นี่เป็นคำตอบที่ตรงมากที่ฉันกำลังมองหา
Gissipi_453

0

สิ่งใดก็ตามที่อยู่ในโปรแกรมใช้ทรัพยากร คุณไม่คิดว่าโปรแกรมทำงานบนความหวังและความฝันใช่ไหม?

คำถามควรเป็นเท่าไหร่ทรัพยากรเกมวัตถุใช้และท้ายที่สุดฉันคิดว่านี่เป็นคำตอบที่มั่นคง: http://answers.unity3d.com/questions/280455/how-much-memory-a-gameobject- consume.html

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


ขอบคุณมาก. ดังนั้นฉันควรทำลายวัตถุที่หายไปจากสายตาของกล้องในขณะที่เกมกำลังทำงานอยู่หรือไม่
Gissipi_453

1
ฉันคิดว่าคำตอบนี้ไม่ได้พยายามตอบคำถามของคุณเลยและมันผิดธรรมดา หากคุณหมุนกล้องคุณจะไม่ทำลายวัตถุเหล่านั้นอย่างแน่นอนเว้นแต่คุณจะรู้ว่ากล้องนั้นจะไม่หมุนกลับเพื่อตรวจสอบวัตถุนั้น โลกของเกมมีอยู่และการเคลื่อนไหวของ AI แสงไฟส่งผลกระทบต่อสิ่งแวดล้อมแม้ว่าคุณจะไม่เห็นก็ตาม
Katu

@ Katu ก็เป็นประเด็นเช่นกัน ขอบคุณ ฉันไม่ควรทำลายวัตถุหากไม่จำเป็นต้องแสดงผลเลย
Gissipi_453

@ Katu ฉันตอบคำถาม: "Game Objects เหล่านี้ (วัตถุในฉากของฉันที่มองไม่เห็นด้วยกล้อง) จะกินทรัพยากรคอมพิวเตอร์ / มือถือหรือไม่เมื่อเกมกำลังทำงานอยู่" คำตอบนั้นคือ: "ใช่สิ่งใดก็ตามที่อยู่ในโปรแกรมใช้ทรัพยากร" และฉันก็อธิบายเกี่ยวกับผลกระทบของวัตถุเกมเปล่าในฉากและต้นทุนทรัพยากร
ส่งคืนจริงเมื่อ

2
@ Gissipi_453 เพื่อตอบคำถามของคุณนั่นขึ้นอยู่กับสิ่งที่เกมวัตถุในฉากกำลังทำจริง ๆ พวกมันถูกสร้าง / ลบและข้อควรพิจารณาอื่น ๆ บ่อยเพียงใด การรู้ว่าเมื่อใดที่ควรปรับให้เหมาะสมเป็นทักษะที่อยู่ในตัวของมันเอง แต่กฎง่ายๆคือการไม่ต้องกังวลจนกว่ามันจะมีอะไรบางอย่างที่ต้องกังวล ค่าใช้จ่ายในเกมวัตถุพิเศษนั้นอยู่ใกล้แค่ไหนดังนั้นอย่ากังวลไป ในบางกรณีถ้าคุณกำลังเพิ่ม / ลบวัตถุบ่อยครั้งการรวมกลุ่มวัตถุสามารถช่วยชีวิตและในกรณีอื่น ๆ ที่คุณสามารถทำเทคนิคอื่น ๆ ทุกอย่างขึ้นอยู่กับว่ามีและสิ่งที่เป็นปัญหา
ส่งคืนจริงเมื่อ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.