จัดการโลกของคุณ
การทดสอบและการปรับแต่ง

คู่มือการเพิ่มประสิทธิภาพ

14min

หน่วยความจำ

  • 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

Document image




  • ตัวชี้วัดประสิทธิภาพของสภาพแวดล้อมการพัฒนาท้องถิ่นที่ตรวจสอบโดยปลั๊กอินอาจแตกต่างจากสภาพแวดล้อมการบริการจริง โปรดใช้เพื่อทำความเข้าใจแนวโน้มประสิทธิภาพโดยประมาณและปัญหาประสิทธิภาพที่อาจเกิดขึ้นของโลจิกเซิร์ฟเวอร์หลายผู้เล่นทั่วโลก.
  • หากไดเรกทอรีการทำงานของ VS Code ไม่ได้ตั้งค่าเป็นโครงการโลก ปลั๊กอินจะไม่ทำงานอย่างถูกต้อง โปรดเลือกโฟลเดอร์โครงการที่ถูกต้องในแผง [Explorer].



2) ไปที่แผง [Run and Debug] ใน VS Code และเปลี่ยนประเภทการดีบักเป็น Zepeto Multiplay Script.

Document image




3) กดปุ่มเล่นบนหน้าจอ Unity เพื่อรันโลก และกดปุ่ม [เริ่มการดีบัก] ใน VS Code เพื่อเริ่มการดีบักขณะรัน.

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

Document image




👍 เคล็ดลับ

  • คุณสามารถเพิ่มตัวชี้วัดประสิทธิภาพต่อไปนี้ได้โดยการคลิกปุ่มสลับการแสดงกราฟประสิทธิภาพในแผง [รันและดีบัก].
    • การใช้ CPU
    • หน่วยความจำที่ใช้
    • หน่วยความจำทั้งหมด
    • ขนาดชุดที่อาศัย
    • หน่วยความจำภายนอก
    • หน่วยความจำ ArrayBuffer
Document image




แนวทางการปรับแต่งที่แนะนำ

โปรดปรับแต่งตามเกณฑ์ต่อไปนี้เพื่อให้แน่ใจว่าโลกที่ปล่อยออกมาทำงานตามสเปคขั้นต่ำ

  • อุปกรณ์ที่มีสเปคขั้นต่ำ (RAM 2GB) จะล้มเหลวเมื่อ:
    • Runtime Profiler > หน่วยความจำที่จัดสรรเกิน 550MB โดยเฉลี่ย
      • Document image
        
    • เมื่อโลกกำลังทำงานจริง ไม่เพียงแต่ทรัพยากรของโลกเท่านั้น แต่ยังมีหลายกระบวนการที่ทำงานในหน่วยความจำ ดังนั้นจึงแนะนำให้เว้นพื้นที่บางส่วนในหน่วยความจำที่จัดสรร
  • สำหรับโลกแบบผู้เล่นหลายคน จะมีการจัดสรรหน่วยความจำต่อแต่ละตัวละคร ดังนั้นคุณต้องจัดการหน่วยความจำตามจำนวนผู้เล่นสูงสุด
    • หน่วยความจำเฉลี่ยต่อ ZEPETO ตัวละคร: 35MB
      • หากคุณใช้หุ่นจำลองประเภทตัวละคร ZEPETO จะใช้หน่วยความจำเท่ากับเมื่อมีตัวละคร Zepeto เข้าสู่ระบบหนึ่งตัว
      • เพื่อวัตถุประสงค์ในการปรับแต่ง เราขอแนะนำให้ใช้หุ่นจำลองประเภท Simple หากเป็นไปได้
    • เฉลี่ยของ 280MB เมื่อมีผู้เข้าร่วมสูงสุด 8 คน
      • นี่คือข้อมูลเฉลี่ย โปรดทดสอบหน่วยความจำที่จัดสรรของคุณโดยการให้ผู้เข้าร่วมสูงสุดเข้าร่วมก่อนการเปิดตัว หากเป็นไปได้

FPS (เฟรมต่อวินาที)

  • ขีดจำกัด FPS สูงสุดคือ 30FPS.



ความจุ

  • ความจุของแพ็คเกจจำกัดอยู่ที่ 1GByte.
  • ด้วยฟีเจอร์การเคลื่อนที่ข้ามโลกที่จัดเตรียมโดย World 1.8.0 คุณสามารถแก้ไขปัญหาส่วนความจุได้โดยอ้อม.



วิธีการปรับแต่ง



สิ่งที่สามารถปรับปรุงเกี่ยวกับทรัพยากร

  • กรุณาลบโฟลเดอร์แพ็คเกจที่ไม่ได้ใช้งานและไฟล์ที่ไม่ได้ใช้งานด้วย
  • กรุณาปรับจำนวนวัตถุในโปรเจกต์และจำนวนต้นไม้/สระในภูมิประเทศ



สิ่งที่สามารถปรับปรุงเกี่ยวกับโค้ด

  • การใช้ Coroutines: yield ไม่ผลิตขยะ แต่การสร้าง waitForSeconds ใหม่จะผลิตขยะ ดังนั้นให้สร้างและใช้วัตถุ
  • ใน Update ( ) ส่วนที่ไม่จำเป็นต้องเรียกทุกเฟรมจะถูกแทนที่เพื่อให้สามารถเรียกทุก n เฟรมได้
  • หลีกเลี่ยงการเรียกฟังก์ชันที่มีตรรกะหนักใน Awake( ) OnEnable( ) Start( )
  • หลีกเลี่ยงการทิ้ง Update ( ) และ LateUpdate ( ) แม้แต่ฟังก์ชันว่าง
  • หลีกเลี่ยงการเพิ่มคอมโพเนนต์ในระหว่างการทำงาน หากจำเป็น การสร้าง prefab จะมีประสิทธิภาพมากกว่า
  • GameObject.Find, GameObject.GetComponent, และ Camera.main มีค่าใช้จ่ายสูง ดังนั้นไม่ควรเรียกจาก Update() แต่ให้เรียกจาก Start() หากจำเป็น
  • การสร้างและทำลายผลิตขยะและการเก็บขยะทำให้กระบวนการช้าลง แทนที่จะพยายามใช้ซ้ำด้วยพูล
  • Renderer.material ใช้ Renderer.sharedMaterial เมื่อเป็นไปได้เพื่อเข้าถึงวัสดุของวัตถ์ที่ผูกพัน เนื่องจากการสร้างสำเนาใหม่มีค่าใช้จ่ายสูงเกินไป



สิ่งที่สามารถปรับปรุงเกี่ยวกับ UI

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