คู่มือการเพิ่มประสิทธิภาพ
- ZEPETO ถูกออกแบบมาเพื่อโหลดทรัพยากรที่ใช้ในโลกเข้าสู่หน่วยความจำล่วงหน้า.
- ตามเวอร์ชัน 1.7.0 ในโลก อุปกรณ์ที่มีสเปคต่ำที่สุดคือ iPhone 8 (RAM 2GB) และ Galaxy S8 (RAM 4GB).
- ดังนั้นเราจึงต้องทำให้มันไม่เกิน 2GB.
- อุปกรณ์ที่มีสเปคขั้นต่ำอาจมีการเปลี่ยนแปลงในภายหลัง.
- ในกรณีของโลกหลายผู้เล่น หน่วยความจำควรได้รับการจัดการโดยพิจารณาจำนวนคนสูงสุด เพราะแต่ละตัวละครมีหน่วยความจำ.
- กรุณาใช้ Runtime Profiler อย่างเป็นทางการที่ ZEPETO จัดเตรียมไว้ให้.
📘 กรุณาอ้างอิงจากคู่มือต่อไปนี้. [โปรไฟเลอร์รันไทม์]
วิธีตรวจสอบตัวชี้วัดประสิทธิภาพสำหรับเซิร์ฟเวอร์ World Multiplayer ในสภาพแวดล้อมการพัฒนาท้องถิ่นของคุณ
หากคุณใช้ VS Code เป็นโปรแกรมแก้ไขสคริปต์ คุณสามารถตรวจสอบตัวชี้วัดประสิทธิภาพต่างๆ เช่น การใช้ CPU การใช้หน่วยความจำ และอื่นๆ สำหรับเซิร์ฟเวอร์ในสภาพแวดล้อมการพัฒนาท้องถิ่นของคุณผ่านปลั๊กอิน
📘 โปรดดูคู่มือต่อไปนี้เกี่ยวกับวิธีตั้งค่า VS Code เป็นโปรแกรมแก้ไขสคริปต์ใน Unity
1) ค้นหาและติดตั้ง Flame Chart Visualizer สำหรับโปรไฟล์ JavaScript ในแผง [Extension] ที่ด้านซ้ายของหน้าจอ VSCode
- ตัวชี้วัดประสิทธิภาพของสภาพแวดล้อมการพัฒนาท้องถิ่นที่ตรวจสอบโดยปลั๊กอินอาจแตกต่างจากสภาพแวดล้อมการบริการจริง โปรดใช้เพื่อทำความเข้าใจแนวโน้มประสิทธิภาพโดยประมาณและปัญหาประสิทธิภาพที่อาจเกิดขึ้นของโลจิกเซิร์ฟเวอร์หลายผู้เล่นทั่วโลก.
- หากไดเรกทอรีการทำงานของ VS Code ไม่ได้ตั้งค่าเป็นโครงการโลก ปลั๊กอินจะไม่ทำงานอย่างถูกต้อง โปรดเลือกโฟลเดอร์โครงการที่ถูกต้องในแผง [Explorer].
2) ไปที่แผง [Run and Debug] ใน VS Code และเปลี่ยนประเภทการดีบักเป็น Zepeto Multiplay Script.
3) กดปุ่มเล่นบนหน้าจอ Unity เพื่อรันโลก และกดปุ่ม [เริ่มการดีบัก] ใน VS Code เพื่อเริ่มการดีบักขณะรัน.
คุณสามารถตรวจสอบตัวชี้วัดประสิทธิภาพของเซิร์ฟเวอร์หลายผู้เล่นแบบเรียลไทม์ในแผง [รันและดีบัก].
👍 เคล็ดลับ
- คุณสามารถเพิ่มตัวชี้วัดประสิทธิภาพต่อไปนี้ได้โดยการคลิกปุ่มสลับการแสดงกราฟประสิทธิภาพในแผง [รันและดีบัก].
- การใช้ CPU
- หน่วยความจำที่ใช้
- หน่วยความจำทั้งหมด
- ขนาดชุดที่อาศัย
- หน่วยความจำภายนอก
- หน่วยความจำ ArrayBuffer
โปรดปรับแต่งตามเกณฑ์ต่อไปนี้เพื่อให้แน่ใจว่าโลกที่ปล่อยออกมาทำงานตามสเปคขั้นต่ำ
- อุปกรณ์ที่มีสเปคขั้นต่ำ (RAM 2GB) จะล้มเหลวเมื่อ:
- Runtime Profiler > หน่วยความจำที่จัดสรรเกิน 550MB โดยเฉลี่ย
-
- เมื่อโลกกำลังทำงานจริง ไม่เพียงแต่ทรัพยากรของโลกเท่านั้น แต่ยังมีหลายกระบวนการที่ทำงานในหน่วยความจำ ดังนั้นจึงแนะนำให้เว้นพื้นที่บางส่วนในหน่วยความจำที่จัดสรร
- สำหรับโลกแบบผู้เล่นหลายคน จะมีการจัดสรรหน่วยความจำต่อแต่ละตัวละคร ดังนั้นคุณต้องจัดการหน่วยความจำตามจำนวนผู้เล่นสูงสุด
- หน่วยความจำเฉลี่ยต่อ ZEPETO ตัวละคร: 35MB
- หากคุณใช้หุ่นจำลองประเภทตัวละคร ZEPETO จะใช้หน่วยความจำเท่ากับเมื่อมีตัวละคร Zepeto เข้าสู่ระบบหนึ่งตัว
- เพื่อวัตถุประสงค์ในการปรับแต่ง เราขอแนะนำให้ใช้หุ่นจำลองประเภท Simple หากเป็นไปได้
- เฉลี่ยของ 280MB เมื่อมีผู้เข้าร่วมสูงสุด 8 คน
- นี่คือข้อมูลเฉลี่ย โปรดทดสอบหน่วยความจำที่จัดสรรของคุณโดยการให้ผู้เข้าร่วมสูงสุดเข้าร่วมก่อนการเปิดตัว หากเป็นไปได้
- ขีดจำกัด FPS สูงสุดคือ 30FPS.
- ความจุของแพ็คเกจจำกัดอยู่ที่ 1GByte.
- ด้วยฟีเจอร์การเคลื่อนที่ข้ามโลกที่จัดเตรียมโดย World 1.8.0 คุณสามารถแก้ไขปัญหาส่วนความจุได้โดยอ้อม.
- กรุณาอ้างอิงข้อมูลที่เกี่ยวข้องกับการปรับแต่ง Unity.
- กรุณาลบโฟลเดอร์แพ็คเกจที่ไม่ได้ใช้งานและไฟล์ที่ไม่ได้ใช้งานด้วย
- กรุณาปรับจำนวนวัตถุในโปรเจกต์และจำนวนต้นไม้/สระในภูมิประเทศ
- การใช้ Coroutines: yield ไม่ผลิตขยะ แต่การสร้าง waitForSeconds ใหม่จะผลิตขยะ ดังนั้นให้สร้างและใช้วัตถุ
- ใน Update ( ) ส่วนที่ไม่จำเป็นต้องเรียกทุกเฟรมจะถูกแทนที่เพื่อให้สามารถเรียกทุก n เฟรมได้
- หลีกเลี่ยงการเรียกฟังก์ชันที่มีตรรกะหนักใน Awake( ) OnEnable( ) Start( )
- หลีกเลี่ยงการทิ้ง Update ( ) และ LateUpdate ( ) แม้แต่ฟังก์ชันว่าง
- หลีกเลี่ยงการเพิ่มคอมโพเนนต์ในระหว่างการทำงาน หากจำเป็น การสร้าง prefab จะมีประสิทธิภาพมากกว่า
- GameObject.Find, GameObject.GetComponent, และ Camera.main มีค่าใช้จ่ายสูง ดังนั้นไม่ควรเรียกจาก Update() แต่ให้เรียกจาก Start() หากจำเป็น
- การสร้างและทำลายผลิตขยะและการเก็บขยะทำให้กระบวนการช้าลง แทนที่จะพยายามใช้ซ้ำด้วยพูล
- Renderer.material ใช้ Renderer.sharedMaterial เมื่อเป็นไปได้เพื่อเข้าถึงวัสดุของวัตถ์ที่ผูกพัน เนื่องจากการสร้างสำเนาใหม่มีค่าใช้จ่ายสูงเกินไป
- ขึ้นอยู่กับวัตถุประสงค์ แบ่งผืนผ้าใบและตั้งค่าผืนผ้าใบที่ไม่ได้ใช้งานให้เป็นมองไม่เห็น
- จำกัด GraphicRaycasters และล้าง Raycast Target ลบ GraphicRaycaster ออกจากผืนผ้าใบและแทรก Graphic Raycaster แยกต่างหากลงในองค์ประกอบแต่ละอย่าง เช่น ปุ่ม
- หากคุณไม่ต้องการ Raycast Target ในข้อความหรือภาพ ให้ลบออก
- หลีกเลี่ยงการใช้ Layout Groups เว้นแต่จะเป็น UI แบบไดนามิก ใช้จุดยึดเพื่อจัดระเบียบ
- รายการใหญ่และมุมมองกริดมีค่าใช้จ่ายสูง ดังนั้นควรหลีกเลี่ยงการใช้มัน
- เมื่อใช้ UI แบบเต็มหน้าจอ ให้ซ่อนทุกอย่างยกเว้นผืนผ้าใบนี้ มันจะช่วยลดความจำเป็นในการให้กล้องเรนเดอร์ฉาก 3D และยังซ่อนผืนผ้าใบที่ไม่จำเป็น
- ลด Application.targetFrameRate เพราะคุณไม่จำเป็นต้องอัปเดตทุก 60 fps เมื่อใช้ UI แบบเต็มหน้าจอ
- อย่าทิ้งพื้นที่ว่างสำหรับกล้องเรนเดอร์ของผืนผ้าใบที่ใช้ World Space และเติมเต็มด้วยกล้องที่คุณใช้
- หากคุณทิ้งว่างไว้ Unity จะเติมกล้อง.main โดยอัตโนมัติ
- เปลี่ยนคลิปเสียงเป็นโมโน
- เปิดใช้งานการใช้ไฟล์ WAV ไฟล์เพลงที่บีบอัดจะถูกถอดบีบอัดและบีบอัดใหม่ในระหว่างเวลาการสร้าง คุณภาพของไฟล์เพลงจะลดลงในระหว่างกระบวนการนี้
- บีบอัดคลิปและลดอัตราบิตการบีบอัด
- ใช้ไฟล์ส่วนใหญ่ด้วย Vorbis และเปลี่ยนเสียงสั้นเป็น ADPCM
- ไม่เกิน 22,050 Hz
- เลือกประเภทการโหลดที่เหมาะสม
- สำหรับไฟล์เพลงที่มีขนาด 200 kb หรือน้อยกว่า ให้ถอดบีบอัดเมื่อโหลด
- สำหรับไฟล์เพลงที่มีขนาด 200 kb หรือมากกว่า ให้คงบีบอัดในหน่วยความจำ
- ตั้งค่าไฟล์ขนาดใหญ่และเพลงพื้นหลังให้ตั้งค่าเป็นสตรีมมิ่ง
- ไฟล์เพลงที่เงียบจะไม่สิ้นสุดโดยการเปลี่ยนระดับเสียงเป็นศูนย์เพียงอย่างเดียว ดังนั้นให้แน่ใจว่าพวกเขาถูกทำลาย